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

 

3. 兩種類型的 NAT

我將 NAT 分爲兩種不同的類型﹕ Source NAT (SNAT)  Destination NAT (DNAT)

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

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

4.  2.0 2.2 核心的快速轉變

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

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

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

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

  • 在僞裝列表中顯示的 iniseqdelte﹑和 previousdelta 字段﹐將永遠爲零。

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

Hacker 們仍要留意之處﹕

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

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

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

4.1 救命啊﹗我只想要封包僞裝而已﹗

沒錯﹐這也是大多數朋友之需。如果您用 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 > /proc/sys/net/ipv4/ip_forward

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

4.2  ipmasqadm 怎麼了﹖

這個其實取決於使用者而已﹐所以我並不是很爲向後兼容問題而擔心。您可以單純使用 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 鏈中(它只適用於本機傳出的封包)

# Linux 2.4

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

        -j DNAT --to 192.168.1.1:80

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章