隐约记得路由器上有nat的功能,当然有,而且好像应该是三种吧,一种是内网的所有IP通过一个固定的IP上网,一种是内网的一个指定的IP通过一个指定的IP上网,还有一种就是内网的IP通过一个指定的IP地址池上网.
linux作为优秀的服务器也提供了nat功能,但好像只听说过用第一种的,连第二种都在网上找不到,第三种更不用说了.俺很不幸的给总监要求把第二种做出来.几经痛苦之后终于做出来了.而且还给路由器上的第二种nat有了更深刻的认识,不敢独享,特拿出来,新手把玩高手勿笑.
可能有的兄弟还没有明白我要用nat实现什么,特详细说明一下:内网192.168.0.0/24的网段要通过linux网关上网.假定公网IP为192.168.1.0/24.(记清楚假定哟).这时要求内网机器192.168.0.2通过网关以192.168.1.2的IP上网.也就是把192.168.0.2完全放在公网.呵呵,聪明的你一定想到了,一条出去和一条进来两条nat就可以搞定了.
iptables -t nat -A POSTROUTING -s 192.168.0.2 -j SNAT --to 192.168.1.2
iptables -t nat -A PREROUTING -d 192.168.1.2 -j DANT --to 192.168.0.2
就这样一条正向一条反向就OK了.实际情况你可以试一下,这样是不可以了.便是仔细检查语法没有问题,理论也没有问题.那倒底为什么不行呢.仔细思考一下.192.168.0.2的ip过来以后先经过出去的nat.ip地址被转换成了192.168.1.2(公网IP),出去应该是没有问题.但是它办完事回来的时候,再找192.168.1.2的时候,这个时候找这个IP的时候是不会找网关的.因为网关上没有192.168.1.2的IP.所以这就是问题所在.解决办法很简单:
ifconfig eth0:0 192.168.1.2
在网关的外网卡再加一个IP就可以了.呵呵,是公网IP哟,而且要是你申请下来的呀,要是乱加就乱了.
这个问题解决了.前面说对路由器的nat有了更新的认识,我想就是你在设IP的时候,路由器上会自动把那个IP绑定在他的外网卡上吧,只是这样想的具体怎么实现的不得而知,但是还有一个疑问就是怎么在linux做网关的机器上实现第三种nat呢,很难的一个课题了吧,想想又不想想,先放下吧,哪天总监说:"你把第三个nat做出来吧"的时候再头痛吧,小弟新手,文中有不足之处敬请斧正.
转载于:https://blog.51cto.com/rainbird/41002