Linux 2.4 NAT HOWTO( 五 )


#;iptables;-t;nat;-A;PREROUTING;-i;eth1;-j;DNAT;--to;5.6.7.8

##;Change;destination;addresses;to;5.6.7.8,;5.6.7.9;or;5.6.7.10.
#;iptables;-t;nat;-A;PREROUTING;-i;eth1;-j;DNAT;--to;5.6.7.8-5.6.7.10

##;Change;destination;addresses;of;web;traffic;to;5.6.7.8,;port;8080.
#;iptables;-t;nat;-A;PREROUTING;-p;tcp;--dport;80;-i;eth1;
-j;DNAT;--to;5.6.7.8:8080

##;Redirect;local;packets;to;1.2.3.4;to;loopback.
#;iptables;-t;nat;-A;OUTPUT;-d;1.2.3.4;-j;DNAT;--to;127.0.0.1


重导向;(Redirection)
在;Destination;NAT;有一个特别的情形:它是一个简单的便利 , 完全等同於给传入界面地址做;DNAT;一样 。;


##;Send;incoming;port-80;web;traffic;to;our;squid;(transparent);proxy
#;iptables;-t;nat;-A;PREROUTING;-i;eth1;-p;tcp;--dport;80;
-j;REDIRECT;--to-port;3128


6.3;进一步的映对(Mappings);
还有许多;NAT;上面的解决方案是大多数人无需用到的 。这里不妨和那些有兴趣的朋友探讨一下:;


同一□围内的复合地址(Multiple;Addresses)之选择 。
如果您已经指定了一段;IP;地址 , ;而;IP;地址的使用选择是基於机器所知连线目前最少使用之;IP 。它可以提供最原始的平衡负载(load-balancing) 。;


建立空;NAT;映对
您可以使用;`-j;ACCEPT";目标来让一个连线通过 , 而绕过;NAT;的处理 。;


标准的;NAT;行为(Behaviour)
预设的行为是在使用者制定的规则限制内 , 尽可能少的改变连线 。换而言之 , 非不得已不要重映对(remap)埠口 。;


绝对来源埠口映对
如果其它连线已经被映对到新的连线 , 就算对於一个无需;NAT;的连线来说 , 来源埠口的转换有时或是必须绝对存在的 。让我们假设一个封包伪装的情形 , 这已经非常普遍了:;


一个网页连线由一台;192.1.1.1;的机器从;port;1024;建立 , 要连接到www.netscape.com;port;80 。;
它被封包伪装主机以其自己的;IP;地址(1.2.3.4)进行伪装 。;
该封包伪装主机尝试由;1.2.3.4;(它的外部界面地址);port;1024;来做一个网页连线至www.netscape.com;port;80 。;
然後;NAT;程式改变第二个连线的来源埠口为;1025 , 所以这两个连线不至於相冲(clash) 。;

当这个绝对来源映对存在之时 , 埠口被拆分为三个等级:;

512;以下的埠口;
512;到;1023;之间的埠口;
1024;以上的埠口;
任何一个埠口都不会被绝对映对到不同的等级去 。;


当;NAT;失效时会怎样?
如果没有办法如用户要求那样独一无二地映对连线 , 那麽连线就会被挡掉 。当一个封包不能够界定为任何连线的时候 , 结果也一样 , 因为它们可算是畸形的 , 或者是该机器记忆体耗光了 , 诸如此类 。;


复合映对、重叠、和相冲(clash)
您可以设定;NAT;规则在同一个□围之上映对封包;NAT;程式足以聪明的去避免相冲 。比方说 , 用两条规则将;192.168.1.1;和;192.168.1.2;这两个来源地址分别映对到;1.2.3.4 , 是完全可行的 。;


再来 , 您可以映对到真实的、已用的;IP;地址 , 只要这些地址通过这个映对主机就行 。所以 , 如果您获得一个网路(1.2.3.0/24) , 但有一个内部网路使用这些地址 , 而另一个使用私有地址;192.168.1.0/24; , 您就可以;NAT;那些;192.168.1.0/24;的来源地址到;1.2.3.0;网路之上 , 而无需担心相冲:;

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


这同样适用於那些;NAT;主机自己使用的地址:这其实就是封包伪装如何工作的了(分享伪装封包地址和来自主机本身封包之;`真实";地址 。;);


更甚者 , 您还可以映对相同的封包到许多不同的目标(targets)上去 , 而且它们都是共享的 。例如 , 如果您不想映对任何东西到;1.2.3.5;上去 , 您可以这样做:;

推荐阅读