内网访问失败通常由防火墙规则、服务绑定地址、网络路由、SELinux 四层限制叠加导致;需依次验证 iptables/nftables 规则顺序、ss -tlnp 查监听地址、ping/arp/ip route 排查连通性、ausearch 审计 SELinux 拒绝日志。
防火墙规则拦截了内网流量
Linux 主机默认启用 iptables 或 nftables,即使服务进程正常监听,也可能因规则未放行内网网段(如 192.168.0.0/16、10.0.0.0/8)而拒绝连接。
实操建议:
- 检查当前规则:
sudo iptables -L -n -v(或sudo nft list ruleset),重点关注INPUT链中是否有REJECT或DROP策略 - 临时放行内网访问(以
iptables为例):sudo iptables -I INPUT -s 192.168.0.0/16 -p tcp --dport 8080 -j ACCEPT - 注意规则顺序:
ACCEPT规则必须在REJECT或DROP之前生效,否则无效 - 若使用
firewalld,确认区域(如trusted或自定义 zone)已包含内网接口或源地址
服务绑定地址不是 0.0.0.0 或内网 IP
很多服务(如 nginx、python -m http.server、redis-server)默认只监听 127.0.0.1,导致其他内网机器无法访问,哪怕端口是开放的。
实操建议:
- 用
ss -tlnp或netstat -tlnp查看监听状态,重点看Local Address:Port列:
— 若显示127.0.0.1:8080,说明仅限本地;
— 若显示*:8080或0.0.0.0:8080,表示全网卡监听;
— 若显示192.168.1.100:8080,则仅限该 IP 所在网卡 - 修改服务配置:例如
nginx的listen指令改为listen 0.0.0.0:8080;redis.conf中设置bind 0.0.0.0(并确保protected-mode no) - 某些工具(如
http.server)需显式指定地址:python3 -m http.server 8000 --bind 0.0.0.0:8000
路由或网络设备隔离了内网通信
服务所在主机可能处于不同子网,或中间交换机/路由器未配置静态路由,也可能因 VLAN 划分、ACL 策略、ARP 表异常等导致二层/三层不通。