天天看點

Linux 2.4 NAT (網絡位址轉換) HOWTO(二)

我将 NAT 分為兩種不同的類型﹕ <b>Source NAT</b> (SNAT) 與 <b>Destination NAT</b> (DNAT)

Source NAT 就是您将改變第一個封包的來源位址﹕例如﹐您為傳入的聯機做 caching 的動作。Source NAT 永遠會在封包傳出網線之前就做好 post-routing 的動作。封包僞裝(Masquerading)就是一個 SNAT特例。

Destination NAT 就是您将改變第一個封包的目的地位址﹕例如您要為傳出的聯機做 caching 的動作。Destination NAT 永遠會在封包從網線進入之後就馬上做好 pre-routing 的動作。Port forwarding﹑負載分擔﹑以及透明代理﹐都屬于 DNAT。

<b></b>

非常抱歉﹐假如您仍然忙于從 2.0(ipfwadm) 到 2.2(ipchains) 的轉型的話。不過﹐這也是個喜� 參半的消息啦。

首先﹐您可以輕易的一如往昔地使用 ipchains 和 ipfwadm。要這樣做的話﹐您需要将最新的 netfilter套件中的 `ipchains.o' 或 `ipfwadm.o' 核心子產品加載。它們是互相排斥的(您應已獲警告了)﹐同時也不能和其它 netfilter 子產品同時整合在一起。

一旦其中一個子產品被加載﹐您就可以如常使用 ipchains 和 ipfwadm 了﹐但也有如下一些變化啦﹕

用 ipchains -M -S﹐或是 ipfwadm -M -s 作僞裝逾時将不再有效。因為逾時設定已經移至新的 NAT 牯c中﹐是以這裡也就沒什麼所謂了。

在僞裝清單中顯示的 ini seq﹑delte﹑和 previous delta 字段﹐将永遠為零。

同時歸零(zeroing)和列示記數器(counter)的 `-Z -L' 已無作用﹕記數器将不能再歸零了。

Hacker 們仍要留意之處﹕

您現在可以捆綁 61000-65095 之間的埠口﹐而無需理會您是否使用封包僞裝技術。在過去﹐封包僞裝程式會把此值域内的所有東西捕獲進來﹐是以其它程式就不可用之了。

至于(尚未成文之) getsockname 破解﹐在過去﹐透明代理程式可以找出那些不再有效聯機之真正目的地。

至于(尚未成文之) bind-to-foreign-address 破解﹐同樣尚未實作﹔這在過去用以完善透明代理的構想。

沒錯﹐這也是大多數朋友之需。如果您用 PPP 撥接獲得的動态 IP (如果您不了解的話﹐那您應該是了)﹐您或許隻想單純告訴您的主機讓所有來自您内部網絡的封包﹐看起來如來自該 PPP 撥接主機一樣。

# Load the NAT module (this pulls in all the others).

modprobe iptable_nat

# In the NAT table (-t nat), Append a rule (-A) after routing

# (POSTROUTING) for all packets going out ppp0 (-o ppp0) which says to

# MASQUERADE the connection (-j MASQUERADE).

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Turn on IP forwarding

echo 1 &gt; /proc/sys/net/ipv4/ip_forward

注﹕您這裡并沒做任何封包過濾﹕如要的話﹐請參考 Packet Filtering HOWTO﹕将 NAT 和封包過濾合并起來就是了。

這個其實取決于使用者而已﹐是以我并不是很為向後相容問題而擔心。您可以單純使用 iptables -t nat做 port forwarding 的動作。例如﹐在 Linux 2.2 您或許已經這樣做了﹕

# Linux 2.2

# Forward TCP packets going to port 8080 on 1.2.3.4 to 192.168.1.1's port 80

ipmasqadm portfw -a -P tcp -L 1.2.3.4 8080 -R 192.168.1.1 80

而現在﹐如此則可﹕

# Linux 2.4

# Append a rule pre-routing (-A PREROUTING) to the NAT table (-t nat) that

# TCP packets (-p tcp) going to 1.2.3.4 (-d 1.2.3.4) port 8080 (--dport 8080)

# have their destination mapped (-j DNAT) to 192.168.1.1, port 80

# (--to 192.168.1.1:80).

iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 \

        -j DNAT --to 192.168.1.1:80

假如您想讓這條規則同時修改本機聯機的話(如﹐即使在 NAT 主機本身﹐要連接配接 1.2.3.4 的 8080 埠口之 telnet 聯機﹐會幫您連接配接至 192.168.1.1 的 80 埠口)﹐您就可以插入相同的規則至 OUTPUT 鍊中(它隻适用于本機傳出的封包)﹕

iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080 \

本文轉自 makewong 51CTO部落格,原文連結:http://blog.51cto.com/makewong/565360,如需轉載請自行聯系原作者

繼續閱讀