如何在啟動時重新映射網路介面?
事實證明,我正在嘗試創建一個攜帶式發行版,同時為任何類型的硬體故障做好準備。
我正在通過multistrap(或從我的備份)創建(或恢復)一個 Debian 發行版,並要求生成的磁碟可以在新的(大部分兼容的)硬體上啟動,包括VirtualBox machine。
正如我之前所問的,“攜帶式發行版”為數不多的必需品之一就是處理網路介面的名稱。
例如,在真機上,第一個乙太網設備被命名為
enp2s0
,而在 VirtualBox 中,它被命名為enp0s3
. 我應該如何/etc/network/interfaces
在啟動時生成文件?是否有更通用的方法來重新映射網路介面名稱(可能通過符號連結)並讓每個應用程序使用這些名稱(角色名稱)而無需知道底層硬體的真實網路介面名稱?
有幾種方法可以解決這個問題。
最熟悉的方法可能是通過使用引導選項禁用新的網路介面命名方案
net.ifnames=0
,或者通過覆蓋/lib/systemd/network/99-default.link
,或者通過屏蔽實際實現新樣式名稱的ln -s /dev/null /etc/systemd/network/99-default.link
udev 規則文件ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
……參見Debian Wiki有關恢復經典命名方案的各種方法的更多資訊。然後你可以重寫你/etc/network/interfaces
的只是使用eth0
.最靈活的方法可能是停止使用靜態
/etc/network/interfaces
並切換到 NetworkManager。如果沒有進一步的配置,它將自動預設在具有活動連結的網路介面上使用 DHCP。即使您有多個 NIC 但實際上只有一個(不一定是第一個)插入,這也會自動處理。或者您可以自己做,通過編寫一個自定義腳本來讀取
ip link show
輸出(或 中的連結/sys/class/network
)並重寫/etc/network/interfaces
(或任何您的實際網路配置文件)以適應。然後,您可以將腳本添加為 systemd 服務,使用,Wants=network-pre.target
和可能。這應該允許腳本作為早期系統設置的一部分在載入所有模組之後但在網路配置開始之前執行。Before=network-pre.target``After=module-init-tools.service``DefaultDependencies=no