温馨提示×

centos iptables为何连不上网

小樊
46
2026-09-02 16:18:11
栏目: 智能运维

CentOS 上使用 iptables 后“连不上网”,通常不是 iptables 本身坏了,而是规则把流量挡掉了或没做 NAT/放行。下面按最常见原因一步步排查。


一、先确认是不是 iptables 导致的

临时清空规则测试:

iptables -F
iptables -X
iptables -Z

如果能上网了 → 就是 iptables 规则问题
如果还不行 → 可能是网络/DNS/路由问题(不是 iptables)


二、最常见原因 1:没有放行 ESTABLISHED/RELATED

这是最容易断网的原因

✅ 必须有这条:

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

但没有上面规则 → 立刻断网


三、最常见原因 2:OUTPUT 被 DROP 了

CentOS 默认建议:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

如果你把 OUTPUT 也 DROP,又没逐条放行:

  • DNS 请求出不去
  • 访问网站失败

✅ 简单可用方案:

iptables -P OUTPUT ACCEPT

四、最常见原因 3:DNS 被拦

即使能 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

五、最常见原因 4:作为网关/NAT 没做 MASQUERADE

如果你是路由器/软路由/虚拟机网关

启用 NAT:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(eth0 是出网网卡)

并开启转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

六、CentOS 7+ 特别注意事项

CentOS 7 默认是 firewalld,你可能:

  • 同时开 firewalld + iptables
  • 或以为改了 iptables,其实 firewalld 在管

查看:

systemctl status firewalld

如果用了 iptables:

systemctl stop firewalld
systemctl disable firewalld

七、一个“能上网的最小 iptables 示例”

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

八、你可以告诉我

我可以精准帮你定位:

  1. CentOS 版本(6 / 7 / 8 / Stream)
  2. 物理机 / 虚拟机 / 云服务器
  3. 本机不能上网还是下游设备不能上网
  4. 当前 iptables 规则(iptables -L -n -v

直接贴出来即可。

0