常见原因是路由表错误、DNS异常、防火墙拦截或接口异常;应按物理→IP→路由→DNS→应用层级排查:先ping 127.0.0.1、网关、8.8.8.8、域名确认连通性,再查ip route、/etc/resolv.conf、systemd-resolved状态及iptables规则。

Linux本机能访问外网但无法访问本地网络(或反过来),常见于路由表错误、DNS配置异常、防火墙拦截或网络接口状态异常。核心排查顺序应是:先确认连通性层级(物理→IP→路由→DNS→应用),再逐层验证。
一、检查基础网络连通性
用最简命令快速定位问题层级:
-
ping 127.0.0.1 —— 验证协议栈是否正常;失败说明内核网络模块异常
-
ping 网关IP(如 192.168.1.1) —— 判断本机到局域网出口是否通畅;不通需查网卡状态(ip a)、线缆、交换机端口
-
ping 8.8.8.8 —— 绕过DNS测试纯IP层外网可达性;通但域名打不开,基本锁定DNS问题
-
ping www.baidu.com —— 同时检验DNS解析+IP连通;若失败而8.8.8.8成功,重点查/etc/resolv.conf和systemd-resolved服务
二、验证路由表与默认网关
Linux依赖路由表决定数据包走向,错误的默认路由会导致“能上外网但进不了内网”或“能进内网但出不去”:
- 运行 ip route show 查看当前路由;确认存在一条含 default via [网关IP] 的条目,且该网关IP属于已启用网卡所在子网
- 若有多网卡(如eth0接内网、eth1接外网),检查是否有冲突路由(如内网段被误指向外网网关);可用 ip route del 临时删除错误项,或 ip route add 补充正确静态路由
- 检查网关本身是否可达:arp -n | grep [网关IP] 看MAC是否学习到;无记录则可能网关宕机或VLAN隔离
三、诊断DNS解析问题
DNS失败常表现为“域名无法解析”,但ping IP正常。注意Linux DNS行为比Windows更依赖配置文件和本地服务:
- 查看真实生效的DNS服务器:systemd-resolve --status(新版)或直接读 cat /etc/resolv.conf;注意该文件可能是符号链接(如指向/run/systemd/resolve/stub-resolv.conf)
- 手动指定DNS测试:nslookup www.qq.com 114.114.114.114 或 dig @223.5.5.5 www.taobao.com;若指定DNS成功,说明系统默认DNS配置失效
- 检查systemd-resolved服务状态:systemctl status systemd-resolved;若未运行且/etc/resolv.conf指向其socket,则DNS必然失败
四、排查防火墙与连接跟踪干扰
iptables/nftables规则或conntrack状态异常,可能导致特定方向流量被静默丢弃:
- 临时清空规则测试:iptables -P INPUT ACCEPT; iptables -P OUTPUT ACCEPT; iptables -F(仅限测试环境)
- 检查是否启用了反向路径过滤(rp_filter):sysctl.net.ipv4.conf.all.rp_filter;值为2(宽松)或0(关闭)较安全,1(严格)易导致多网卡场景下回程包被丢弃
- 查看连接跟踪表大小及溢出:conntrack -S;若“insert_failed”持续增长,可能需调大net.netfilter.nf_conntrack_max
以上就是Linux本机可以访问外网不行_路由与DNS排错流程【教学】的详细内容,更多请关注php中文网其它相关文章!