摘要
本文記錄以運行於Oracle VM VirtualBox的Ubuntu作為網路位址轉譯(Network Address Translation)裝置來進行封包轉送的注意事項。說明
網路位址轉譯(NAT)提供一個方法,可將網路上電腦的網際網路通訊協定第4版(IPv4)位址,轉譯成其他網路電腦的IPv4位址。NAT技術的開發提供一個暫時解決 IPv4 位址消耗問題的方法。較為詳細的說明可以參考這裡。本文的實驗將以運行於Oracle VM VirtualBox的Ubuntu作為網路位址轉譯裝置,另外搭配一虛擬Xubuntu主機與一虛擬Lubuntu主機作為協同測試的主機。網路配置如下所示,其中,Ubuntu、Lubuntu、和Xubuntu使用「橋接介面卡」介接起來,並在對應的乙太網卡上設置對應的IPv4位址。
充當網路位址轉譯裝置的Ubuntu一旦被設置了IPv4位址、
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
ifconfig eth0 inet 192.168.1.1 netmask 255.255.0.0 up
ifconfig eth1 inet 172.16.1.1 netmask 255.240.0.0 up
ping 192.168.1.100 -c 1
ping 172.16.1.100 -c 1
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -p icmp -s 192.168.0.0/16 -j SNAT --to-source 172.16.1.1
iptables -t nat -A PREROUTING -p icmp -s 172.16.0.0/12 -j DNAT --to-destination 192.168.1.100
設置完畢後,Lubuntu便能夠以Source NAT的形式來跟Xubuntu溝通;即Lubuntu送出給172.16.1.100的ICMP echo-request後有取得ICMP echo-reply;封包擷取內容隨附如下。
設置完畢後,Xubuntu便能夠以Destination NAT的形式來跟Lubuntu溝通;即Xubuntu送出給172.16.1.1的ICMP echo-request後有取得ICMP echo-reply;封包擷取內容隨附如下。
上述封包在Ubuntu介面卡的擷取次序如下所示,封包呈現的次序是依據介面卡的擷取次序而非實際轉送的次序,所以Source NAT的次序實際應為3→5→6→4、而Destination NAT的次序實際應為1→3→4→2。此外,值得留意的是這個轉送的過程中的IP位址將會隨iptables之nat表的設置而變動。
最後,以iptables觀察封包與nat表規則的關係,可以發現POSTROUTING鏈所設置的Source NAT規則已命中(即pkts欄位的值大於0)、而PREROUTING鏈所設置的Destination NAT規則也已命中(即pkts欄位的值大於0)。
補充「以Proxy ARP構建橋接器和偽橋接器」資料如下:
回覆刪除http://www.study-area.org/tips/2.4routing/2.4routing-big5-17.html