ip route列出所有路由规则,default 那行就是默认网关。
约 1327 字大约 4 分钟
2026-05-14
域名解析成了 IP,下一个问题是:数据包怎么从你的机器“走”到那个 IP?这由路由表决定。每台机器都有一张路由表,回答“去这个目标,下一跳交给谁”。看懂它,就能解释“同网段能通、外网不通”这类问题。
理解路由表如何决定数据包的下一跳,弄清默认网关的角色,会用 ip route get 看一个目标实际走哪条路。
ip route列出所有路由规则,default 那行就是默认网关。
ip route get 8.8.8.8直接告诉你去这个目标会走哪条路、用哪个网卡和源 IP。
ping -c3 网关IP连网关都不通,问题在本地链路,不用查更远。
traceroute 8.8.8.8逐跳显示数据包经过的路由器,看断在第几跳。
数据包要发出去时,内核拿目标 IP 去查路由表,找最精确匹配的一条规则,按它指示的“下一跳”和“出口网卡”发出去。ip route 看这张表:
default via 192.168.1.1 dev eth0 # 默认路由:其他所有目标走这里
192.168.1.0/24 dev eth0 proto kernel ... # 本网段:直接同网段通信,不经网关读这张表的逻辑:目标在 192.168.1.0/24 内 → 走第二条,直接发;其他所有目标 → 没有更精确的匹配,走 default。
default via 192.168.1.1 这行就是默认网关。它的角色是“兜底”——凡是路由表里没有更具体规则能匹配的目标(基本就是所有外网地址),统统交给默认网关,由它继续往外转发。
所以一个经典现象:同网段机器能 ping 通,一访问外网就不行。原因往往是默认网关那行缺失或写错了——同网段通信不需要网关(走本网段路由),但出网段就全靠它。ip route 第一眼看有没有 default 那行。
多网卡、有 VPN、有容器网络时,“这个包到底走哪条路”靠脑算很容易错。ip route get 直接给答案:
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10
# 走这个网关 用这个网卡 用这个源 IP它会模拟一次真实的选路,告诉你出口网卡、下一跳、甚至源 IP。排查“为什么这个目标走错了网卡”时,这条命令最直接。
网络“不通”,按距离从近往远查,能快速缩小范围:
ping 网关IP —— 连网关都不通?问题在本地链路或网卡(见 网络接口)。ip route 有没有 default,或用 traceroute 看断在第几跳。traceroute 里前几跳就断 —— 本地网络 / 网关问题;中间断 —— 运营商或对端网络问题。改路由可能瞬间断网,远程操作尤其危险
ip route 的增删改是立即生效的。在一台你正通过 SSH 连着的远程机器上改路由——尤其是动默认路由——一旦改错,你和这台机器的连接当场就断,而且可能没法再连回去。原则:① 远程改路由前想清楚回滚命令;② ip route 命令(不带 add/del/change)的改动重启后失效,可作为“安全的试错”,确认对了再写进持久化配置;③ 重要机器的路由变更尽量通过带外管理或控制台做。
| 误区 | 更稳妥的做法 |
|---|---|
| 同网段能通就以为路由没问题 | 同网段不经网关;外网不通先看 ip route 有没有 default |
| 多网卡环境靠猜数据包走哪条路 | ip route get 目标IP 直接看实际选路 |
| 网络不通从最远端开始查 | 由近及远:先 ping 网关,再 traceroute 看断在哪跳 |
| 远程机器上随手改路由 | 改错会当场断连,先想好回滚,优先用临时命令试 |
版权归属:Shuo Liu