Next Previous Contents

10. 在同一网路上的 Destination NAT

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

经典的情形是内部人员尝试连接到您的 `公有(public)' 网站伺服器,实际上是从公有地址(1.2.3.4) DNAT 到一个内部的机器(192.168.1.1)去,就像这样:

# iptables -t nat -A PREROUTING -d 1.2.3.4 \
        -p tcp --dport 80 -j DNAT --to 192.168.1.1

一个方法是跑一台内部 DNS 伺服器,它知道您的公有网站的真正(内部) IP 地址,而将其它请求转传给外部的 DNS 伺服器。换而言之,关於您网站伺服器的记录会正确地显示为内部 IP 地址。

而另一个方法是同时让这台 NAT 主机将该等连线之来源 IP 地址映对为它自己的地址,我们可以像如下那样做(假设 NAT 主机之内部 IP 地址为 192.168.1.250):

# iptables -t nat -A POSTROUTING -d 192.168.1.1 -s 192.168.1.0/24 \
        -p tcp --dport 80 -j SNAT --to 192.168.1.250

因为 PREROUTING 规则是最先执行的,对内部网站伺服器而言,封包就已经被定向好了:我们可以内定好哪个为来源 IP 地址。


Next Previous Contents