Linux 2.4 NAT HOWTO( 四 )




5.2;关於挑选哪些封包来;mangle;的细节;
我前面已经说过 , 您可以指定来源和目的地地址 。如果您省略来源地址的选项 , 那麽就泛指任何来源 。如果您省略目的地地址 , 则泛指所有目的地地址 。;


您还可以指定一个特定协定;(`-p";or;`--protocol")呢 , 例如;TCP;或;UDP:只有这些协定的封包才符合该规则 。其主要原因是 , 指定;tcp;或;udp;协定可以允许更多选项:尤其是;`--source-port";与;`--destination-port";选项;(缩写为;`--sport";与;`--dport";) 。;


这些选项可以让您指定只有哪些特定来源和目的地埠口的封包才符合该规则 。这在您要重导;web;请求;(TCP;port;80;或;8080);但又怕影响其它封包的时候 , 就很好用了 。;


这些选项必须接在;`-p";选项的後面(这会在为该协定载入共享函式库时有副作用) 。您可以使用埠口号码 , 或者是在;/etc/services;档中的名称 。;


所有这些您能选择的封包之不同品质 , 都详细列在那个详细得有点恐怖的;manual;page;中了(man;iptables) 。;



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

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

6.;谈谈要怎样;Mangle;封包
现在 , 我们知道如何去挑选那些我们要;mangle;的封包 。为了要完善我们的规则 , 我们需要准确无误的告诉核心 , 什麽才是我们要对封包做的 。;


6.1;Source;NAT;
您想要做;Source;NAT , 是要去将连线的来源地址换成别的什麽的 。这就要在它最後要送出去之前 , 於;POSTROUTING;链中完成了;这是一个非常重要的细节 , 因为它意味著所有在;Linux;主机本身上的其它东西;(routing,;packet;filtering);都只看见那个还没改变的封包 。同时 , 这也就是说 , `-o";(传出界面);选项可以派上用场了 。;


Source;NAT;是用;`-j;SNAT";来指定的 , 同时 , ;`--to;source";则指定一个;IP;地址、或一段;IP;地址、以及一个可配选的埠口或一段值域的埠口(仅适用於;UDP;和;TCP;协定) 。;


##;Change;source;addresses;to;1.2.3.4.
#;iptables;-t;nat;-A;POSTROUTING;-o;eth0;-j;SNAT;--to;1.2.3.4

##;Change;source;addresses;to;1.2.3.4,;1.2.3.5;or;1.2.3.6
#;iptables;-t;nat;-A;POSTROUTING;-o;eth0;-j;SNAT;--to;1.2.3.4-1.2.3.6

##;Change;source;addresses;to;1.2.3.4,;ports;1-1023
#;iptables;-t;nat;-A;POSTROUTING;-p;tcp;-o;eth0;-j;SNAT;--to;1.2.3.4:1-1023


封包伪装;(Masquerading)
有一个;Source;NAT;之特例 , 叫做封包伪装:它只用於动态分配的;IP;地址 , 例如标准的拨接(如果用静态;IP;地址 , 则使用前述之;SNAT) 。;


您无需明确地将;masquerading;放进来源地址那里去:它将会使用封包传出界面作为来源地址 。但更重要的是 , 如果该连接(link)断掉的话 , 那麽连线;(connections , 无可避免的将失掉);也会被忘掉 , 当连线用新的;IP;地址回来的时候就会有问题了 。;


##;Masquerade;everything;out;ppp0.
#;iptables;-t;nat;-A;POSTROUTING;-o;ppp0;-j;MASQUERADE


6.2;Destination;NAT;
一旦封包进入 , 会由;PREROUTING;链完成处理;也就是说 , 除了该主机自己的其它东西(诸如:路由、封包过滤);都将封包看成要送到;`真正";目的地 。另外 , 那个;`-i";(传入界面);选项也可以在这里使用 。;


需要修改本机产生的封包之目的地的话 , 那麽;OUTPUT;链就可以用上了 , 不过这并不常碰到 。;


Destination;NAT;必须以;`-j;DNAT";来指定使用 , 同时用;`--to;destination";选项指定一个;IP;地址、或一段;IP;地址 , 以及可以配选一个埠口或一段埠口值域(只能用於;UDP;和;TCP;协定上面) 。;


##;Change;destination;addresses;to;5.6.7.8

推荐阅读