2015-04-02

LXC Conatiner 設定 Port Forwarding 提供外部連入

如果要讓 LXC 建立的 Container 內的服務可以由外部存取的話,有二種做法,一種是直接在主機 (Host) 上的網卡設定 Bridge (橋接) 功能來讓 Container 可以直接取到外部 IP 位址,而另一種方式則是透過主機的 Port Forwarding 來達成,阿舍今天要介紹的,就是第二種囉 !


很多的時候和環境下,都只有主機可以取到一組對外的 IP 位址,因此,就不適合使用前面提到的第一方式,因此,就得透過 Port Forwarding 的方式來達到讓 Container 可以對外的效果,而主機要能夠執行 Port Forwarding 的功能,其實,就是透過 iptables 程式來達成的哩 !

以阿舍要把主機的 eth0 這張網卡的 80 埠轉到 10.0.3.211 這個 Container 的 8088 埠為例,那麼 iptables 的指令就會像下面這樣,雖然,看起來有點長和複雜,但是,請不用花時間去瞭解這些選項們,只要知道要改那幾項參數就可以了哩 !

# sudo iptables -t nat -A PREROUTING -i [網卡名稱] -p [通訊協定] --dport [主機埠號] -j DNAT --to [Container IP 位址]:[Container 埠號]

$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.3.211:8088

上面的指令執行完成後,就可以執行下面這一行指令來確認一下設定是否有成功,如果有的話,下面這行指令執行後,應該就會多看到一行目的是 Container 的 IP 位址的規則哩 !

$ sudo iptables -t nat -L

不過,這樣的設定是暫時的,也就是說,當機器重開機之後,這條 Forwarding 的規則就會消失殆盡哩! 所以,如果這條規則不是暫時性的話,那就是要執行幾個步驟來把它保存並在每次開機時能重新讀入,首先,請執行下面這行指令來把目前已經新增好轉埠的規則存起來。

$ sudo -sh -c "iptables-save > /etc/iptables.rules"

執行完成後,接下來,請打開 /etc/network/interfaces 這個檔案,然後,在 eth0 網卡的設定項目的最下面加入下面這一行之後存檔 (如果你的網卡不是 eth0 的話,就要改放到你的真正使用的網卡的名稱的下面),這樣,當網卡啟動後,就會去把 /etc/iptables.rules 的規則檔給讀進來,就不用每次都要設定哩 !

pre-up iptables-restore < /etc/iptables.rules

不過,不用時,也要記得到 /etc/network/interfaces 檔來把它給移除哩 ! ...


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