在实际生产环境中,服务器或工作站常常配备多块网卡,连接不同的网络。例如一块网卡连接内网/校园网提供服务访问,另一块连接外网负责出站流量。本教程将演示如何在 Ubuntu 24.04 桌面版上配置双网卡,移除指定网卡的默认网关,实现所有出站流量走单一网关,同时保留另一网卡的入站访问能力。

教程概述

本教程将带你完成在 Ubuntu 24.04 桌面版上配置双网卡的完整过程。内容包括:

  • 需求分析:理解双网卡流量分离的应用场景
  • 环境检查:查看当前网卡状态和路由表
  • 配置清理:整理混乱的 Netplan 配置文件
  • 统一配置:创建简洁的单文件网络配置
  • 配置加固:通过 NetworkManager 双重保障
  • 特殊场景:MAC 地址绑定获取固定 IP
  • 故障排查:常见问题与解决方案

一、应用场景与需求分析

1. 典型应用场景

场景 说明
校园网/企业网 一块网卡连接校园网提供内部服务,另一块连接外网
服务器双线接入 管理网络与业务网络分离
安全隔离 出站流量必须经过特定网关审计
负载分担 入站服务走高带宽网卡,出站走稳定网卡

2. 本教程目标

以一台配备双有线网卡的 Ubuntu 24.04 工作站为例:

网卡 IP 地址 用途 目标配置
eno1 192.168.5.3/24 主网卡,出站流量 保留默认网关
enp3s0 10.1.7.236/21 校园网,入站服务 移除默认网关

配置后效果:

  • ✅ 所有出站流量仅走 eno1(192.168.5.1 网关)
  • enp3s0 保留 IP 地址,10.1.x.x 网段可入站访问
  • ✅ Docker 等服务仍可通过 10.1.7.236 访问

二、环境检查

1. 系统要求

  • 操作系统:Ubuntu 24.04 LTS 桌面版
  • 权限:需要 root 或 sudo 权限
  • 网络管理:Netplan + NetworkManager(Ubuntu 桌面版默认)

2. 查看网卡状态

1
ip addr show

关键输出(示例):

1
2
3
4
5
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
inet 192.168.5.3/24 brd 192.168.5.255 scope global dynamic noprefixroute eno1

3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
inet 10.1.7.236/21 brd 10.1.7.255 scope global dynamic noprefixroute enp3s0

3. 查看当前路由表

1
ip route show

配置前路由表(问题状态):

1
2
3
4
default via 192.168.5.1 dev eno1 proto dhcp src 192.168.5.3 metric 50 
default via 10.1.0.1 dev enp3s0 proto dhcp src 10.1.7.236 metric 100
10.1.0.0/21 dev enp3s0 proto kernel scope link src 10.1.7.236 metric 100
192.168.5.0/24 dev eno1 proto kernel scope link src 192.168.5.3 metric 50

问题分析:

  • 存在 两个默认网关,虽然 metric 不同会优先走 eno1
  • 但某些情况下流量可能走 enp3s0,不符合安全/管理需求
  • 目标是完全移除 enp3s0 的默认网关

4. 查看现有 Netplan 配置

1
ls -la /etc/netplan/

常见混乱状态:

1
2
3
4
01-network-manager-all.yaml       # 全局 NM 托管
50-cloud-init.yaml # cloud-init 生成
90-NM-6effa1b1-xxxx.yaml # NM 自动生成
90-NM-795cedc0-xxxx.yaml # NM 自动生成

问题:多个配置文件可能导致配置冲突,对于系统洁癖用户来说难以维护。


三、配置方案:统一 Netplan 配置

1. 备份原有配置

