当前位置: 首页 > news >正文

linux 中路由解决方案1

在 Linux 的路由表中,当存在多条默认路由(0.0.0.0)且它们的 Metric 值相同 时,内核会根据其他因素决定优先使用哪条路由。在你的例子中,eth1 和 wlan0 的 Metric 值均为 1024,但系统优先选择 eth1,可能原因如下:


可能原因分析

  1. 接口优先级(基于接口索引或名称顺序)

    • Linux 内核可能会根据网络接口的 创建顺序 或 接口索引号(ifindex) 决定优先级。

    • 通常,先初始化的接口(如 eth1)会被优先选择,尤其是当 Metric 相同时。

  2. 路由表顺序(第一条匹配的路由生效)

    • 路由表的输出顺序可能反映内核的内部优先级。你的输出中 eth1 的路由排在 wlan0 之前,可能直接被优先匹配。

  3. 内核策略路由规则

    • 如果有自定义的 ip rule 策略路由规则(如基于源地址、防火墙标记等),可能会影响默认路由的选择。

  4. 接口状态或稳定性

    • 如果 eth1 被视为更稳定(如有线连接),内核可能倾向优先使用它,即使 Metric 相同。


验证方法

  1. 检查接口索引号
    运行以下命令查看接口的索引号(

linux 中 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.42.1 0.0.0.0 UG 1024 0 0 eth1 0.0.0.0 192.168.68.165 0.0.0.0 UG 1024 0 0 wlan0 为什么Metric 值是一样的, 路由优先走eth1, 通过eth1无法连接外网时,为什么不再尝试通过wlan0 连接外网?

在 Linux 中,当存在多条默认路由(0.0.0.0)且它们的 Metric 值相同 时,系统的行为可能不符合直观预期(如自动故障切换到另一条路由)。以下是详细解释和解决方法:


原因分析

  1. Metric 相同时的默认行为

    • 当多条默认路由的 Metric 值相同(如你的 eth1 和 wlan0 均为 1024),Linux 默认会选择第一条匹配的路由(即 eth1),而不会自动故障切换到其他路由。

    • 这是内核的默认策略:仅根据路由表顺序选择,不主动检测网关是否可达

  2. 缺乏路由探测机制

    • 默认情况下,Linux 不会因为 eth1 的网关(192.168.42.1)无法访问外网而自动切换到 wlan0

    • 除非手动配置了 路由探测(如 ip route 的 probe 或第三方工具),否则系统会持续使用 eth1,即使它已失效。

  3. 网络管理器的影响

    • 如果使用 NetworkManager 或 systemd-networkd,它们可能提供高级的故障切换功能,但默认配置可能未启用。


解决方案

方法 1:调整 Metric 值(推荐)
  • 为 wlan0 设置比 eth1 更低 的 Metric(数值越小优先级越高),使系统优先使用 wlan0,仅在 wlan0 失效时回退到 eth1

    bash

    复制

    下载

    sudo ip route add default via 192.168.68.165 dev wlan0 metric 100
    sudo ip route add default via 192.168.42.1 dev eth1 metric 200
  • 持久化配置(根据发行版选择):

    • 在 /etc/network/interfaces(Debian/Ubuntu)或 /etc/sysconfig/network-scripts/(RHEL/CentOS)中为接口设置 metric 参数。

方法 2:使用策略路由(高级)
  • 通过 ip rule 实现基于条件的路由选择(如源地址、数据包标记等):

    bash

    复制

    下载

    # 为 wlan0 和 eth1 创建不同的路由表
    echo "100 wlan0_table" >> /etc/iproute2/rt_tables
    echo "200 eth1_table" >> /etc/iproute2/rt_tables# 添加路由规则
    ip route add default via 192.168.68.165 dev wlan0 table wlan0_table
    ip route add default via 192.168.42.1 dev eth1 table eth1_table# 设置优先级(优先尝试 wlan0)
    ip rule add from 192.168.68.0/24 priority 100 table wlan0_table
    ip rule add from 192.168.42.0/24 priority 200 table eth1_table
方法 3:启用路由探测(需额外工具)
  • 使用 nethogsconntrack 或自定义脚本监控网关可达性,动态切换路由:

    bash

    复制

    下载

    # 示例:检测 eth1 网关是否响应,若不响应则删除路由
    ping -c 3 192.168.42.1 || ip route del default via 192.168.42.1 dev eth1

验证当前路由选择

  • 查看实际使用的路由:

    bash

    复制

    下载

    ip route get 8.8.8.8
  • 检查路由缓存:

    bash

    复制

    下载

    ip route show cache

总结

  • 根本问题:Linux 默认不自动检测网关失效,且 Metric 相同时固定使用第一条路由。

  • 推荐方案:通过 调整 Metric 或 策略路由 明确优先级,或借助外部工具实现故障切换。

  • 如果希望完全自动化,建议使用网络管理工具(如 NetworkManager)并启用其故障转移功能。

http://www.xdnf.cn/news/736309.html

相关文章:

  • Cross-Encoder(交叉编码器)和 Bi-Encoder(双编码器)
  • 页面表格、模型、脚本这三者之间的数据是如何传输的?尤其是模型(Model)到底是怎样的运作原理与数据流转?
  • 判断质数的基础方法
  • Maven高级篇
  • Selenium操作指南(全)
  • 本地部署AI工作流
  • vivado仿真文件的相对地址设置方法
  • LangChain第二页_【教程】翻译完了
  • 前端面试之Proxy与Reflect
  • tryhackme——Windows Internals
  • PyQt6基础_QtCharts绘制横向柱状图
  • 代码随想录算法训练营第60期第五十二天打卡
  • 六步完成软件验收:从计划到终验的全面指南(一)
  • 【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】
  • mobile app 工具简要对比
  • 秒出PPT正式改名秒出AI,开启AI赋能新体验!
  • 数字人革新教育:开启智慧教学新时代
  • 力扣面试150题--二叉树的层平均值
  • 探讨分贝计在医疗环境中的具体应用及其重要性
  • 基于VU37P的高性能采集板卡
  • (独家)SAP VC物料 超级BOM怎么开单?怎么计算或发布表标准成本?
  • 第10讲、Odoo 18框架设计原理全解析
  • Redis 难懂命令-- ZINTERSTORE
  • mysql怎么查询longblob类型数据的大小
  • 小程序33-列表渲染
  • 彻底解决Win11文件资源管理器预览窗格无法预览问题
  • 使用lombok使用自动生成构造方法进行依赖注入
  • KAG进化论:从知识增强到Ai AGENT超级智能体+MOE专家模型将如何引爆下一代AI?
  • 31、请求处理@MatrixVariable与UrlPathHelper
  • PCIe-PCI、PCIe中断机制概述