一次简单的路由配置,解决跨网段访问问题
前言
在维护内网服务器时,经常会遇到需要访问多个网段的情况。默认情况下,服务器只能访问与自己同一网段的设备。今天我就遇到了这样的需求:一台 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 会:
- 验证 YAML 语法
- 生成对应的后端配置(如
/run/systemd/network/下的文件) - 重启网络服务加载新配置
第五步:验证配置是否生效
查看路由表
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 配置永久静态路由的核心步骤只有四步:
- 查看 :
ip route确认当前路由表 - 编辑 :修改
/etc/netplan/下的 YAML 配置文件 - 应用 :
sudo netplan apply - 验证 :
ip route和ping测试
整个过程简单直接,但需要注意 YAML 的格式规范。相比传统的 /etc/network/interfaces 方式,Netplan 的配置更加结构化和清晰,适合现代 Linux 运维场景。
参考文献
本文记录于 2026年6月,适用于 Ubuntu 17.10 及以上版本。