Ubuntu Netplan 配置永久静态路由实战记录

一次简单的路由配置,解决跨网段访问问题

前言

在维护内网服务器时,经常会遇到需要访问多个网段的情况。默认情况下,服务器只能访问与自己同一网段的设备。今天我就遇到了这样的需求:一台 IP 为 10.0.3.206/16 的 Ubuntu 服务器,需要访问 10.2.0.0/16 网段的设备。

本文将完整记录使用 Netplan 配置永久静态路由的过程,供有类似需求的朋友参考。


环境信息

项目 信息
操作系统 Ubuntu(使用 Netplan 管理网络)
服务器 IP 10.0.3.206/16
网卡接口 enp2s0
目标网段 10.2.0.0/16
下一跳网关 10.0.32.30

网络拓扑简图:

复制代码
[10.2.0.0/16 网段] 
       │
       ▼
[网关 10.0.32.30]
       │
       ▼
[服务器 10.0.3.206/16]  ← 本机

第一步:查看当前路由表

首先确认当前网络状态:

bash 复制代码
ip route

输出如下:

复制代码
10.0.0.0/16 dev enp2s0 proto kernel scope link src 10.0.3.206

可以看到,服务器目前只能访问 10.0.0.0/16 网段,没有到达 10.2.0.0/16 的路由。


第二步:定位 Netplan 配置文件

Netplan 是 Ubuntu 17.10 起引入的网络配置工具,使用 YAML 格式的配置文件。配置文件通常位于 /etc/netplan/ 目录下:

bash 复制代码
ls /etc/netplan/

输出:

复制代码
50-cloud-init.yaml

查看当前配置:

bash 复制代码
sudo cat /etc/netplan/50-cloud-init.yaml

原始配置如下(已做脱敏处理):

yaml 复制代码
network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      dhcp4: no
      addresses: [10.0.3.206/16]
      # routes:
      #   - to: default
      #     via: 10.0.0.2
      # nameservers:
      #   addresses: [114.114.114.114, 8.8.8.8]

可以看到,默认网关和 DNS 都被注释掉了,当前是纯静态 IP 配置。


第三步:添加静态路由

编辑配置文件:

bash 复制代码
sudo nano /etc/netplan/50-cloud-init.yaml

routes: 下添加目标路由(注意 YAML 缩进):

yaml 复制代码
network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      dhcp4: no
      addresses: [10.0.3.206/16]
      routes:
        - to: 10.2.0.0/16
          via: 10.0.32.30
      #   - to: default
      #     via: 10.0.0.2
      # nameservers:
      #   addresses: [114.114.114.114, 8.8.8.8]

关键点

  • to:目标网段,使用 CIDR 格式
  • via:下一跳网关地址,必须与本机 IP 在同一网段
  • 缩进使用空格(Netplan 严格要求),建议用 2 个空格

第四步:应用配置

执行以下命令使配置生效:

bash 复制代码
sudo netplan apply

netplan apply 会:

  1. 验证 YAML 语法
  2. 生成对应的后端配置(如 /run/systemd/network/ 下的文件)
  3. 重启网络服务加载新配置

第五步:验证配置是否生效

查看路由表

bash 复制代码
ip route

现在应该能看到新增的路由条目:

复制代码
10.0.0.0/16 dev enp2s0 proto kernel scope link src 10.0.3.206
10.2.0.0/16 via 10.0.32.30 dev enp2s0 proto static

proto static 表示这是一条手动添加的静态路由。

连通性测试

bash 复制代码
ping 10.2.0.1

成功响应:

复制代码
PING 10.2.0.1 (10.2.0.1) 56(84) bytes of data.
64 bytes from 10.2.0.1: icmp_seq=1 ttl=64 time=0.509 ms
64 bytes from 10.2.0.1: icmp_seq=2 ttl=64 time=0.263 ms
64 bytes from 10.2.0.1: icmp_seq=3 ttl=64 time=0.310 ms
--- 10.2.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss

✅ 路由配置成功!


常见问题与排障

1. 网关不可达

如果添加路由后无法 ping 通目标,首先检查网关是否可达:

bash 复制代码
ping 10.0.32.30

如果网关不通,说明网关地址有误或网络链路有问题。

2. YAML 语法错误

netplan apply 会报语法错误,常见原因:

  • 缩进使用了 Tab 而非空格
  • 冒号后面缺少空格
  • 列表项 - 缩进不对

可以用以下命令检查配置:

bash 复制代码
sudo netplan try

这个命令会测试配置并在 120 秒后自动回滚,防止配置错误导致 SSH 断连。

3. 路由不生效

重启后路由丢失?确认配置在 routes: 下且没有被注释。也可以用以下命令排查:

bash 复制代码
# 查看 Netplan 生成的 systemd-networkd 配置
cat /run/systemd/network/10-netplan-enp2s0.network

# 检查 networkd 状态
systemctl status systemd-networkd

拓展:添加多条路由

如果有多个网段需要访问,继续在 routes: 下追加即可:

yaml 复制代码
routes:
  - to: 10.2.0.0/16
    via: 10.0.32.30
  - to: 172.16.0.0/12
    via: 10.0.32.254
  - to: 192.168.0.0/16
    via: 10.0.32.1

补充:临时路由 vs 永久路由

类型 命令 特点
临时路由 sudo ip route add 10.2.0.0/16 via 10.0.32.30 立即生效,重启后丢失,适合测试
永久路由 写入 /etc/netplan/*.yaml 重启后依然存在,适合生产环境

建议先用临时路由测试连通性,确认无误后再写入配置文件。


总结

在 Ubuntu 中使用 Netplan 配置永久静态路由的核心步骤只有四步:

  1. 查看ip route 确认当前路由表
  2. 编辑 :修改 /etc/netplan/ 下的 YAML 配置文件
  3. 应用sudo netplan apply
  4. 验证ip routeping 测试

整个过程简单直接,但需要注意 YAML 的格式规范。相比传统的 /etc/network/interfaces 方式,Netplan 的配置更加结构化和清晰,适合现代 Linux 运维场景。


参考文献


本文记录于 2026年6月,适用于 Ubuntu 17.10 及以上版本。