Linux路由重定向机制解析与故障排查

本文深入分析Linux系统中路由重定向机制的工作原理,探讨当目标连接丢失时系统如何强制重定向到下一网关并维持5分钟超时,并提供故障排查方法。

问题背景

网络环境配置:

  • network1: 192.168.1.0/24
    • 默认网关: 192.168.1.1
    • host1: 192.168.1.10
    • host2: 192.168.1.10
  • network2: 192.168.2.0/24
    • 默认网关: 192.168.2.1
    • host3: 192.168.2.10

host1建立了到network2的VPN连接,可以ping通host3。host1共享VPN连接,可作为网关使用。host2将host1配置为默认网关,host2可以ping通host3。

测试过程

  1. 当host2 ping其自身子网外的任何目标时,在收到目标的第一个回复后,会收到来自host1的"Redirect Host(New nexthop: 192.168.1.1)“回复,这意味着系统要求将出站流量直接发送到默认网关,而不是发送到192.168.1.10,这是完全正常的行为。

  2. 当host2 ping host3时,收到预期的成功回复。

  3. 在host2持续ping host3的过程中,断开host1的VPN连接,此时到network2的路由不再有效。

  4. 正如预期的那样,host2无法再访问host3,但仍然收到相同的"Redirect Host(New nexthop: 192.168.1.1)“消息,系统要求使用默认网关,因为host1上到network2的有效路由已不存在。

核心问题

即使VPN连接恢复,host2也无法访问host3,因为它被要求使用默认网关而不是原来的路由。经过5分钟的超时后,重定向似乎被重新评估,路由恢复指向host1,从而能够再次访问host3。(经过测试,这一过程每294秒重复一次)

解决方案

可以创建到network2的静态路由来覆盖"新下一跳”。

技术疑问

在Linux系统(如Ubuntu 24.04)中,这些信息存储在哪里?

可以列出所有路由,但找不到任何显示这些"重定向请求"当前状态的表。

关键问题:

  • 这些重定向信息能否被列出?
  • 能否被修改?
  • 是否存在对某些基础概念的理解偏差?

社区反馈

该问题因涉及主机/服务器配置而被标记为偏离主题,建议在Super User或Unix & Linux社区寻求解答。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计