AWS EC2 掛載多個網路介面的設定

對於這種我以為會 It Just Works 卻並非如此的事情,就會覺得很煩躁。

直覺上,我會以為只要掛上 ENI 就該直接能動,卻發現這網卡有掛就跟沒掛一樣,原因是 routing table 打架,適用於 eth0 的規則先套用,自然 eth1 就不理不理,如果手動置頂讓 eth1 規則排在前面,就反過來變成 eth1 能動,eth0 不理不理。

解法就是要用多個 routing table。參考這篇文章的方法,為 eth0, eth1 分別設定:

ip route add 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.61.20 table 20
ip route add default via 192.168.1.1 dev eth0 table 20
ip rule add from 192.168.1.20 lookup 20
ip route add 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.61.21 table 30
ip route add default via 192.168.1.1 dev eth1 table 30
ip rule add from 192.168.1.21 lookup 30

什麼場合會需要這樣搞?AWS 的粉絲與專家會跟你說沒有必要這樣折騰,一個 ENI 就可以綁多個 IP add. 了,然而如果你需要架設某種就是要綁「網路介面」而不是綁「IP Address」的服務時,你就是需要這樣折騰。

事實上在 Linux 處理 IP 選徑的時候,預設行為就是這樣,所以 EC2 & ENI 也沒多做事,就只是蕭規曹隨。

當然 AWS 粉絲與專家也很有可能會跟你說:「你可以跟 AWS 官方提議,改成不需要這樣折騰。」現在我每次聽到這種話就會心火熊熊燃燒,尤其是在需求有期限、AWS 卻不見得會搭理你的現實下。

為什麼我們會對某些產品感到貼心、好用?就是因為「它雞婆地多做了一點事」。

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Leave a Reply

Your email address will not be published. Required fields are marked *