如何使用兩個網路介面覆蓋 systemd 選擇的預設路由?
更新:
/etc/network/interfaces
不存在,因為我正在使用netctl
配置文件。我用兩個網路適配器設置了一個執行 ArchLinux 的 VirtualBox 實例。
Adapter 1
(eth0
) 連接到 NAT (10.0.2.0/24
) 並且Adapter 2
(eth1
) 位於僅主機網路 (192.168.56.0/24
) 上。我使用udev
規則來使用老式名稱eth0
和eth1
這些適配器(但enp***
名稱也存在問題)。當我登錄時,我得到這個:
$ ip路由 預設通過 192.168.56.1 dev eth1 預設通過 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202 10.0.2.0/24 dev eth0 proto dhcp scope link src 10.0.2.15 metric 202 192.168.56.0/24 dev eth1 proto 核心範圍連結 src 192.168.56.31
這導致
$ ping google.com ping: google.com: 名稱或服務未知
據我了解,這是因為
192.168.56.1
(僅主機介面)添加的指標低於 NAT 介面。如果我然後手動執行:
$ sudo ip route 刪除預設值 $ ip路由 預設通過 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202 10.0.2.0/24 dev eth0 proto dhcp scope link src 10.0.2.15 metric 202 192.168.56.0/24 dev eth1 proto 核心範圍連結 src 192.168.56.31
我明白了
$ ping google.com PING google.com (172.217.12.174) 56(84) 字節數據。 來自 ....1e100.net (172.217.12.174) 的 64 個字節:icmp_seq=1 ttl=52 time=11.9 ms 來自 ....1e100.net (172.217.12.174) 的 64 個字節:icmp_seq=2 ttl=52 time=11.7 ms ^C --- google.com ping 統計資訊 --- 2個包發送,2個接收,0%丟包,時間3ms rtt min/avg/max/mdev = 11.698/11.782/11.867/0.137 ms
那麼,如何確保出站流量通過
eth0
/10.0.2.0/24
(NAT 介面到主機)而不是eth1
/192.168.56.0/24
(僅主機網路)路由。這個問題僅與 VirtualBox 相關(如果有允許我更改指標的 VirtualBox 設置,我不會介意)。
我相信必須有一種方法可以做到以下幾點: 1)停止 systemd 添加
default via 192.168.56.1 dev eth1
路線;或者 2) 添加default via 10.0.2.2 dev eth0
metric 較低的路由,這樣我就不必每次啟動實例時都手動刪除預設路由。可能還有另一種我還沒有考慮過的解決方法。到目前為止,擺弄名稱,靜態 IP 與 DHCP 並沒有幫助。
來賓作業系統是 ArchLinux。
按照@Bob 的建議,我意識到問題在於我的僅主機網路的靜態 IP 配置文件正在指定一個網關。我刪除了它,一切都按我想要的方式工作。
這是兩個netctl配置文件:
Description='Host only connection' Interface=eth1 Connection=ethernet IP=static Address=('192.168.56.31/24') DNS=('192.168.1.1')
和
Description='Internet connection via NAT' Interface=eth0 Connection=ethernet IP=dhcp
這導致:
$ ip路由 預設通過 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202 10.0.2.0/24 dev eth0 proto dhcp scope link src 10.0.2.15 metric 202 192.168.56.0/24 dev eth1 proto 核心範圍連結 src 192.168.56.31
這可能是完美的,也可能不是完美的,但它對我有用。
在
/etc/network/interfaces
文件中添加相應的介面行:post-up route del default via 192.168.56.1 dev eth1
default via 192.168.56.1 dev eth1
這將在介面啟動時刪除路由。