有一个具有 Unbreakable 内核的 Oracle Linux 7 系统5.4.17-2136.304.4.1.el7uek.x86_64
(对于类似 RHEL7 的系统来说是最新的,通常使用基于 3.10 的内核)。
网络接口有几个配置为别名的地址(我知道这些别名只需要古老的ifconfig
,但尽管如此);一些IP是历史IP,但不是全部,并且系统仍然需要有多个地址:
root@bccdb:network-scripts# ip addr show dev bond0.610
15: bond0.610@bond0: <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 192.168.221.195/24 brd 192.168.221.255 scope global bond0.610
valid_lft forever preferred_lft forever
inet 192.168.221.2/24 brd 192.168.221.255 scope global secondary bond0.610:1
valid_lft forever preferred_lft forever
inet 192.168.221.134/24 brd 192.168.221.255 scope global secondary bond0.610:2
valid_lft forever preferred_lft forever
路由缓存和提示(系统建立传出连接时使用的地址)存在问题。
该.195
地址最先出现,因此将其制作为本地网络路由(192.168.221.0/24 dev bond0.610 proto kernel scope link src 192.168.221.195
)。但系统应该使用.134
默认的。
我们用 ) 更新了这条路线ip route change 192.168.221.0/24 dev bond0.610 proto kernel scope link src 192.168.221.134
,ip route
现在显示了正确的路线。但是当我询问具体的 IP 时,它仍然使用旧的 src 提示:
root@bccdb:network-scripts# ip route get 8.8.8.8
8.8.8.8 via 192.168.221.1 dev bond0.610 src 192.168.221.195 uid 0
cache
它实际上使用这个源地址作为任何目标地址除了我们手动安装的路由ip route add <target-host> dev bond0.610 src 192.168.221.134
(如果地址在另一个网络中,则添加via 192.167.221.1
),其中<target-host>
是目标主机的地址(/32)。
ip route show cache
不显示任何内容。
通用缓存是Linux 3.6 中删除我们正在运行它的更新版本。里面有一些解释最新 Linux 内核中的路由缓存,但没有关于管理此缓存的建议。
我发现这个建议,但ip route flush cache
没有帮助。
如何清除这个缓存呢?
答案1
ifdown bond0.610
这是一个重要的系统,并且由于解决方案没有在管理时间范围之前出现,因此我们只需使用重新启动接口ifup bond0.610
,这也导致路由表刷新(对于该接口)。这导致大约 5 秒的停机时间,这对于该服务器来说几乎是不能接受的。