网络丢失后恢复丢失的网络路由

Dan*_* M. 7 networking ip route

我有一台处于锁定环境中的服务器,没有互联网出口,有 2 个接口:一个物理 eth0 和一个 vlan iface eth0.101

/etc/network/interfaces 包含一个 post-up 命令,用于通过 vlan iface 启用到特定网络块的路由,如下所示:

post-up ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101
Run Code Online (Sandbox Code Playgroud)

在交换机故障转移测试期间,我们注意到路由丢失 ( RTNETLINK answers: Network is unreachable.),这是有道理的。但是,一旦网络重新联机,该路由就不会再次添加到接口中。

我明白为什么 - 接口没有去down,它只是失去了对那个网络的访问。

我如何配置一个接口来恢复到丢失的网络的路由,但引用老歌,现在已经找到了?

我们使用 Debian 9 并iface@eth0.service为每个接口定义了一个服务,它使用ifup命令来启动/关闭设备。但同样,设备和交换机的链接从未动摇过。如果可以利用额外的 systemd 选项,我会提到这一点。

int*_*ika 5

路由表将使您的路由永久化(以避免在交换机故障转移后再次/手动添加它);首先,创建一个命名路由表。例如,我们可以使用“mgmt”。

echo '200 mgmt' >> /etc/iproute2/rt_tables
Run Code Online (Sandbox Code Playgroud)

以上只是关于解决方案的扩展细节,内核支持许多路由表,并通过编号为 0-255 的唯一整数来引用这些路由表。还为该表定义了名称 mgmt。下面,看看一个默认值/etc/iproute2/rt_tables,显示一些号码是保留的。这个答案 200 的选择是任意的;可以使用任何尚未使用的数字,1-252。

# reserved values
255     local
0       unspec
Run Code Online (Sandbox Code Playgroud)

其次,post-up像这样编辑您的规则(在 /etc/network/interfaces 下)

  post-up ip route add 10.1.0.0/24 dev eth0.101 table mgmt
  post-up ip route add default via 10.1.2.1 dev eth0.101 table mgmt
  post-up ip rule add from 10.1.0.0/24 table mgmt
  post-up ip rule add to 10.1.0.0/24 table mgmt
Run Code Online (Sandbox Code Playgroud)

或者,另一种解决方案可能是后台 bash 脚本检查路由是否存在,如果缺少则将其添加回来,脚本可以检查脚本的结果ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101可以在循环或 cron 中设置

ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101
if [ $? -eq 0 ]; then
    echo "Route added again"
    sleep 10;
    command-to-call-the-script-again
else
    echo "Route exists"
    sleep 10;
    command-to-call-the-script-again
fi
Run Code Online (Sandbox Code Playgroud)

来源:添加永久路线的最佳方法是什么?