努力
加油

ECS云主机安装Ubuntu后如何配置网络?

在阿里云 ECS(Elastic Compute Service)上安装 Ubuntu 后,网络配置的核心在于理解“云厂商底层网络”与“操作系统内部网络栈”之间的解耦关系。很多新手容易陷入一个误区:认为只要修改了 /etc/netplan/ 或 /etc/network/interfaces,网络就通了。实际上,如果安全组(Security Group)或弹性网卡(ENI)层面的配置未对齐,系统内部配得再完美也无法对外通信。

以下是基于主流国内云厂商(以阿里云为主,兼顾腾讯云、华为云等通用逻辑)的标准操作流程和排错思路。

一、 核心前提:区分“控制台配置”与“实例内配置”

在登录服务器之前,请确保以下两点已在云平台控制台完成:

  1. 安全组规则:已放行所需端口(如 SSH 22, HTTP 80/443, ICMP Ping 等)。这是第一道防火墙。
  2. 弹性公网 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 查看默认路由。确保主网卡的路由优先级最高。可设置策略路由。

四、 最佳实践建议

  1. 优先使用控制台管理网络属性:对于 IP 地址变更、EIP 绑定、安全组规则,尽量通过云平台控制台操作,而非进入实例内部修改。这样更符合云原生理念,且便于审计和自动化运维。
  2. 使用内部域名解析:阿里云等厂商提供内网 DNS(如 100.96.0.2),在内网环境中查询其他云服务(如 RDS、OSS)时,应使用内网域名,速度更快且免费。
  3. 备份配置文件:在修改任何网络配置前,务必备份原文件:
    sudo cp /etc/netplan/*.yaml /etc/netplan/*.yaml.bak
  4. 使用 netplan try 替代 apply:在调试阶段,使用 sudo netplan try 会在应用配置后等待 120 秒,若期间无响应则自动回滚,防止配置错误导致失联。

五、 总结

在 ECS 上配置 Ubuntu 网络,本质是协调云基础设施与操作系统。

  • 日常维护:保持 DHCP,依赖 cloud-init 自动配置。
  • 特殊需求:如需静态 IP,请精确填写 netplan 配置,并验证路由和 DNS。
  • 故障定位:从下到上排查——物理链路 → 安全组 → 路由表 → DNS → 应用层。

遵循以上步骤,即可确保你的 Ubuntu 实例在网络层面稳定、高效地运行。