在 CentOS 上使用 iptables 后“连不上网”,通常不是 iptables 本身坏了,而是规则把流量挡掉了或没做 NAT/放行。下面按最常见原因一步步排查。
临时清空规则测试:
iptables -F
iptables -X
iptables -Z
如果能上网了 → 就是 iptables 规则问题
如果还不行 → 可能是网络/DNS/路由问题(不是 iptables)
这是最容易断网的原因。
✅ 必须有这条:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
如果你设置了:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
但没有上面规则 → 立刻断网
CentOS 默认建议:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
如果你把 OUTPUT 也 DROP,又没逐条放行:
✅ 简单可用方案:
iptables -P OUTPUT ACCEPT
即使能 ping IP,也不能上网(浏览器打不开)
放行 DNS:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
测试:
nslookup www.baidu.com
如果你是路由器/软路由/虚拟机网关:
启用 NAT:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(eth0 是出网网卡)
并开启转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
CentOS 7 默认是 firewalld,你可能:
查看:
systemctl status firewalld
如果用了 iptables:
systemctl stop firewalld
systemctl disable firewalld
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
我可以精准帮你定位:
iptables -L -n -v)直接贴出来即可。