如何使用两个网络接口覆盖 systemd 对默认路由的选择?

如何使用两个网络接口覆盖 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 原型 dhcp 范围链接 src 10.0.2.15 公制 202
192.168.56.0/24 dev eth1 原型内核范围链接 src 192.168.56.31

这导致

$ ping google.com
ping:google.com:名称或服务未知

据我了解,这是因为192.168.56.1(仅主机接口)添加的度量标准低于 NAT 接口。

如果我然后手动执行:

$ sudo ip 路由删除默认值
$ip 路由
默认通过 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202
10.0.2.0/24 dev eth0 原型 dhcp 范围链接 src 10.0.2.15 公制 202
192.168.56.0/24 dev eth1 原型内核范围链接 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 时间=11.9 ms
来自 ....1e100.net (172.217.12.174) 的 64 个字节:icmp_seq=2 ttl=52 时间=11.7 ms
^C
--- google.com ping 统计数据 ---
发送 2 个数据包,接收 2 个数据包,0% 数据包丢失,时间 3ms
rtt 最小值/平均值/最大值/mdev = 11.698/11.782/11.867/0.137 毫秒

那么,如何确保出站流量通过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具有较低指标的路由,这样我就不必在每次启动实例时手动删除默认路由。

可能还有另一种我尚未考虑的解决方法。到目前为止,摆弄名称、静态 IP 与 DHCP 并没有帮助。

来宾操作系统是 ArchLinux。

答案1

在文件中添加/etc/network/interfaces相应的接口行:

post-up route del default via 192.168.56.1 dev eth1

default via 192.168.56.1 dev eth1这将在接口启动时删除路由。

答案2

下列的@鲍勃的建议,我意识到问题在于我的仅主机网络的静态 IP 配置文件指定了网关。我删除了它,一切都按照我想要的方式进行。

这是两个网络控制简介:

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 原型 dhcp 范围链接 src 10.0.2.15 公制 202
192.168.56.0/24 dev eth1 原型内核范围链接 src 192.168.56.31

这可能是完美的,也可能不是完美的,但它对我有用。

答案3

是的,这是一个老问题,但我来这里是为了寻找默认路由如何适用于我几年前设置的突然停止工作的 systemd 配置。

要回答这个问题,您可以使用大锤方法并放入 /etc/networkd-dispatcher/routable.d/50-ifup-hooks 文件并在那里手动制作最终所需的路由表。基本上删除系统创建的路线并提供您自己的路线。

但请确保文件的权限为 755。这是我的问题,因为它没有运行:(

相关内容