IPTABLE做NAT共享小区宽带上网

kevin.Zhu 发布于:2013-1-16 1:19 分类:Iptables  有 18 人浏览,获得评论 0 条  

我用新装的redhat 7.2,公司的代理服务器有两个网卡:eth0:172.16.0.1/24(公司内部网段),eth1:10.12.9.172/24(小区宽带分配的地址),在linux服务器上可以上网,打算用iptable做NAT公司共享上网,于是:
echo 1 〉/proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
modprobe ip_table
modprobe ip_nat_table
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to 10.12.9.172
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 172.16.0.1
之后,只是在172.16.0.2上可以ping到所有广域地址,比如:202.96.134.133等,但是,就是不能上网,发现DNS不能解析,有发现telnet,ftp都不能出去,请大家帮忙检查问题何在?为何只可以过ICMP报文,是否和firewall有关呢?急切盼复,谢谢!

求助IPTABLE做NAT共享小区宽带上网,谢谢!

把FIREWALL设为NONE试试


oak

求助IPTABLE做NAT共享小区宽带上网,谢谢!

现在问题完全解决了,经检查和故障在现,是我的iptable语句出错,应该为 
去除PREROUTING语句,并更改POSTROUTING语句为:iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth1 -j SNAT --to 10.12.9.172

希望对以后需要在相同场景下配置服务器的朋友有所帮助,并谢谢所有关心的朋友!

在内部主机连接到外部网络时,当第一个数据包到达NAT路由器时,router检查它的NAT表,因为是NAT是静态配置的,故可以查询出来(simply entry),然后router将数据包的内部局部IP(源地址)更换成内部全局地址,再转发出去。外部主机接受到数据包用接受到的内部全局地址来响应,NAT接受到外部回来的数据包,再根据NAT表把地址翻译成内部局部IP,转发过去。为什么要“将数据包的内部局部IP(源地址)更换成内部全局地址,再转发 出去。外部主机接受到数据包用接受到的内部全局地址来响应,NAT接受到 外部回来的数据包,再根据NAT表把地址翻译成内部局部IP,转发过去。