当前位置:首页 > 文章列表 > 文章 > linux > Linux 怎样用 ip route get 判断实际出口

Linux 怎样用 ip route get 判断实际出口

来源:17golang原创 2026-10-18 14:56:40 0浏览 收藏

排查 Linux 网络问题时,先看 ip route 的默认路由,往往只能得到一个大概方向:真正发送到某个目标地址时,内核可能还会结合最长前缀、策略规则、源地址、接口和标记做选择。要回答“这个目标实际会从哪张网卡出去”,可以直接查询 ip route get。

ip route get 目标地址 会按给定的查询上下文计算一条路由,并把 dev 出口设备、via 下一跳和 src 首选源地址放在结果中。先读这三个字段,再根据策略路由场景补充 from、mark、iif 或 oif,比凭默认路由猜出口可靠。

先用目标地址查询候选出口

最小查询只需要一个目标地址。下面的命令使用文档网段作为示例,命令和输出用于说明字段含义,不代表某台机器的真实运行结果。

# 只按目标地址询问内核会选择哪条路由
ip route get 203.0.113.8
203.0.113.8 via 192.0.2.1 dev eth0 src 192.0.2.10 uid 1000
    cache

在这个示例里,203.0.113.8 是目标地址,via 192.0.2.1 是下一跳,dev eth0 是出口设备,src 192.0.2.10 是内核为这条目的发送方向偏好的源地址。uid 和末尾的缓存提示不是出口网卡本身,不要把它们混为一谈。

Linux ip route get 中目标地址、路由查找、dev 出口设备、via 下一跳和 src 首选源地址的静态关系说明图
图1:ip route get 的出口字段结构说明图,查看目标地址、路由表与 dev、via、src 结果之间的关系;这是静态说明图,不是运行截图。

把 dev、via、src 读成三类不同结论

判断“实际出口”时,建议按下面的顺序读结果。dev 回答的是从哪个本地接口发出,via 回答的是交给哪个下一跳,src 回答的是发送报文倾向使用哪个本地源地址。

字段它回答的问题排障时怎么用
dev选择了哪张出口网卡或虚拟接口与 ip link、容器网卡或 VRF 配置对照
via下一跳网关是谁检查网关是否属于预期链路;直连路由可能没有它
src使用哪个本地源地址更合适检查服务监听地址、回程路由和源地址策略
scope目标的路由作用域区分主机、链路和全局范围,避免把本地路由当成外发路径

如果结果直接显示 dev lo,目标可能属于本机地址或本地路由;如果显示 unreachable、blackhole 或 prohibit,重点就不再是找出口网卡,而是确认路由类型和策略为何拒绝了这次发送。

策略路由场景要补齐查询条件

只传目标地址相当于询问一个简化上下文。在多网卡、VPN、容器、VRF 或基于源地址分流的主机上,同一个目标可能因为报文的来源和标记不同而得到不同结果。此时要让查询更接近真实流量。

# 指定真实的源地址,观察源策略是否改变出口
ip route get 203.0.113.8 from 192.0.2.10

# 指定入接口或出接口,模拟策略规则使用的接口条件
ip route get 203.0.113.8 iif eth1
ip route get 203.0.113.8 oif eth0

# 指定防火墙标记;数值应替换为业务实际设置的 mark
ip route get 203.0.113.8 mark 0x20

from 用于表达源地址条件,mark 用于表达报文标记,iif 和 oif 用于补充接口上下文;如果主机使用 VRF,还可以使用 vrf 名称 把查询放进对应的路由域。每次只改变一个条件,才能看出究竟是哪条策略影响了结果。

Linux 策略路由中 from、mark、iif、oif、vrf、策略规则、路由表与 dev/src 结果字段的静态关系图
图2:策略路由查询上下文结构图,查看 from、mark、iif、oif、vrf 与路由表选择的关系;这是静态说明图,不是运行结果截图。

如果要确认策略规则本身,可以另外查看 ip rule 和各路由表,但它们与本次 ip route get 的职责不同:前者展示配置,后者针对给定上下文给出一次路由计算结果。

IPv6 和几个容易误读的边界

IPv6 查询要显式使用 -6,否则你可能一直在检查 IPv4 路由。源地址也应使用 IPv6 地址,不能把两种地址族的结果混在一起。

# 用 IPv6 地址族查询目标和首选源地址
ip -6 route get 2001:db8:20::8 from 2001:db8:10::10

还要注意三点。第一,ip route get 计算的是给定条件下的路由选择,不等于已经建立了 TCP 连接,也不证明远端一定可达。第二,存在多路径路由时,结果反映的是当前查询上下文下的选择,不能把一次结果写成所有连接永远固定。第三,命令没有返回可用路由时,应保留完整错误信息,继续检查地址族、策略规则、路由表和接口状态,不要自行补一个默认出口。

常见问题

只看 ip route 的 default 行可以吗?

只能作为初步线索。目标地址的更具体前缀、策略路由、源地址和标记都可能使实际选择不同,最终判断应以带真实上下文的 ip route get 为准。

src 是应用绑定的本地地址吗?

它是路由计算给出的首选源地址,不等同于应用一定已经绑定的监听地址。应用显式绑定、套接字选项和后续连接状态仍可能影响最终行为。

没有 via 是否说明出口错误?

不一定。直连网络可以直接通过设备发送,不需要网关;判断出口时应先看 dev,再结合目标前缀与接口地址确认是否属于预期链路。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux systemd After 和 Wants 怎样配合启动依赖Linux systemd After 和 Wants 怎样配合启动依赖
上一篇
Linux systemd After 和 Wants 怎样配合启动依赖
Linux 怎样读取网卡丢包统计
下一篇
Linux 怎样读取网卡丢包统计
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    525次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    582次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    609次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    558次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    379次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码