Ubuntu 使用 Netplan 配置 IP 地址与 DNS 完整教程

一、什么是 Netplan

从 Ubuntu 17.10 起,系统默认使用 Netplan 作为网络配置工具。它采用 声明式 YAML 描述网络需求,再由后端渲染成具体实现:

  • networkd:服务器版默认后端(systemd-networkd),适合无图形界面环境;
  • NetworkManager:桌面版默认后端,带图形界面,适合笔记本/工作站。

也就是说,你只需要写一份 YAML 把”我想要什么 IP、什么 DNS”描述清楚,Netplan 会自动帮你生成底层的 networkd 或 NetworkManager 配置,省去直接改 /etc/network/interfaces 或手写 .network 文件的麻烦。

二、配置文件在哪里

Netplan 的配置目录是 /etc/netplan/,文件必须以 .yaml 结尾。常见文件名如:

  • 00-installer-config.yaml(服务器安装时自动生成)
  • 50-cloud-init.yaml(云镜像常见,由 cloud-init 写入)
  • 01-netcfg.yaml(自定义命名均可)

系统会按文件名字母顺序依次读取并合并,后读的文件覆盖先读文件中同网卡的配置。建议把自己的配置放在 99-custom.yaml 之类靠后的名字,避免被其他文件覆盖。

三、动手前:先看清当前网络

在改配置之前,先确认网卡名称和当前地址,避免配错设备导致断网:

# 查看所有网卡及当前 IP
ip addr

# 或更聚焦一点,只看已启用的网卡
ip -brief addr

# 查看当前 DNS 解析情况(Ubuntu 18.04+ 用 systemd-resolved)
resolvectl status

# 查看 Netplan 当前生效配置(渲染结果)
networkctl status

记下你要配置的网卡名(如 ens33enp0s3eth0),下面的示例都以 ens33 为例,请替换成你自己的。

四、配置静态 IP 地址

新建或编辑 /etc/netplan/99-static.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:                      # 替换为你的网卡名
      dhcp4: no                 # 关闭 IPv4 DHCP
      dhcp6: no                 # 关闭 IPv6 DHCP(如不需要)
      addresses:
        - 192.168.1.100/24      # 静态 IPv4 地址/掩码
        # - 2001:db8::100/64   # 如需 IPv6 可加这一行
      routes:
        - to: default
          via: 192.168.1.1      # 网关
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]   # DNS 服务器
        search: [example.com]             # 可选:默认搜索域

说明:

  • addresses 用 CIDR 写法,/24 表示 255.255.255.0 掩码;
  • routes 里的 to: default + via: 网关 是现代写法;旧写法 gateway4: 192.168.1.1 仍可用但新版本会提示弃用,推荐用 routes
  • renderer 桌面环境可改 NetworkManager

五、只配 DNS(保留 DHCP 拿 IP)

如果只是想换 DNS、但 IP 仍然走 DHCP,可以只覆盖 nameservers:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: yes
      nameservers:
        addresses: [223.5.5.5, 119.29.29.29]   # 阿里/腾讯公共 DNS

注意:开启 dhcp4: yes 时,DHCP 下发的 DNS 与你在 nameservers 里写的会合并;若想只用自定义 DNS、丢弃 DHCP 下发的,改用 dhcp4-overrides

      dhcp4: yes
      dhcp4-overrides:
        use-dns: no            # 不使用 DHCP 下发的 DNS
      nameservers:
        addresses: [223.5.5.5, 119.29.29.29]

六、应用配置

语法检查无误后,有两种应用方式:

# 方式一:try 模式(推荐先试)
# 它会临时应用,并等待你 120 秒内确认;超时未确认自动回滚,断网也不怕
sudo netplan try

# 方式二:直接应用
sudo netplan apply

# 如只改了某个文件想重新生成
sudo netplan generate
命令 特点 适用场景
netplan try 应用后需人工确认,超时自动回滚 远程 SSH 操作时最安全
netplan apply 立即生效,无回滚 本地控制台或已确认无误
netplan generate 只生成后端配置不应用 调试配置是否被正确处理

七、验证配置是否生效

# 看 IP 是否已变成静态地址
ip addr show ens33

# 看 DNS 是否生效
resolvectl status ens33
# 或直接查询
resolvectl query example.com

# 测试网络连通与 DNS 解析
ping -c 4 192.168.1.1      # 网关通不通
ping -c 4 8.8.8.8          # 外网通不通
ping -c 4 www.baidu.com    # DNS 解析通不通

八、常见错误与排错

YAML 对缩进极其敏感,必须用空格(不要用 Tab),同级必须对齐。Netplan 报错多半是缩进或冒号后缺空格。

  • 报错 “Invalid YAML”:用 sudo netplan --debug apply 看详细位置;检查是否混用了 Tab、冒号后没空格、列表项少了 -
  • 改完断网无法连接:如果用了 netplan try,等 2 分钟会自动回滚;如果用了 apply 且是远程,需到机器本地控制台修复。
  • cloud-init 覆盖配置:云服务器上的 50-cloud-init.yaml 可能由 cloud-init 重新生成。若要固定配置,编辑 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg 写入 network: {config: disabled} 后再用自己的 Netplan 文件。
  • DNS 没生效:确认 systemd-resolved 在运行(systemctl status systemd-resolved),且 /etc/resolv.conf 是指向 ../run/systemd/resolve/stub-resolv.conf 的软链接,而非被写死的旧文件。

九、完整示例:服务器静态 IP + 双 DNS

# /etc/netplan/99-static.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5, 119.29.29.29]
        search: [lan]

保存后执行 sudo netplan try,确认网络正常后在提示里输入回车确认,配置即永久生效。重启后配置依旧保留。

十、小结

  • Netplan 用 YAML 声明网络,后端交给 networkd / NetworkManager;
  • 配置文件在 /etc/netplan/*.yaml,注意文件名顺序与缩进(空格、对齐);
  • 静态 IP 关键字段:dhcp4: noaddressesroutesnameservers
  • 远程修改务必用 netplan try 防断网;
  • DNS 想抛弃 DHCP 下发的,用 dhcp4-overrides: {use-dns: no}
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容