数据包无法出网的核心在于内核路由决策与链路层转发失败。需依次检查:1. 接口物理与协议状态(ip link show、ethtool);2. ip地址及子网掩码是否匹配实际网络;3. 默认路由是否存在且网关可达(ip route show、ping网关、ip neigh show);4. 目标地址的具体转发路径(ip route get)。

数据包无法出网,核心是系统“知道怎么发”,但实际发不出去。问题不在应用层或DNS,而在内核路由决策和链路层转发环节。排查要从接口状态开始,一层层验证到外网出口。
确认网卡物理和协议状态是否就绪
路由依赖底层链路。即使配置了IP和默认路由,网卡没通电、网线没插好或驱动异常,所有路由都无效。
- 运行 ip link show,检查目标接口(如 eth0 或 ens33)是否同时显示 state UP 和 LOWER_UP;缺一不可
- 若只有 UP 没有 LOWER_UP,用 ethtool ens33 查 Link detected: no,说明物理连接中断——查网线、交换机端口、VLAN 配置
- 若接口为 DOWN,执行 sudo ip link set ens33 up 启用;仍不亮,需检查驱动加载(lspci | grep -i ethernet)或硬件故障
验证 IP 地址与子网掩码是否匹配真实网络
错误的前缀长度会导致系统误判目标可达性。例如本该走网关的地址被当成直连,触发 ARP 而非转发,最终超时。
- 运行 ip addr show ens33,确认分配的 IP 和前缀(如 192.168.1.50/24)与局域网实际规划一致
- 若配成 /16 却连在 /24 网段,系统会认为 192.168.2.1 是本地地址,尝试直接 ARP,结果失败
- 避免出现 169.254.x.x 地址——这是 DHCP 失败标志,说明基础寻址已中断,需先解决 DHCP 或改手动配置
检查默认路由是否存在且下一跳可达
没有 default via 条目,系统就不知道“其他所有地址”往哪送;有条目但网关本身不通,数据包照样发不出去。
- 运行 ip route show,查找含 default via [网关IP] dev [接口] 的行,例如 default via 192.168.1.1 dev ens33
- 若缺失,临时添加:sudo ip route add default via 192.168.1.1 dev ens33(替换为真实值)
- 若存在,立刻 ping -c 3 192.168.1.1 测试网关连通性:全丢包则继续查 ip neigh show 中该 IP 是否为 REACHABLE;若为 INCOMPLETE,说明 ARP 无响应——可能是网关宕机、不在同一二层、VLAN 隔离或 rp_filter 开启
定位具体目标的实际转发路径
当只对某个地址(如 10.10.20.30)不通时,别猜路由表,直接问内核它打算怎么走。
- 运行 ip route get 10.10.20.30,输出会明确告诉你匹配哪条路由、走哪个接口、下一跳是谁
- 若返回 unreachable 或 blackhole,说明该目标无有效路由,需检查是否有冲突、重叠或掩码错误的静态路由
- 若返回了默认路由但你预期应走某条静态路由,说明该静态路由未生效或 metric 值不够优——用 ip route show table all 查所有表,确认规则和对应表内容











