Anolis OS(龙蜥操作系统)作为阿里云主导研发的开源 Linux 发行版,底层与 RHEL/CentOS 高度兼容。当遇到“网络配置看起来正确但无法上网”的情况时,通常不是配置语法错误,而是路由、DNS、安全组或内核参数层面的问题。
以下是基于生产环境经验的排查思路,按从易到难、从应用层到底层的顺序进行:
1. 确认基础连通性分层测试
不要直接 ping 百度,要分层测试以定位故障点。
- 物理/虚拟链路层:
ping <网关IP>- 如果通:说明二层和三层基本链路没问题,问题出在路由、DNS或策略。
- 如果不通:说明宿主机网络隔离、VPC路由表错误或网卡驱动异常。
- 公网解析层:
nslookup www.baidu.com或dig www.baidu.com- 如果解析失败(超时或 SERVFAIL):问题出在 DNS 配置或出口防火墙拦截了 UDP 53 端口。
- 如果解析成功但 IP 不对:检查
/etc/resolv.conf是否被 systemd-resolved 或其他服务覆盖。
- 公网 TCP 连通性:
curl -v http://www.baidu.com或telnet 8.8.8.8 443- 如果 DNS 正常但 curl 超时:可能是源地址 NAT 未生效、安全组出站规则限制、或运营商封禁了特定端口。
2. 检查路由表(最常见坑点)
很多用户只看了 IP 地址和子网掩码,忽略了默认网关的路由优先级。
ip route show
- 重点检查:
- 是否存在多条默认路由(default via …)?如果有,检查 metric 值,低 metric 优先。
- 默认网关是否正确指向了 VPC 路由器或物理网关?
- 是否有静态路由冲突?例如你手动添加了一条指向内网的其他路由,却意外覆盖了默认路由。
- 修复示例:
# 删除错误路由并重新添加 ip route del default via <错误网关> ip route add default via <正确网关> dev eth0
3. 检查 DNS 配置陷阱
Anolis OS 默认可能使用 systemd-resolved 或传统的 NetworkManager,不同版本处理方式不同。
- 查看当前生效的 DNS:
resolvectl status # 或者 cat /etc/resolv.conf - 常见误区:
- 你在
/etc/sysconfig/network-scripts/ifcfg-eth0里写了DNS1=8.8.8.8,但系统实际使用的是/run/systemd/resolve/stub-resolv.conf中的 DNS。 - 解决:确保
/etc/resolv.conf是软链接指向正确的解析器,或者直接修改systemd-networkd的配置。
- 你在
- 测试方法:
nslookup google.com 8.8.8.8如果能通,说明本地 DNS 服务有问题;如果不能通,说明网络 DNS 服务器不可达或被阻断。
4. 云厂商特有因素:安全组与 NACL
这是云服务器(ECS/CVM)最容易被忽视的地方。本地网络配置再完美,云平台的网络安全组也会拦截流量。
- 安全组(Security Group):
- 检查实例绑定的安全组,出站规则(Outbound) 是否允许 ICMP、TCP 80/443 等协议。
- 有些云厂商默认出站是全开放的,但如果你自定义过规则,可能会误删。
- 网络 ACL(NACL):
- 如果使用了 VPC 的子网级 ACL,检查是否有入站/出站规则限制了所有流量。
- 弹性公网 IP(EIP)绑定:
- 确认实例是否绑定了 EIP?如果没有绑定,且没有通过 SNAT 网关,那么即使内网配置正确,也无法访问公网。
5. 内核参数与防火墙
- iptables/firewalld:
systemctl status firewalld iptables -L -n -v检查是否有 DROP 或 REJECT 规则影响了 OUTPUT 链。虽然少见,但在某些加固场景中会出现。
- IP Forwarding:
如果这台机器充当路由器或容器宿主,检查:sysctl net.ipv4.ip_forward应为
1。如果是0,则无法转发流量。 - MTU 问题:
在 VPC 环境中,由于 VXLAN 封装等原因,有效 MTU 可能小于 1500。如果设置过大,会导致大包丢弃。ping -M do -s 1472 <网关IP> # 尝试小包 ping -M do -s 1500 <网关IP> # 尝试大包如果大包不通而小包通,需调整网卡 MTU 或使用 PMTUD。
6. Anolis OS 特定组件:NetworkManager vs network-scripts
Anolis 8/9 系列默认推荐使用 NetworkManager,但许多老脚本仍依赖 /etc/sysconfig/network-scripts/。
- 冲突检测:
如果同时启用了 NetworkManager 和 network-scripts,可能导致配置不同步。nmcli device status nmcli connection show - 建议:
统一使用nmcli管理网络,避免混用。如果使用传统方式,请确保NM_CONTROLLED=no在 ifcfg 文件中设置,否则 NetworkManager 会忽略你的配置。
7. 快速诊断脚本(一键排查)
你可以将以下脚本保存为 net_check.sh 并在目标机器上运行,它能自动输出关键信息:
#!/bin/bash
echo "=== 1. 网卡状态 ==="
ip addr show | grep -E "inet |state"
echo ""
echo "=== 2. 路由表 ==="
ip route show
echo ""
echo "=== 3. DNS 配置 ==="
cat /etc/resolv.conf
echo ""
echo "=== 4. DNS 解析测试 ==="
nslookup www.baidu.com 2>&1 | head -n 5
echo ""
echo "=== 5. 网关连通性 ==="
GATEWAY=$(ip route | grep default | awk '{print $3}')
if [ -n "$GATEWAY" ]; then
ping -c 3 -W 2 $GATEWAY
else
echo "No default gateway found!"
fi
echo ""
echo "=== 6. 公网连通性 (HTTP) ==="
curl -m 5 -o /dev/null -s -w "%{http_code}" http://www.baidu.com
echo ""
echo "=== 7. 防火墙状态 ==="
systemctl is-active firewalld || systemctl is-active iptables
总结排查路径
- 能 ping 通网关吗? → 不能:查物理链路、VPC 路由表、EIP 绑定。
- 能解析域名吗? → 不能:查 DNS 配置、UDP 53 端口开放情况。
- 能 curl 网页吗? → 不能:查安全组出站规则、SNAT 配置、防火墙策略。
- 配置对吗? → 查 NetworkManager 与 ifcfg 文件的冲突、MTU 设置。
在实际生产中,80% 的问题源于安全组出站规则缺失、DNS 解析异常或路由表错乱。建议优先检查这三项。
云技术博客