GCE Ubuntu多介面實例路由配置

GCE Ubuntu多介面實例路由配置

我正在運行具有多個介面的 Ubuntu 16.04 實例。我正在尋找在第二個介面上配置一些路由。雖然我可以手動執行此操作,但重新啟動後不會持續存在。

大多數方法建議使用 /etc/network/interfaces 中的介面定義路由,該介面根據介面檔案的呼叫轉換為 /etc/network/interfaces.d/50-cloud-init.cfg 。

讓我困惑的是,我不確定第二個介面是在哪裡或如何定義的。

2 個介面是 ens4 和 ens5。僅 ens4 是用 定義的iface ens4 inet dhcp。我希望 ens5 能看到類似的東西,但沒有。

執行 ifconfig 顯示 ens5 正在運作。也,ip link show顯示出來。

看來我可以將 ens5 添加到 /etc/network/interfaces 而不會造成任何破壞。如果我這樣做,似乎還會發生其他一些事情。例如,「ifstate.ens5」檔案現在出現在 /run/network 中。另外,ifdown / ifup 在介面上工作。

但是,即使新增也post-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1不會導致在啟動時建立路由...但是如果我執行 ifdown 然後執行 ifup,則會按預期新增路由。

我的額外研究是,ens5 是透過 Google GCE 資料來源中的 cloud-init 套件定義的,這一切都很好,但沒有回答為什麼 50-cloud-init.cfg 檔案中只有 ens4。

那麼 ens5 定義在哪裡以及如何為 ens5 新增靜態路由?

答案1

我不確定這是最好的解決方案,但我確實找到了一種方法來實現我想要的結果。

首先,我相信 google_compute_engine python 套件在啟動過程中的某個時刻執行網路設定操作。我在“/usr/lib/python3/dist-packages/google_compute_engine/network_setup”中找到了這個。

不幸的是,我相信雖然這種方法的結果是一個工作網絡,但它在正常的 Ubuntu「通道」之外做了一些事情。例如,雖然第二個介面 (ens5) 在大多數情況下都可以工作並被識別,但由於它未在 /etc/network/interfaces 中定義,因此依賴該介面的任何內容都不太可能工作。

由於“route”等其他命令似乎仍然有效,我不確定這有多大。

我不確定是否有辦法利用這個谷歌包,所以我不確定這是否是一個好主意。

不過,我目前的解決方案是利用啟動腳本,如“https://cloud.google.com/compute/docs/startupscript」。

由於這些啟動腳本是在配置網路後運行的,因此我將腳本腳本放入儲存桶中,該儲存桶根據本地到主機的設定檔在主機上執行一組操作。這使得我可以透過執行命令「route add -net 192.168.2.0 netmask 255.255.255.0 gw 1​​92.168.1.1 dev ens5」在啟動時建立靜態路由。

相關內容