Arch 缺少本地路线

Arch 缺少本地路线

我有一个 arch Linux 机器,它表现出一些非常奇怪的行为。启动时,我有一个脚本被调用来启动接口并根据需要配置它们。 IE:

ip link add link eth0 name mgt10 type vlan id 10
ip link add link eth0 name guest20 type vlan id 20

ip link set mgt10 up
ip addr add 10.10.0.1/24 dev mgt10

ip link set guest20 up
ip addr add 10.20.0.1/24 dev guest20

调用此脚本后,我看到接口已启动,并分配了适当的 IP:

# ip addr show
1: mgt10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.1/24 scope global mgt10
       valid_lft forever preferred_lft forever
2: guest20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.1/24 scope global guest10
       valid_lft forever preferred_lft forever

但问题是,无论出于何种原因,它没有为 mgt10 创建本地路由。

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.20.0.0        0.0.0.0         255.255.255.0   U     0      0        0 guest20

我没有看到任何错误,如果我随后从接口中手动删除 IP,然后重新添加(复制/粘贴相同的命令),路由将按预期出现,并且没有任何问题。

我不知道这是为什么。难道是物理链路正在建立中,系统出现了问题?是否有某种方法可以确保接口处于分配就绪状态?我在这里做错了什么吗?

答案1

您在启动脚本中使用 ip link 命令是否有特殊原因? arch wiki 上有几个关于如何使用 systemctl 创建 VLAN 的示例。可能值得修改这里的示例:https://wiki.archlinux.org/index.php/VLAN#Starting_at_boot

这为您带来了以下好处:启用 VLAN 作为服务,并在出现问题时进行日志记录。

除了systemctl之外,您还可以尝试使用netctl。 /etc/netctl/examples 中有您可以修改的 VLAN 示例脚本。同样,这将允许您启用配置文件,以便它们在启动时运行,检查日志文件以了解它们如何使用journalctl等运行。

答案2

我最近在 Debian 11 机器上遇到了类似的问题 - 没有为界面创建本地路由,但没有错误。

我认为你的问题是不同的原因。就我而言,问题是我手动编辑了 /etc/network/interfaces 文件,并忽略了将子网掩码添加到地址行。所以该文件有

iface vmbr0 inet static
  address 10.100.17.56

代替

iface vmbr0 inet static
  address 10.100.17.56/24

因此,操作系统正确地没有创建本地网络路由,因为它将该行解释为末尾有一个隐式的“/32”。

输出中有一条线索ip a,但我一开始就错过了……IP 上的掩码是 /32,而不是 /24:

6: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:62:0b:d5:a2:a0 brd ff:ff:ff:ff:ff:ff
    inet 10.100.17.56/32 scope global vmbr0
       valid_lft forever preferred_lft forever

相关内容