Azure VMSS自定义Ubuntu镜像出站流量受阻问题求助
排查VMSS实例无法访问外网的解决方案
我来帮你排查这个问题,结合你描述的情况——单独部署VM正常、同规模集内实例能互通但出不了外网,大概率是网络配置或者预配后的系统设置出了问题,咱们一步步来:
1. 先确认VMSS的网络基础配置
首先得排除云平台层面的网络限制:
- 登录云控制台,检查VMSS关联的子网是否绑定了正确的路由表,路由表里必须有
0.0.0.0/0的默认路由指向互联网网关(比如Azure的Internet Gateway)。 - 核对子网对应的网络安全组(NSG),确保出站规则允许必要的外网访问(比如TCP 80/443、ICMP出站)。
提示:因为单独VM能正常访问,所以NSG和路由表大概率是对的,但还是要确认VMSS是不是用了同一个子网/NSG,别不小心配错了。
2. 检查实例的DNS解析配置
无法解析域名(比如google.com)是最常见的原因之一,先确认DNS设置:
- 在VMSS实例里执行
cat /etc/resolv.conf,看看有没有配置有效的DNS服务器(比如公共DNS8.8.8.8,或者云服务商提供的DNS)。 - 如果DNS配置为空或错误,先手动临时添加测试:
然后再试echo "nameserver 8.8.8.8" >> /etc/resolv.confping google.com,如果能解析通了,说明是DNS问题。接下来要把配置持久化:- Ubuntu系统:修改
/etc/netplan下的配置文件,添加DNS服务器后执行netplan apply。 - CentOS/RHEL系统:修改网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-*,设置DNS1=8.8.8.8后重启网络服务。
- Ubuntu系统:修改
3. 验证实例的默认网关设置
预配命令sudo waagent -deprovision+user可能会重置网络路由,导致默认网关丢失:
- 执行
ip route show,查看输出里有没有default via x.x.x.x dev eth0这样的默认路由条目。如果没有,那肯定出不了外网。 - 手动添加默认网关(替换
x.x.x.x为你的子网网关,一般是子网的第一个IP,比如10.0.0.1):
测试能访问外网后,记得把这个配置持久化,避免重启后丢失,具体方法和上面DNS的持久化类似,对应修改系统的网络配置文件。ip route add default via x.x.x.x dev eth0
4. 检查云代理waagent的状态
waagent负责云平台向实例注入网络配置,预配后可能需要确保它正常工作:
- 执行
systemctl status waagent(systemd系统),看服务是否处于运行状态。如果没启动,手动开启并设置开机自启:systemctl start waagent systemctl enable waagent - 打开waagent的配置文件
/etc/waagent.conf,确认Provisioning.Enabled=y,这样代理才会自动注入网关、DNS等配置。修改后记得重启waagent服务。
5. 排查本地防火墙/iptables规则
预配过程可能修改了本地防火墙规则,拦截了出站流量:
- 执行
iptables -L -n,查看OUTPUT链是否有拒绝所有的规则。如果有,先清空测试:iptables -F OUTPUT iptables -P OUTPUT ACCEPT - 另外检查系统自带的防火墙:比如Ubuntu的
ufw,执行ufw status确认是否允许出站;CentOS的firewalld,执行firewall-cmd --list-all看public区域的出站规则。如果有限制,调整规则允许出站流量。
6. 确认VHD的预配完整性
如果上面都没问题,可能是VHD预配不彻底,导致VMSS部署时无法正确注入网络配置:
- 重新检查VHD的预配步骤,确保
waagent -deprovision+user执行完全,没有残留的网络配置干扰。部署VMSS时,确认选择了正确的网络参数,并且启用了云代理的自动配置功能。
要是以上步骤都试过还不行,可以用tcpdump icmp抓包看看ping的数据包是否发出去,有没有收到回应,进一步定位是路由、DNS还是防火墙的问题。
内容的提问来源于stack exchange,提问作者smoyer
相关产品推荐
相关产品推荐

