网络环境验证:IP配置、DNS解析、防火墙规则、端口连通性

网络环境验证,说白了就是确认你的服务器或容器在网络层面“活”了。我见过太多部署失败案例,最后查来查去,就是网络不通。今天咱们就把这四块硬骨头啃下来。

我会按照实际操作顺序来讲:先看IP配置,再看DNS解析,然后检查防火墙规则,最后确认端口连通性。这个顺序也是我团队一直用的排查路线。

网络环境验证核心流程 网络环境验证 IP配置 ip a / ifconfig DNS解析 nslookup / dig 防火墙规则 iptables / firewalld 端口连通性 telnet / nc / curl 检查顺序:IP配置 → DNS解析 → 防火墙规则 → 端口连通性 任何一步异常,后续步骤均无意义

IP配置验证:你配的地址真的生效了吗?

拿到一台新服务器,第一步不是跑业务。我的习惯是先看网卡状态和IP地址。

最简单的命令:

ip addr show
# 或者老系统用
ifconfig -a

你注意看输出。重点检查三点:

  • 网卡状态:是不是 UP。如果是 DOWN,那后面都不用看了。
  • IP地址:是不是你期望的网段。我曾遇到一次,配了192.168.1.100,结果隔壁人写了一行错误配置,把地址抢了。
  • 子网掩码和网关:我见过有人把/24写成/16,结果跨网段访问全不通。

确认网关:

ip route show
# 输出示例
# default via 192.168.1.1 dev eth0

这里有个小坑——默认网关只能有一条。如果出现多条,系统会随机选一条。嗯,我早期在一个双网卡服务器上就吃过这个亏。

小技巧:用 ping -c 4 网关IP 快速验证三层连通性。注意,ping通不代表一切正常,但ping不通一定有问题。

DNS解析:域名转IP这步别卡住

很多时候你的IP是通的,但服务就是连不上。为什么?因为你用了域名,但解析失败了。

我个人习惯先看 /etc/resolv.conf:

cat /etc/resolv.conf
# 期望看到类似
# nameserver 8.8.8.8
# nameserver 114.114.114.114

然后做实际域名解析测试:

nslookup your-service.example.com
# 或者
dig your-service.example.com +short

我曾经遇到一个情况——域名解析正确,但容器里不行。后来发现是容器内的 resolv.conf 被宿主机的配置覆盖了。你想想看,这个问题排查起来是不是很隐蔽?

还有个常见坑:DNS缓存。如果你改了DNS服务器,但系统还沿用老的解析结果,那就要清缓存:

# systemd-resolved
systemd-resolve --flush-caches
# 或者重启网络服务
systemctl restart networking
工具适用场景常用参数
nslookup快速查域名解析nslookup xxx.com 8.8.8.8
dig详细调试,看全流程dig @114.114.114.114 xxx.com
host轻量级查询host xxx.com 223.5.5.5
注意:千万不要在生产环境随意更换DNS服务器,尤其是正在运行中的Kubernetes集群。改之前一定确认服务平滑切换方案。

防火墙规则:你以为关了就真关了吗?

网络通了,域名解析也对了,但服务就是访问不到。这时候八成是防火墙在作妖。

先看看当前防火墙状态:

# iptables 系
iptables -L -n -v
# firewalld 系
firewall-cmd --list-all
# ufw 系(Ubuntu)
ufw status verbose

记住,防火墙规则是按顺序匹配的。我遇到过这样的情况:明明放行了80端口,但请求还是被拒。后来查了半天,发现前面有一条REJECT ALL规则把流量先拦截了。规则顺序很重要!

临时放行端口的方法:

# iptables 放行 8080
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# firewalld 放行
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

如果你想完全关闭防火墙做测试(仅限于测试环境):

# systemd
systemctl stop firewalld
systemctl disable firewalld
# 或者直接清空 iptables
iptables -F

实战经验:生产环境千万不要随便清空iptables。我有一次手残,在线上执行了iptables -F,SSH连接瞬间断了。那感觉……你懂的。

端口连通性:最后1%的验证

IP、DNS、防火墙都对了,最后一步——验证端口到底通不通。

最经典的命令:

telnet 192.168.1.100 8080
# 如果能连上,会显示连接成功
# 如果没反应或者显示连接失败,就是端口不通

但现代系统很多默认没装telnet。我的建议是用 nc(netcat):

# 扫描端口是否开放
nc -zv 192.168.1.100 8080
# -z 表示只扫描,不发送数据
# -v 表示输出详细信息

或者用 curl 测试HTTP端口:

curl -v http://192.168.1.100:8080/health
# -v 会显示完整的握手过程

为什么这些工具都能用?因为他们本质上都是建立TCP三次握手。成功建立连接,就说明网络是通的。

我曾经排查过一个奇怪的问题:A服务器telnet B服务器的3306端口通了,但是应用就是连不上数据库。后来发现——MySQL配置了只允许特定来源IP连接。telnet只管TCP握手,不管应用层认证。所以端口通不等于服务可用,这点你要记住。

快速验证清单:
  • ping 网关:确认本机网络是活的
  • ping 对端IP:确认三层可达
  • nslookup 域名:确认DNS解析正确
  • telnet IP 端口:确认应用端口开放
  • curl 接口:确认服务真的在响应

嗯,到这里网络环境验证的四个核心点就讲完了。记住一个原则:分层验证,从下往上。IP层通了再看传输层,传输层通了再看应用层。跳步验证往往会让你在错误的地方花大量时间。我个人用这个路线,排查网络问题从来没超过20分钟。