Linux 2.4 NAT HOWTO( 六 )




#;iptables;-t;nat;-A;POSTROUTING;-s;192.168.1.0/24;-o;eth1;
-j;SNAT;--to;1.2.3.0-1.2.3.4;--to;1.2.3.6-1.2.3.254


改变本机产生的连线之目的地
如果本机产生的封包之目的地改变了(例如 , 用;OUTPUT;链) , 而这样会导致封包由不同的界面送出去 , 这样来源地址也跟著变为那个界面 。举例子说 , 改变一个环回(loopback)封包之目的地由;eth0;送出 , 会让来源地址也由;127.0.0.1;变成;eth0;的地址;而不像其它来源地址映对那样 , 这是立即完成的 。当然 , 所有这些映对在回应封包进入时是颠倒过来的 。;



--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

7.;特殊协定
有些协定是并不想要做;NAT;的 。对於每一个这样的协定而言 , 有两个延伸设定(extension)是必须要写清楚的:一个是关於协定之连线追踪 , 另一个关於实际的;NAT 。;


在;netfilter;发行套件里面 , 有一些关於;ftp;的现行模组:ip_conntrack_ftp.o;与;ip_nat_ftp.o; 。如果您把这些插入到您的核心里面(或您永久性的编译它们) , 那麽要在;ftp;连线上做任何种类的;NAT;都是可行的 。如果您不这样的话 , 那您可以使用被动模式;ftp , 不过如果您要做一些动作甚於简单;Source;NAT;的话 , 这就可能不那麽可靠了 。;



--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

8.;NAT;的一些限制;(caveats)
如果在一个连线上做;NAT , 所有;双向;(传出和传入);的封包 , 都必须要通过;NAT;主机才行 , 否则并不可靠 。尤其在连线追踪程式重组碎片;(fragments)的时候 , 也就是说 , 不但连线追踪会不可能 , 而且您的封包根本就不能通过 , 因为碎片会被挡下 。;



--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

9.;Source;NAT;与路由
如果您要做;SNAT , 您会想要确定经过;SNAT;封包所传给的主机会将回应送回给;NAT;主机 。例如 , 如果您映对某些传出封包到来源地址;1.2.3.4;之上 , 那麽外部的路由器就必须知道要将回应封包(目的地为;1.2.3.4;)送回给该主机 。这可以用如下方法做到:;


如果您要在主机自己的地址(路由和其它所有运作皆正常)上面做;SNAT , 您无需做任何动作 。;
如果您要在一个在本机网路上尚未使用的地址做;SNAT(例如 , 映对到在;1.2.3.0/24;网路上的一个可用;IP;1.2.3.99) , 您的;NAT;主机就需要回应关於该地址的;ARP;请求 , 一如它自己本身的一样:最简单的方法就是建立;IP;alias , 例如:;
#;ip;address;add;1.2.3.99;dev;eth0

如果您要在一个完全不同的地址上做;SNAT , 您就要确定;SNAT;封包抵达的机器能够路由回该;NAT;主机 。如果;NAT;主机是它们的预设闸道器的话 , 是可以做到的 , 否则 , 您就要广告(advertize;)一个路由(如果跑路由协定的话) , 或是手工的在每一台参与机器上增加路由 。;


--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

10.;在同一网路上的;Destination;NAT;
如果您要做;portforwarding;回到同一个网路 , 您要确定前向和回应封包双方都经过该;NAT;主机(这样它们才能被修改) 。NAT;程式从现在开始(2.4.0-test6以後) , 会挡掉後面情形所产生的传出;ICMP;重导向:那些已经;NAT;的封包以它所进入的相同界面传出 , 而接收端伺服器仍尝试直接回应到客户端(不认可该回应) 。;

推荐阅读