在阿里云 ECS(Elastic Compute Service)上安装 Ubuntu 后,网络配置的核心在于理解“云厂商底层网络”与“操作系统内部网络栈”之间的解耦关系。很多新手容易陷入一个误区:认为只要修改了 /etc/netplan/ 或 /etc/network/interfaces,网络就通了。实际上,如果安全组(Security Group)或弹性网卡(ENI)层面的配置未对齐,系统内部配得再完美也无法对外通信。
以下是基于主流国内云厂商(以阿里云为主,兼顾腾讯云、华为云等通用逻辑)的标准操作流程和排错思路。
一、 核心前提:区分“控制台配置”与“实例内配置”
在登录服务器之前,请确保以下两点已在云平台控制台完成:
- 安全组规则:已放行所需端口(如 SSH 22, HTTP 80/443, ICMP Ping 等)。这是第一道防火墙。
- 弹性公网 IP (EIP):如果需要通过公网访问,需将 EIP 绑定到 ECS 实例,并确保路由表正确。
注意:Ubuntu 默认使用
netplan作为网络配置工具(18.04+ 版本),而旧版或特定镜像可能仍使用ifupdown。以下以现代 Ubuntu Server (20.04/22.04/24.04) 的netplan为例。
二、 步骤详解:Ubuntu 内部网络配置
1. 查看当前网络状态
首先,确认系统识别到了哪些网卡以及当前的 DHCP 状态。
# 查看网卡名称和 IP 分配情况
ip addr show
# 查看默认路由网关
ip route show default
# 测试连通性(先测内网网关,再测网络 DNS)
ping -c 4 <内网网关IP> # 通常可通过 ip route 获取
ping -c 4 8.8.8.8 # 测试公网连通性
如果此时无法 ping 通网关,说明物理链路或驱动层有问题;如果能 ping 通网关但无法上网,通常是 DNS 或 NAT 问题。
2. 确定网络模式:DHCP vs 静态 IP
大多数场景下,推荐使用 DHCP,因为云厂商的元数据服务会自动分配正确的 IP、网关和 DNS。除非你有固定内网 IP 的需求(如跨 VPC 对等连接、负载均衡后端组要求),否则不建议手动指定静态 IP,除非你完全了解子网 CIDR 范围。
场景 A:保持默认 DHCP(推荐)
如果你的 ip addr 显示 eth0 或 ens5 等接口已通过 DHCP 获取到 IP,且能正常上网,则无需任何操作。只需确保 /etc/netplan/ 下的配置文件允许 DHCP。
检查文件:
cat /etc/netplan/50-cloud-init.yaml
# 或类似文件名,如 00-installer-config.yaml
典型内容如下:
network:
version: 2
ethernets:
eth0: # 网卡名称可能不同,请以 ip addr 为准
dhcp4: true
dhcp6: false
应用配置:
sudo netplan apply
场景 B:配置静态 IP(高级用户/特定需求)
若需固定内网 IP,需修改 netplan 配置文件。务必先通过控制台获取子网可用 IP 段,避免冲突。
编辑配置文件(例如 /etc/netplan/01-netcfg.yaml):
network:
version: 2
renderer: networkd # 确保渲染器正确
ethernets:
eth0:
addresses:
- 172.16.0.100/24 # 替换为你的私有 IP 和子网掩码
gateway4: 172.16.0.1 # 替换为你的默认网关
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
重要提示:
gateway4在 netplan 中已被弃用,新版推荐使用routes。更规范的写法是:routes: - to: default via: 172.16.0.1
应用配置并验证:
sudo netplan apply
ip addr show
ping -c 4 8.8.8.8
3. 处理 Cloud-Init 冲突(常见坑点)
Ubuntu 云镜像通常预装了 cloud-init。它会优先于本地 netplan 配置初始化网络。如果你手动修改了 netplan,重启后可能被 cloud-init 覆盖。
解决方案:
- 方法一(推荐):不要直接修改
/etc/netplan/中的文件,而是让 cloud-init 管理。你可以在控制台修改实例的网络属性(如绑定 EIP、修改安全组),然后重启实例,cloud-init 会同步更新。 - 方法二:禁用 cloud-init 的网络管理模块(不推荐生产环境随意操作):
sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg添加:
network: {config: disabled}然后重新运行
sudo netplan apply。
三、 常见问题排查清单
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 能 ping 通网关,但不能 ping 通网络 IP | DNS 解析失败 | 检查 /etc/resolv.conf 是否有 nameserver。若无,需在 netplan 中配置 nameservers。 |
| 能 ping 通网络 IP,但无法访问网站 | DNS 或XX问题 | 同上,检查 DNS。也可能是浏览器缓存或防火墙阻止了 80/443 端口。 |
| SSH 连接超时 | 安全组未放行 22 端口 | 登录云平台控制台,检查 ECS 所在安全组的入方向规则,添加 TCP 22 源为 0.0.0.0/0 或你的 IP。 |
| 重启后 IP 丢失或变回 DHCP | Cloud-init 覆盖 | 检查 /var/log/cloud-init.log,确认是否因模板错误导致重置。建议通过控制台调整而非手动改文件。 |
| 多网卡环境下流量不走预期路径 | 路由表混乱 | 使用 ip route show 查看默认路由。确保主网卡的路由优先级最高。可设置策略路由。 |
四、 最佳实践建议
- 优先使用控制台管理网络属性:对于 IP 地址变更、EIP 绑定、安全组规则,尽量通过云平台控制台操作,而非进入实例内部修改。这样更符合云原生理念,且便于审计和自动化运维。
- 使用内部域名解析:阿里云等厂商提供内网 DNS(如
100.96.0.2),在内网环境中查询其他云服务(如 RDS、OSS)时,应使用内网域名,速度更快且免费。 - 备份配置文件:在修改任何网络配置前,务必备份原文件:
sudo cp /etc/netplan/*.yaml /etc/netplan/*.yaml.bak - 使用
netplan try替代apply:在调试阶段,使用sudo netplan try会在应用配置后等待 120 秒,若期间无响应则自动回滚,防止配置错误导致失联。
五、 总结
在 ECS 上配置 Ubuntu 网络,本质是协调云基础设施与操作系统。
- 日常维护:保持 DHCP,依赖 cloud-init 自动配置。
- 特殊需求:如需静态 IP,请精确填写 netplan 配置,并验证路由和 DNS。
- 故障定位:从下到上排查——物理链路 → 安全组 → 路由表 → DNS → 应用层。
遵循以上步骤,即可确保你的 Ubuntu 实例在网络层面稳定、高效地运行。
云技术博客