1
2
sudo mkdir -p /etc/netplan/backup
sudo cp /etc/netplan/*.yaml /etc/netplan/backup/

命令解释:

  • mkdir -p:创建备份目录(如已存在则不报错)
  • cp *.yaml:备份所有现有配置文件

2. 清理原有配置

1
sudo rm /etc/netplan/*.yaml

命令解释:

  • 删除所有现有配置文件,准备创建统一配置
  • 原配置已备份在 /etc/netplan/backup/ 目录

3. 创建统一配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo tee /etc/netplan/01-netcfg.yaml << 'EOF'
network:
version: 2
renderer: NetworkManager
ethernets:
eno1:
dhcp4: true
dhcp4-overrides:
route-metric: 50
wakeonlan: true
enp3s0:
dhcp4: true
dhcp4-overrides:
use-routes: false
route-metric: 100
EOF

配置详解:

配置项 说明
renderer: NetworkManager 使用 NetworkManager 作为后端(桌面版推荐)
dhcp4: true 启用 DHCP 获取 IP 地址
dhcp4-overrides 覆盖 DHCP 默认行为
route-metric: 50/100 路由优先级,数字越小优先级越高
use-routes: false 关键配置:不接受 DHCP 提供的路由(包括默认网关)
wakeonlan: true 启用网络唤醒功能(可选)

4. 设置配置文件权限

1
sudo chmod 600 /etc/netplan/01-netcfg.yaml

命令解释:

  • 600:仅 root 用户可读写,保护网络配置安全

5. 应用配置

1
sudo netplan apply

可能出现的警告(可忽略):

1
2
systemd-networkd is not running, output might be incomplete.
Falling back to a hard restart of systemd-networkd.service

说明:Ubuntu 桌面版使用 NetworkManager 而非 systemd-networkd,此警告不影响实际功能。

6. 重新激活网络连接

1
2
sudo nmcli connection down "netplan-enp3s0"
sudo nmcli connection up "netplan-enp3s0"

命令解释:

  • 重启 enp3s0 连接以使新配置生效
  • DHCP 将重新获取 IP 地址

7. 验证配置结果

1
ip route show | grep default

配置后路由表(目标状态):

1
default via 192.168.5.1 dev eno1 proto dhcp src 192.168.5.3 metric 50 

成功:只剩一个默认网关,所有出站流量走 eno1。

验证 enp3s0 本地路由保留:

1
ip route show | grep 10.1
1
10.1.0.0/21 dev enp3s0 proto kernel scope link src 10.1.7.236 metric 100 

成功:10.1.0.0/21 本地路由保留,入站访问正常。


四、配置加固:NetworkManager 双重保障

对于 Ubuntu 桌面版,建议额外在 NetworkManager 层面固化配置,防止被 GUI 操作意外覆盖。

1. 检查当前 NM 配置

1
nmcli connection show "netplan-enp3s0" | grep -E "never-default|ignore-auto-routes"

预期输出:

1
2
ipv4.ignore-auto-routes:                是
ipv4.never-default: 是

2. 手动加固(如果未自动同步)

1
2
sudo nmcli connection modify "netplan-enp3s0" ipv4.never-default yes
sudo nmcli connection modify "netplan-enp3s0" ipv4.ignore-auto-routes yes

配置说明:

参数 说明
ipv4.never-default yes 该连接永远不作为默认网关
ipv4.ignore-auto-routes yes 忽略 DHCP 提供的路由信息

3. 双重保障的优势

层级 配置位置 作用
Netplan /etc/netplan/01-netcfg.yaml 系统级配置,重启后生效
NetworkManager 连接配置 运行时配置,防止 GUI 覆盖

五、特殊场景:MAC 地址绑定

场景说明

某些网络环境(如校园网)采用 MAC 地址与 IP 绑定策略,需要指定网卡使用特定 MAC 地址才能获得固定 IP。

配置方法

修改 /etc/netplan/01-netcfg.yaml,添加 macaddress 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
network:
version: 2
renderer: NetworkManager
ethernets:
eno1:
dhcp4: true
dhcp4-overrides:
route-metric: 50
wakeonlan: true
enp3s0:
dhcp4: true
macaddress: "14:5A:FC:23:74:93" # 指定 MAC 地址
dhcp4-overrides:
use-routes: false
route-metric: 100

应用配置:

1
2
3
sudo netplan apply
sudo nmcli connection down "netplan-enp3s0"
sudo nmcli connection up "netplan-enp3s0"

验证 MAC 地址:

1
ip link show enp3s0 | grep ether

预期输出:

1
link/ether 14:5a:fc:23:74:93 brd ff:ff:ff:ff:ff:ff permaddr 1c:83:41:41:c3:9b
  • 14:5a:fc:23:74:93:当前使用的 MAC 地址(已修改)
  • permaddr 1c:83:41:41:c3:9b:网卡原始硬件 MAC 地址

六、故障排查

1. 配置应用后网卡丢失 IP

现象:执行 netplan apply 后,enp3s0 的 IPv4 地址消失。

原因:NetworkManager 连接未正确重新激活。

解决方案

1
2
sudo nmcli connection down "netplan-enp3s0"
sudo nmcli device connect enp3s0

2. 服务无法通过原 IP 访问

现象:Docker 等服务无法通过 10.1.7.236 访问。

可能原因

  1. DHCP 重新分配了不同的 IP 地址
  2. MAC 地址绑定环境下 MAC 地址不匹配

检查步骤

1
ip addr show enp3s0 | grep "inet "

解决方案:如果是 MAC 绑定环境,按第五节配置正确的 MAC 地址。

3. 配置文件语法错误

现象netplan apply 报错退出。

常见错误示例

1
Error in network definition: unknown key 'use-gateway'

解决方案:检查配置文件语法,注意:

  • use-routes: false 是正确的参数(不是 use-gateway
  • YAML 格式对缩进敏感,使用空格不要用 Tab
  • 字符串值建议用引号包裹

验证配置语法:

1
sudo netplan generate

4. 重启后配置丢失

现象:重启系统后路由表恢复为双网关状态。

排查步骤

1
2
3
4
5
# 检查 Netplan 配置是否存在
cat /etc/netplan/01-netcfg.yaml

# 检查 NM 连接配置
nmcli connection show "netplan-enp3s0" | grep -E "never-default|ignore-auto-routes"

解决方案:确保同时配置了 Netplan 和 NetworkManager 加固。

5. 回滚到原始配置

如需恢复原始配置:

1
2
3
sudo rm /etc/netplan/01-netcfg.yaml
sudo mv /etc/netplan/backup/*.yaml /etc/netplan/
sudo netplan apply

七、配置文件完整示例

基础配置(无 MAC 绑定)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: NetworkManager
ethernets:
eno1:
dhcp4: true
dhcp4-overrides:
route-metric: 50
wakeonlan: true
enp3s0:
dhcp4: true
dhcp4-overrides:
use-routes: false
route-metric: 100

完整配置(含 MAC 绑定)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: NetworkManager
ethernets:
eno1:
dhcp4: true
dhcp4-overrides:
route-metric: 50
wakeonlan: true
enp3s0:
dhcp4: true
macaddress: "14:5A:FC:23:74:93"
dhcp4-overrides:
use-routes: false
route-metric: 100

总结

通过本教程,你已经完成了 Ubuntu 24.04 桌面版的双网卡流量分离配置:

🎉 配置成果

  • 出站流量:仅走主网卡 eno1(192.168.5.x 网段)
  • 入站访问:enp3s0 保留 IP,10.1.x.x 网段可正常访问
  • 配置整洁:从多个混乱文件统一为单一配置文件
  • 双重保障:Netplan + NetworkManager 双层配置,重启稳定
  • 备份可用:原配置备份在 /etc/netplan/backup/

🔧 关键配置项

配置项 作用
use-routes: false Netplan 中禁用 DHCP 路由
ipv4.never-default yes NM 中禁止作为默认网关
ipv4.ignore-auto-routes yes NM 中忽略自动路由
macaddress: "xx:xx:xx:xx:xx:xx" 指定 MAC 地址(可选)

📋 快速命令参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看路由表
ip route show

# 查看网卡信息
ip addr show

# 应用 Netplan 配置
sudo netplan apply

# 重启网络连接
sudo nmcli connection down "netplan-enp3s0"
sudo nmcli connection up "netplan-enp3s0"

# 加固 NM 配置
sudo nmcli connection modify "netplan-enp3s0" ipv4.never-default yes
sudo nmcli connection modify "netplan-enp3s0" ipv4.ignore-auto-routes yes

参考资源