Arch-Linux

如何使用兩個網路介面覆蓋 systemd 選擇的預設路由?

  • December 28, 2019

更新:/etc/network/interfaces不存在,因為我正在使用netctl配置文件

我用兩個網路適配器設置了一個執行 ArchLinux 的 VirtualBox 實例。Adapter 1( eth0) 連接到 NAT ( 10.0.2.0/24) 並且Adapter 2( eth1) 位於僅主機網路 ( 192.168.56.0/24) 上。我使用udev規則來使用老式名稱eth0eth1這些適配器(但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 eth0metric 較低的路由,這樣我就不必每次啟動實例時都手動刪除預設路由。

可能還有另一種我還沒有考慮過的解決方法。到目前為止,擺弄名稱,靜態 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這將在介面啟動時刪除路由。

引用自:https://unix.stackexchange.com/questions/463356