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 选项,我会提到这一点。
路由表将使您的路由永久化(以避免在交换机故障转移后再次/手动添加它);首先,创建一个命名路由表。例如,我们可以使用“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)
| 归档时间: |
|
| 查看次数: |
3173 次 |
| 最近记录: |