为什么当接口启动时,/etc/network/interfaces 中设置的路由没有添加?

为什么当接口启动时,/etc/network/interfaces 中设置的路由没有添加?

这是我的接口文件:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:0
iface eth0:0 inet static
        address 10.20.8.231
        netmask 255.255.255.0
        gateway 10.20.8.1
        up /sbin/route add 1.2.3.4 gw 10.20.8.1
        down /sbin/route del 1.2.3.4 gw 10.20.8.1

从我在网上找到的多个示例来看,这应该在 eth0:0 出现时添加路由,但由于某种原因我无法让它工作。

当我尝试打开界面时,ifup eth0:0我得到:

RTNETLINK answers: File exists
Failed to bring up eth0:0.

然后,ifconfig显示 eth0:0 已启动,但route -n不显示新路由。事实上,它显示的路线与我之前的路线完全相同。没有改变。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.20.8.1       0.0.0.0         UG    0      0        0 eth0
10.20.8.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0

此配置用于只能通过 SSH 访问的远程系统。整个想法是在站点网络发生更改(已经发生两次)导致静态 IP 无法访问时,将 eth0 设置为 dhcp 作为备份。问题是 SSH(由内置进程使用)使用通过 eth0 的默认路由,并且这不起作用,因为防火墙(不由我们管理)已设置为仅允许 eth0:0 上的静态 IP 使用 ssh 。

注意:在上面的示例中,1.2.3.4 代表我们的 ssh 服务器,我尝试通过 eth0:0 为该单个主机路由流量,但经过测试后,我可能想设置默认路由以使用 eth0:0,但我也尝试过那和它以同样的方式失败了。我正在使用这条线:

up route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.20.8.1


谢谢您的帮助。

答案1

我认为首先放置辅助 IP 地址并不是一个特别好的主意。

问题远比你使用eth0的默认路由要大,因为它是第一个接口,当路由到其他网络时,你的源IP是DHCP IP地址事实上的而不是 10.20.8.231。

因此,我建议将静态地址放置在 eth0 中,而不是 eth0:0,配置如下:

auto eth0
iface eth0 inet static
    address 10.20.8.231
    netmask 255.255.255.0
    gateway 10.20.8.1

auto eth0:0
iface eth0:0 inet dhcp

答案2

它似乎如果向上向下不能很好地与较低级别的工具一起使用,例如ip路由2或者网络工具。它被作为警告提到Debian 官方文档:

警告

请勿使用 ifconfig(8) 和 ip(8) 命令等低级配置工具将接口配置为 up 状态。

您可以在使用之前尝试手动刷新并禁用您的网络接口如果向上向下解决你的问题:

 # ip addr flush dev [interface_name]
 # ip link set down dev [interface_name]
 # ifdown [interface_name]
 # ifup [interface_name]

相关内容