2015/07/01

以運行於VirtualBox上的Ubuntu Linux來進行網路位址轉譯

摘要

本文記錄以運行於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位址、啟用ARP代理、啟用IPv4封包轉送、並且執行了iptables的NAT設置後,便可以達成NAT形式的轉送了。一個設置範例如下所示,該範例將會針對ICMP封包進行NAT的轉譯,包含在nat表POSTROUTING鏈將出境的封包來源位址更換為172.16.1.1、及在nat表PREROUTING鏈將入境的封包目的位址更換為192.168.1.100。

 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)。


小結

透過本文的實驗可以得知iptables的NAT已可運作;接下來需找時間去了解ARP代理跟本實驗的確切關聯此外,本文的實驗需要在Xubuntu與Lubuntu設置正確的路徑(即前往特定網段應該委派指定介面上的指定裝置來轉送)。


1 則留言:

  1. 補充「以Proxy ARP構建橋接器和偽橋接器」資料如下:
    http://www.study-area.org/tips/2.4routing/2.4routing-big5-17.html

    回覆刪除