当前位置: 首页 > 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)并启用其故障转移功能。

相关文章:

  • YC-8002型综合变配电监控自动化系统
  • 数据结构与算法之中缀表达式的求值
  • mysql隐式转换会造成索引失效的原因
  • 外包项目交付后还能怎么加固?我用 Ipa Guard 给 iOS IPA 增加了一层保障
  • 【appium】环境安装部署问题记录
  • IDEA修改JVM内存配置以后,无法启动
  • JVM内存模型(运行时数据区)
  • 力扣面试150题--二叉树的层平均值
  • CppCon 2014 学习:HOW UBISOFT MONTREAL DEVELOPS GAMES FOR MULTICORE
  • 7.CircuitBreaker断路器
  • DALI DT6与DALI DT8介绍
  • 嵌入式开发学习日志(linux系统编程--进程(4)——线程锁)Day30
  • 界面控件DevExpress WinForms中文教程:Banded Grid View - 如何固定Bands?
  • ESP32对接巴法云实现配网
  • IntelliJ IDEA 中进行背景设置
  • Python使用
  • 【工作笔记】 WSL开启报错
  • 参数化建模(三):SOLIDWORKS中的参数化应用实例
  • docker部署自动化测试环境笔记
  • (21)量子计算对密码学的影响
  • 优质网站建设/爱站seo查询软件
  • 金融公司网站开发/手机端网站排名
  • 姓氏头像在线制作免费生成图片/百度seo优化及推广
  • 做网站用哪些软件/商丘网站建设公司
  • 搭建网站需要钱吗/抖音seo排名系统
  • 江门企业做网站/北京seo网站管理