dns解析正常但无法访问外网,问题出在路由缺失、网关转发异常、防火墙拦截出站或内核ip转发未启用:一查默认路由是否存在,二测网关双向连通性及nat功能,三检firewalld/ufw是否开启masquerade,四验net.ipv4.ip_forward是否为1。

DNS 解析正常但无法访问外网,说明域名能转成 IP,但后续链路中断了。问题大概率出在路由、防火墙、NAT 或内核转发设置上,而不是 DNS 或物理连接。
确认默认路由是否存在且有效
即使能解析域名、也能 ping 通网关,若缺少默认路由,系统仍不会把目的地址非本子网的包发出去。
- 运行 ip route show default —— 若无输出,说明默认路由缺失
- 临时添加:sudo ip route add default via 192.168.1.1 dev eth0(请将网关和接口名替换成实际值)
- 验证是否生效:ip route get 8.8.8.8 应返回含 via 192.168.1.1 的路径
检查网关可达性与回程路径
能 ping 通网关不等于网关真能帮你转发——可能单向通(ICMP 请求能到,但响应被丢)、或网关本身未启用 NAT/转发。
- 用 ping -c 4 192.168.1.1 看是否稳定响应;若丢包或超时,换用 arping -I eth0 192.168.1.1 绕过 ICMP 检查 ARP 层连通性
- 从另一台局域网设备(如手机或笔记本)尝试 ping 该 Linux 服务器的 IP,确认网关是否允许双向通信
- 登录路由器后台,确认已开启“NAT”、“IP 转发”或“DHCP 分配网关”等基础功能
排查防火墙拦截出站流量
很多发行版默认启用 firewalld 或 ufw,它们可能放行入站却限制出站,尤其对非标准端口或新连接。
- 查状态:sudo systemctl status firewalld(或 ufw status)
- 看规则:sudo firewall-cmd --list-all | grep "masquerade\|forward" —— 若无 masquerade 或 forward zone 开放,外网请求无法 SNAT 出去
- 临时放行测试:sudo firewall-cmd --add-masquerade --permanent && sudo firewall-cmd --reload
验证内核 IP 转发与网络策略
若该机器本身被当作跳板或网关使用(哪怕只是一次性调试),net.ipv4.ip_forward 必须为 1;否则即使路由表正确,内核也会静默丢弃非本机目的的包。
- 查看当前值:sysctl net.ipv4.ip_forward —— 返回 0 即未启用
- 临时开启:sudo sysctl -w net.ipv4.ip_forward=1
- 永久生效:编辑 /etc/sysctl.conf,取消注释或新增 net.ipv4.ip_forward = 1,再执行 sudo sysctl -p











