如何在运行于GCP的嵌套Ubuntu VM中正常使用apt工具?
问题结论与排查方案
首先可以明确:谷歌官方没有限制GCP嵌套VM对apt源地址的访问,该报错均为配置或网络规则问题导致,可按以下步骤逐层排查解决:
1 优先排查apt相关配置
- 先验证源地址连通性:在嵌套VM终端执行
curl -I http://archive.ubuntu.com(将地址替换为/etc/apt/sources.list中配置的实际源地址),如果curl能正常返回200/302状态码,说明网络连通正常,问题出在apt配置本身;如果curl也报连接错误,再排查网络层问题。 - 检查apt代理配置:如果宿主实例需要配置代理才能访问apt源,需确认嵌套VM的apt也配置了对应代理,代理配置文件默认存放在
/etc/apt/apt.conf.d/目录下,注意Firefox浏览器的独立代理不会作用于终端apt命令。 - 可临时替换为其他apt源测试,排除当前使用的源节点路由不可达的问题。
2 排查防火墙与端口规则
- 检查嵌套VM内部防火墙放行规则:apt默认使用80(HTTP)、443(HTTPS)端口,部分源还会用到21(FTP)端口,执行
sudo ufw status查看当前ufw规则,若未放行对应端口的出站请求,执行sudo ufw allow out 80,443/tcp添加规则。 - 检查GCP宿主实例的转发规则:宿主上执行
sudo iptables -L FORWARD -n,确认没有拦截嵌套VM网段的出站流量规则。
3 排查MTU不匹配问题
GCP宿主实例默认MTU为1460,如果嵌套VM网卡默认MTU为1500,会出现小包(浏览器网页访问)正常、大包(apt拉取索引文件)传输失败的情况:
- 嵌套VM执行
ip link show查看当前网卡MTU,临时修改为1400测试:sudo ip link set dev 你的网卡名称 mtu 1400,修改后重新执行apt-get update验证是否恢复正常。 - 若修改MTU后问题解决,将配置写入
/etc/netplan/下的网络配置文件永久生效。
若以上步骤都无法解决,可执行
apt-get update -o Debug::Acquire::http=true输出apt更新的详细调试日志,定位具体失败的节点再针对性排查。
内容的提问来源于stack exchange,提问作者FierceScarf
相关产品推荐
相关产品推荐

