Ubuntu 中使用 NetworkManager (nmcli 命令) / netplan (命令行和配置文件) / systemd-networkd 配置网络 创建 / 修改 静态 IP 连接 及 创建 VLAN 子接口
1. NetworkManager
NetworkManager
是一项系统网络服务,用于管理您的网络设备和连接,并尝试在网络连接可用时保持连接。它可以管理以太网、Wi-Fi、移动宽带 (WWAN) 和 PPPoE 设备,同时还提供与各种 VPN 服务的 VPN 集成。
在Ubuntu Desktop 中,NetworkManager
通过创建 netplan
配置文件来控制系统中的所有网络设备,并在其中将自己设置为默认网络渲染器。
查看 Ubuntu Core documentation Network Manager How-to guides
查看 Projects/NetworkManager
使用 netplan 配置网络
使用 Netplan 命令行,查看这里。 Netplan 配置文件: 以/etc/netplan/01-network-manager-all.yaml
文件为例,配置静态 IP 、默认路由(网关),DNS 和 VLAN:
# cat >/etc/netplan/01-network-manager-all.yaml <<EOF
network:
version: 2
renderer: NetworkManager
ethernets:
NM-bcf5ddbc-bd4a-4aa1-983a-96f501e3c8ba:
renderer: NetworkManager
match:
name: "ens33"
addresses:
- "192.168.1.100/24"
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
routes:
- to: "default"
via: "192.168.1.1"
networkmanager:
uuid: "bcf5ddbc-bd4a-4aa1-983a-96f501e3c8ba"
name: "netplan-ens33"
passthrough:
connection.timestamp: "1750659200"
ethernet._: ""
ipv4.address1: "192.168.1.100/24,192.168.1.1"
ipv4.method: "manual"
ipv6.addr-gen-mode: "default"
ipv6.ip6-privacy: "-1"
proxy._: ""
vlans:
NM-508a3eb5-f6ef-4770-b1b9-a5612f2cc0d4:
renderer: NetworkManager
addresses:
- "192.168.10.10/24"
id: 10
link: "ens33"
networkmanager:
uuid: "508a3eb5-f6ef-4770-b1b9-a5612f2cc0d4"
name: "VLAN10"
passthrough:
ethernet._: ""
vlan.flags: "1"
ipv4.address1: "192.168.10.10/24"
ipv4.method: "manual"
ipv6.addr-gen-mode: "default"
ipv6.ip6-privacy: "-1"
proxy._: ""
EOF
应用配置
bash
sudo netplan apply
验证配置
验证配置,查看这里。 若路由表未刷新,尝试:# 重启 NetworkManager
systemctl restart NetworkManager
# 查看网卡名称
ip link show
# 假设网卡名为 ens33
# 禁用(关闭)网卡
ip link set ens33 down
# 启用(开启)网卡
ip link set ens33 up
通过 netplan
配置文件生成的NetworkManager
配置文件:
通过 netplan
配置文件生成的NetworkManager
配置文件位于/run/NetworkManager/system-connections/
。
- 不要手动修改:由于
/run
目录下的文件是系统或服务自动生成的,因此用户不应该手动修改或删除这些文件。
# ls /run/NetworkManager/system-connections/
lo.nmconnection
netplan-NM-508a3eb5-f6ef-4770-b1b9-a5612f2cc0d3.nmconnection
netplan-NM-bcf5ddbc-bd4a-4aa1-983a-96f501e3c7ba.nmconnection
# cat /run/NetworkManager/system-connections/netplan-NM-bcf5ddbc-bd4a-4aa1-983a-96f501e3c7ba.nmconnection
[connection]
id=netplan-ens33
type=ethernet
uuid=bcf5ddbc-bd4a-4aa1-983a-96f501e3c7ba
interface-name=ens33
#Netplan: passthrough setting
timestamp=1750659200
[ethernet]
wake-on-lan=0
[ipv4]
method=manual
#Netplan: passthrough override
address1=192.168.1.100/24,192.168.1.1
dns=8.8.8.8;8.8.4.4;
route1=0.0.0.0/0,192.168.1.1
[ipv6]
method=ignore
#Netplan: passthrough setting
addr-gen-mode=default
[proxy]
# cat /run/NetworkManager/system-connections/netplan-NM-508a3eb5-f6ef-4770-b1b9-a5612f2cc0d3.nmconnection
[connection]
id=VLAN10
type=vlan
uuid=508a3eb5-f6ef-4770-b1b9-a5612f2cc0d3
[vlan]
id=10
parent=ens33
#Netplan: passthrough setting
flags=1
[ipv4]
method=manual
address1=192.168.10.10/24
[ipv6]
method=ignore
#Netplan: passthrough setting
addr-gen-mode=default
[ethernet]
[proxy]
使用 nmcli
配置静态 IP 和 VLAN 子接口
nmcli
是一个用于控制 NetworkManager
和报告网络状态的命令行工具。它可以用作 nm-applet
或其他图形客户端的替代品。nmcli
用于创建、显示、编辑、删除、激活和禁用网络连接,以及控制和显示网络设备状态。请参阅 nmcli
(1), nmtui
(1), nmcli-examples
(5)
nmcli
如何创建新的静态 IP 连接、修改现有连接的静态 IP 地址以及创建 VLAN 子接口。
创建新的静态 IP 连接
以下是基于物理网卡名称 ens33
的完整 nmcli
命令,用于配置静态 IP 地址:
目标
- 网卡:
ens33
- 静态 IP:
192.168.1.100/24
- 网关:
192.168.1.1
- DNS:
8.8.8.8
和8.8.4.4
步骤 1:删除现有连接(可选)
如果 ens33
已有配置,可以先删除旧连接:
bash
sudo nmcli connection delete "ens33" # 如果连接名称是默认的 "ens33"
步骤 2:创建新的静态 IP 连接
bash
sudo nmcli connection add type ethernet con-name "Static-IP" ifname ens33 ipv4.addresses "192.168.1.100/24" ipv4.gateway "192.168.1.1" ipv4.dns "8.8.8.8 8.8.4.4" ipv4.method manual
- 参数说明:
type ethernet
:指定连接类型为以太网。con-name "Static-IP"
:连接名称(可自定义)。ifname ens33
:绑定到网卡ens33
。ipv4.addresses "192.168.1.100/24"
:静态 IP 和子网掩码。ipv4.gateway "192.168.1.1"
:默认网关。ipv4.dns "8.8.8.8 8.8.4.4"
:DNS 服务器。ipv4.method manual
:启用手动配置 IP。
步骤 3:启用连接
bash
sudo nmcli connection up "Static-IP"
步骤 4:验证配置
-
检查接口状态:
bash ip a
确认
ens33
的 IP 地址为192.168.1.100
。 -
检查路由表:
bash ip route
确认默认路由指向
192.168.1.1
。 -
测试连通性:
bash ping 192.168.1.1 # 测试与网关的连通性 ping 8.8.8.8 # 测试外网访问
完整命令示例
bash
# 1. 删除现有连接(可选)
sudo nmcli connection delete "ens33"
# 2. 创建静态 IP 连接
sudo nmcli connection add type ethernet con-name "Static-IP" ifname ens33 ipv4.addresses "192.168.1.100/24" ipv4.gateway "192.168.1.1" ipv4.dns "8.8.8.8 8.8.4.4" ipv4.method manual
# 3. 启用连接
sudo nmcli connection up "Static-IP"
# 4. 验证配置
ip a
ip route
ping 192.168.1.1
ping 8.8.8.8
注意事项
- 连接名称:
con-name "Static-IP"
可以替换为任意名称(如ens33-static
)。
- 网卡名称:
- 确保
ens33
是正确的网卡名称(通过ip a
或nmcli device status
确认)。
- 确保
- 防火墙:
- 如果使用
ufw
或iptables
,确保允许相关流量。
- 如果使用
- 持久化:
nmcli
配置会自动保存,重启后仍生效。
故障排查
- 问题:
nmcli connection up "Static-IP"
失败。- 解决:检查网卡名称是否正确,或尝试重启 NetworkManager:
bash sudo systemctl restart NetworkManager
- 解决:检查网卡名称是否正确,或尝试重启 NetworkManager:
- 问题:无法访问外网。
- 解决:确认网关
192.168.1.1
是否可达,检查物理连接和交换机配置。
- 解决:确认网关
通过以上步骤,你可以成功为 ens33
配置静态 IP 地址。
修改现有连接的静态 IP 地址
以下是基于物理网卡名称 ens33
的完整 nmcli
命令,用于修改现有连接的静态 IP 地址配置(假设连接名称已存在,例如默认的 ens33
或其他自定义名称):
目标
- 网卡:
ens33
- 修改为静态 IP:
192.168.1.100/24
- 网关:
192.168.1.1
- DNS:
8.8.8.8
和8.8.4.4
步骤 1:确认现有连接名称
首先,确认 ens33
的当前连接名称:
bash
nmcli connection show
输出示例:
NAME UUID TYPE DEVICE
ens33 1a2b3c4d-5e6f-7g8h-9i0j-k1l2m3n4o5p6 ethernet ens33
假设连接名称为 ens33
。
步骤 2:修改静态 IP 配置
使用 nmcli
修改连接的 IP 地址、网关和 DNS:
bash
sudo nmcli connection modify "ens33" ipv4.addresses "192.168.1.100/24"
sudo nmcli connection modify "ens33" ipv4.gateway "192.168.1.1"
sudo nmcli connection modify "ens33" ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify "ens33" ipv4.method manual
- 参数说明:
ipv4.addresses "192.168.1.100/24"
:设置静态 IP 和子网掩码。ipv4.gateway "192.168.1.1"
:设置默认网关。ipv4.dns "8.8.8.8 8.8.4.4"
:设置 DNS 服务器。ipv4.method manual
:确保使用手动配置(而非 DHCP)。
步骤 3:重新激活连接
应用更改并重新激活连接:
bash
sudo nmcli connection down "ens33"
sudo nmcli connection up "ens33"
或直接重启 NetworkManager:
bash
sudo systemctl restart NetworkManager
步骤 4:验证配置
-
检查接口状态:
bash ip a
确认
ens33
的 IP 地址已更新为192.168.1.100
。 -
检查路由表:
bash ip route
确认默认路由指向
192.168.1.1
。 -
测试连通性:
bash ping 192.168.1.1 # 测试与网关的连通性 ping 8.8.8.8 # 测试外网访问
完整命令示例
bash
# 1. 确认连接名称(假设为 ens33)
nmcli connection show
# 2. 修改静态 IP 配置
sudo nmcli connection modify "ens33" ipv4.addresses "192.168.1.100/24"
sudo nmcli connection modify "ens33" ipv4.gateway "192.168.1.1"
sudo nmcli connection modify "ens33" ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify "ens33" ipv4.method manual
# 3. 重新激活连接
sudo nmcli connection down "ens33"
sudo nmcli connection up "ens33"
# 4. 验证配置
ip a
ip route
ping 192.168.1.1
ping 8.8.8.8
注意事项
- 连接名称:
- 如果连接名称不是
ens33
,请替换为实际的连接名称(通过nmcli connection show
确认)。
- 如果连接名称不是
- 网卡名称:
- 确保
ens33
是正确的网卡名称(通过ip a
或nmcli device status
确认)。
- 确保
- 持久化:
nmcli
修改会自动保存,重启后仍生效。
- 防火墙:
- 如果使用
ufw
或iptables
,确保允许相关流量。
- 如果使用
故障排查
- 问题:修改后 IP 未生效。
- 解决:检查连接名称是否正确,或尝试重启 NetworkManager:
bash sudo systemctl restart NetworkManager
- 解决:检查连接名称是否正确,或尝试重启 NetworkManager:
- 问题:无法访问外网。
- 解决:确认网关
192.168.1.1
是否可达,检查物理连接和交换机配置。
- 解决:确认网关
通过以上步骤,你可以成功修改 ens33
的静态 IP 地址配置。
创建 VLAN 子接口
以下是基于物理网卡名称 ens33
的完整 nmcli
配置步骤,用于创建 VLAN 10 子接口,并设置 IP 地址 192.168.10.10/24
和网关 192.168.10.1
:
步骤 1:创建 VLAN 子接口
bash
sudo nmcli connection add type vlan con-name "VLAN10" id 10 dev ens33
- 参数说明:
type vlan
:指定连接类型为 VLAN。con-name "VLAN10"
:连接名称(可自定义)。id 10
:VLAN ID(此处为 10)。dev ens33
:绑定到物理网卡ens33
。
步骤 2:配置静态 IP 地址和网关
bash
sudo nmcli connection modify "VLAN10" ipv4.addresses "192.168.10.10/24"
sudo nmcli connection modify "VLAN10" ipv4.gateway "192.168.10.1"
sudo nmcli connection modify "VLAN10" ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify "VLAN10" ipv4.method manual
- 参数说明:
ipv4.addresses "192.168.10.10/24"
:设置静态 IP 和子网掩码。ipv4.gateway "192.168.10.1"
:设置默认网关。ipv4.dns "8.8.8.8 8.8.4.4"
:设置 DNS 服务器(可选)。ipv4.method manual
:启用手动配置 IP。
步骤 3:启用 VLAN 连接
bash
sudo nmcli connection up "VLAN10"
步骤 4:验证配置
-
检查接口状态:
bash ip a
输出应包含
ens33.10
(VLAN 子接口),并显示 IP 地址192.168.10.10
。 -
检查路由表:
bash ip route
确认默认路由指向
192.168.10.1
。 -
测试连通性:
bash ping 192.168.10.1 # 测试与网关的连通性 ping 8.8.8.8 # 测试外网访问(需确保网关和 DNS 配置正确)
完整命令示例
bash
# 1. 创建 VLAN 子接口(绑定到 ens33,VLAN ID 10)
sudo nmcli connection add type vlan con-name "VLAN10" id 10 dev ens33
# 2. 配置静态 IP、网关和 DNS
sudo nmcli connection modify "VLAN10" ipv4.addresses "192.168.10.10/24"
sudo nmcli connection modify "VLAN10" ipv4.gateway "192.168.10.1"
sudo nmcli connection modify "VLAN10" ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify "VLAN10" ipv4.method manual
# 3. 启用 VLAN 连接
sudo nmcli connection up "VLAN10"
# 4. 验证配置
ip a
ip route
ping 192.168.10.1
ping 8.8.8.8
注意事项
- 物理网卡名称:
- 确保
ens33
是正确的物理网卡名称(通过ip a
或nmcli device status
确认)。
- 确保
- VLAN 支持:
- 确保物理网卡和交换机支持 802.1Q VLAN 标记。
- 交换机配置:
- 如果 VLAN 10 流量需要出站到外部网络,交换机端口需配置为 Trunk 模式,并允许 VLAN 10 流量通过。
- 防火墙:
- 如果使用
ufw
或iptables
,需允许 VLAN 子接口的流量。
- 如果使用
故障排查
- 问题:
nmcli connection up "VLAN10"
失败。- 解决:检查物理网卡
ens33
是否已连接(nmcli device status
)。
- 解决:检查物理网卡
- 问题:无法访问外网。
- 解决:确认网关
192.168.10.1
是否可达,检查 OpenWrt 的 VLAN 10 配置是否正确。
- 解决:确认网关
通过以上步骤,你可以成功在 Ubuntu 中配置 VLAN 10 子接口并分配 IP 地址。
使用NetworkManager
配置文件配置网络
修改或创建位于/etc/NetworkManager/system-connections/
的NetworkManager
配置文件,内容参考通过 netplan
配置文件生成的NetworkManager
配置文件。
2. systemd-networkd
systemd-networkd
是 systemd
提供的轻量级网络管理工具,适用于静态 IP、VLAN、Bridge 等基础网络配置,是 Ubuntu Server 默认的网络管理工具之一。
systemd-networkd
无 GUI,依赖配置文件(.network
、.netdev
),资源占用低(相比 NetworkManager
或传统 ifupdown
)。与 systemd-resolved
集成,内置 DNS 解析服务,支持 .network
文件中直接配置 DNS。
在 Ubuntu Server 中, systemd-networkd
通过 netplan
配置文件来控制系统网络设备,并在其中将自己设置为默认网络渲染器。
以下是使用 netplan
配置静态 IP 和 VLAN 子接口的配置步骤:
使用 netplan 配置网络
Netplan 命令行netplan set
命令的用法
netplan set [key=value]
会将给定的键值对或 YAML 子树写入 /etc/netplan/
目录下的 YAML 文件中,并验证其格式。
可以指定单个值,例如:"[network.]ethernets.eth0.addresses=[1.2.3.4/24,5.6.7.8/24]"
,或者指定完整的子树,例如:"[network.]ethernets.eth0={dhcp4:true,dhcp6:true}"
。
1. 设置键值对
- 语法:
bash sudo netplan set [network.]<path>=<value>
- 示例:
这会将bash sudo netplan set ethernets.ens33.addresses=192.168.1.231/24
ens33
网卡的 IP 地址设置为192.168.1.231/24
。
2. 删除键值对
- 语法:
bash sudo netplan set [network.]<path>=NULL
- 示例:
这会从配置中移除bash sudo netplan set ethernets.ens33.addresses=NULL
addresses
字段。
3. 设置完整的 YAML 子树
- 语法:
bash sudo netplan set [network.]<path>='{<key>: <value>, ...}'
- 示例:
这会一次性设置bash sudo netplan set ethernets.ens33='{dhcp4: no, addresses: [192.168.1.231/24], routes: [{to: default, via: 192.168.1.1}], nameservers: {addresses: [8.8.8.8, 8.8.4.4]}}'
ens33
网卡的所有网络参数。
示例:配置静态 IP 、默认路由(网关),DNS 和 VLAN
步骤 1:设置静态 IP 和子网掩码
bash
sudo netplan set ethernets.ens33.addresses=192.168.1.231/24
步骤 2:禁用 DHCP
bash
sudo netplan set ethernets.ens33.dhcp4=no
步骤 4:设置默认路由
bash
sudo netplan set ethernets.ens33.routes='[{to: default, via: 192.168.1.1}]'
步骤 5:设置 DNS 服务器
bash
sudo netplan set ethernets.ens33.nameservers.addresses='[8.8.8.8, 8.8.4.4]'
配置将写入/etc/netplan/
目录下的 YAML
配置文件,例如 50-cloud-init.yaml
bash
# ls /etc/netplan/
50-cloud-init.yaml
# cat /etc/netplan/50-cloud-init.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- "192.168.1.231/24"
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
routes:
- to: "default"
via: "192.168.1.1"
步骤 6:设置 VLAN
bash
sudo netplan set vlans.vlan10='{link: ens33, id: 10, addresses: [192.168.10.10/24]}'
这将在/etc/netplan/
目录下生成VLAN的 YAML
配置文件,例如70-netplan-set.yaml
bash
# ls /etc/netplan/
50-cloud-init.yaml 70-netplan-set.yaml
# cat /etc/netplan/70-netplan-set.yaml
network:
version: 2
vlans:
vlan10:
addresses:
- "192.168.10.10/24"
id: 10
link: "ens33"
步骤 6:查看并应用配置
查看配置
bash
# netplan get all
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- "192.168.1.231/24"
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
routes:
- to: "default"
via: "192.168.1.1"
vlans:
vlan10:
addresses:
- "192.168.10.10/24"
id: 10
link: "ens33"
应用配置
bash
sudo netplan apply
验证配置
- 检查 IP 地址和路由是否生效:
bash
# netplan status Online state: online DNS Addresses: 127.0.0.53 (stub) DNS Search: . ● 1: lo ethernet UNKNOWN/UP (unmanaged) MAC Address: 00:00:00:00:00:00 Addresses: 127.0.0.1/8 ::1/128 ● 2: ens33 ethernet UP (networkd: ens33) MAC Address: 00:50:56:22:77:8c (Intel Corporation) Addresses: 192.168.1.231/24 fe80::250:56ff:fe22:778c/64 (link) DNS Addresses: 8.8.8.8 8.8.4.4 Routes: default via 192.168.1.1 (static) 192.168.1.0/24 from 192.168.1.237 (link) fe80::/64 metric 256 ● 3: vlan10 vlan UP (networkd: vlan10) MAC Address: 00:50:56:22:77:8c Addresses: 192.168.10.10/24 fe80::250:56ff:fe22:778c/64 (link) Routes: 192.168.10.0/24 from 192.168.10.10 (link) fe80::/64 metric 256 # networkctl status ● Interfaces: 2, 3, 1 State: routable Online state: online Address: 192.168.1.231 on ens33 192.168.10.10 on vlan10 fe80::250:56ff:fe22:778c on ens33 fe80::250:56ff:fe22:778c on vlan10 Gateway: 192.168.1.1 on ens33 DNS: 8.8.8.8 8.8.4.4 Jun 23 07:15:25 ubuntu-s-vm systemd-networkd[661]: ens33: Configuring with /run/systemd/network/10-netplan-ens33.network. Jun 23 07:15:25 ubuntu-s-vm systemd-networkd[661]: ens33: DHCPv6 lease lost Jun 23 07:52:00 ubuntu-s-vm systemd-networkd[661]: vlan10: Reconfiguring with /run/systemd/network/10-netplan-vlan10.network. Jun 23 07:52:00 ubuntu-s-vm systemd-networkd[661]: vlan10: DHCPv6 lease lost Jun 23 07:52:01 ubuntu-s-vm systemd-networkd[661]: ens33: Reconfiguring with /run/systemd/network/10-netplan-ens33.network. Jun 23 07:52:01 ubuntu-s-vm systemd-networkd[661]: ens33: DHCPv6 lease lost Jun 23 07:52:01 ubuntu-s-vm systemd-networkd[661]: ens33: Configuring with /run/systemd/network/10-netplan-ens33.network. Jun 23 07:52:01 ubuntu-s-vm systemd-networkd[661]: ens33: DHCPv6 lease lost Jun 23 07:52:01 ubuntu-s-vm systemd-networkd[661]: vlan10: Configuring with /run/systemd/network/10-netplan-vlan10.network. Jun 23 07:52:01 ubuntu-s-vm systemd-networkd[661]: vlan10: DHCPv6 lease lost # ip a show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:50:56:22:77:8c brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 192.168.1.237/24 brd 192.168.1.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe22:778c/64 scope link valid_lft forever preferred_lft forever 3: vlan10@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:50:56:22:77:8c brd ff:ff:ff:ff:ff:ff inet 192.168.10.10/24 brd 192.168.10.255 scope global vlan10 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe22:778c/64 scope link valid_lft forever preferred_lft forever # ip route show default via 192.168.1.1 dev ens33 proto static 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.231 192.168.10.0/24 dev vlan10 proto kernel scope link src 192.168.10.10 # resolvectl status Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub Link 2 (ens33) Current Scopes: DNS Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 8.8.8.8 DNS Servers: 8.8.8.8 8.8.4.4 Link 3 (vlan10) Current Scopes: none Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
- 测试网络连通性:
bash ping 8.8.8.8
Ubuntu 中的初始设置
当安装 Ubuntu 或使用 Ubuntu 的云镜像时,根据所使用的渲染器(NetworkManager
或 systemd-networkd
),会在 /etc/netplan
目录下出现一个文件。以下是各种类型的细分:
安装类型 | 渲染器 | 文件 |
---|---|---|
服务器 ISO | systemd-networkd |
/etc/netplan/01-netcfg.yaml |
云镜像 | systemd-networkd |
/etc/netplan/50-cloud-init.yaml |
桌面 ISO | NetworkManager |
/etc/netplan/01-network-manager-all.yaml |
请注意,配置文件可以存在于三个不同的位置,其优先级从高到低如下:
/run/netplan/*.yaml
/etc/netplan/*.yaml
/lib/netplan/*.yaml
netplan
命令行界面,但是直接创建或修改netplan
配置文件是更常用的方式。查看 netplan
How-to guides
编辑netplan
配置文件
以 /etc/netplan/50-cloud-init.yaml
文件为例,配置静态 IP 、默认路由(网关),DNS 和 VLAN:
# cat >/etc/netplan/50-cloud-init.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- "192.168.1.231/24"
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
routes:
- to: "default"
via: "192.168.1.1"
vlans:
vlan10:
addresses:
- "192.168.10.10/24"
id: 10
link: "ens33"
EOF
应用配置
bash
sudo netplan apply
通过 netplan
配置文件生成的systemd-networkd
配置文件:
通过 netplan
配置文件生成的systemd-networkd
配置文件位于/run/systemd/network/
。
- 不要手动修改:由于
/run
目录下的文件是系统或服务自动生成的,因此用户不应该手动修改或删除这些文件。
# ls /run/systemd/network/
10-netplan-ens33.network 10-netplan-vlan10.netdev 10-netplan-vlan10.network
# cat /run/systemd/network/10-netplan-ens33.network
[Match]
Name=ens33
[Network]
LinkLocalAddressing=ipv6
Address=192.168.1.231/24
DNS=8.8.8.8
DNS=8.8.4.4
VLAN=vlan10
[Route]
Destination=0.0.0.0/0
Gateway=192.168.1.1
# cat /run/systemd/network/10-netplan-vlan10.netdev
[NetDev]
Name=vlan10
Kind=vlan
[VLAN]
Id=10
# cat /run/systemd/network/10-netplan-vlan10.network
[Match]
Name=vlan10
[Network]
LinkLocalAddressing=ipv6
Address=192.168.10.10/24
ConfigureWithoutCarrier=yes
注意事项
- YAML 语法:
- 如果手动编辑 YAML 文件,请确保缩进正确(使用空格,而非制表符)。
- 冒号后必须有一个空格(如
dhcp4: no
)。
- 网卡名称:
- 使用
ip a
或ls /sys/class/net
确认网卡名称(如ens33
)。
- 使用
- 调试:
- 如果配置未生效,检查日志:
bash journalctl -u systemd-networkd # 如果使用 networkd journalctl -u NetworkManager # 如果使用 NetworkManager
- 如果配置未生效,检查日志:
以下是直接使用systemd-networkd
配置静态 IP 和 VLAN 子接口的配置步骤:
使用 systemd-networkd
配置静态 IP 和 VLAN 子接口
编辑或创建位于 /etc/systemd/network/
的 systemd-networkd
配置文件,内容可参考通过 netplan
配置文件生成的systemd-networkd
配置文件。
下面是详细的systemd-networkd
配置文件修改说明:
1. 配置静态 IP(网卡:ens33)
步骤 1:禁用 NetworkManager
(可选)
如果系统同时运行 NetworkManager
和 systemd-networkd
,可能会冲突。建议禁用 NetworkManager
:
bash
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
步骤 2:启用 systemd-networkd
和 systemd-resolved
bash
sudo systemctl enable systemd-networkd systemd-resolved
sudo systemctl start systemd-networkd systemd-resolved
步骤 3:创建静态 IP 配置文件
编辑或创建 /etc/systemd/network/ens33.network
文件:
ini
[Match]
Name=ens33
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
Domains=~. # 可选:指定默认域名搜索列表
步骤 4:重启网络服务
bash
sudo systemctl restart systemd-networkd
验证配置
bash
ip addr show ens33 # 检查 IP 地址
ip route show # 检查网关
systemd-resolve --status # 检查 DNS
2. 配置 VLAN 子接口(ens33.10)
步骤 1:启用 VLAN 模块(如果未加载)
bash
sudo modprobe 8021q # 加载 VLAN 模块
echo "8021q" | sudo tee -a /etc/modules # 永久生效
步骤 2:创建 VLAN 配置文件
编辑或创建 /etc/systemd/network/ens33-vlan10.network
文件:
ini
[Match]
Name=ens33.10 # VLAN 接口名称(格式:父接口.VLAN_ID)
[Network]
Address=192.168.10.10/24
Gateway=192.168.10.1 # 可选:如果 VLAN 有独立网关
DNS=8.8.8.8
DNS=8.8.4.4
步骤 3:创建 VLAN 链路配置文件
编辑或创建 /etc/systemd/network/ens33-vlan10.netdev
文件:
ini
[NetDev]
Name=ens33.10
Kind=vlan
[VLAN]
Id=10 # VLAN ID
步骤 4:重启网络服务
bash
sudo systemctl restart systemd-networkd
验证 VLAN 配置
bash
ip addr show ens33.10 # 检查 VLAN 接口
ip route show # 检查路由表
ping 192.168.10.1 # 测试 VLAN 网关连通性
关键说明
- 配置文件命名规则:
.network
文件:定义网络配置(IP、网关、DNS)。.netdev
文件:定义虚拟网络设备(如 VLAN、Bridge)。
- VLAN 接口命名:
- 必须为
父接口.VLAN_ID
(如ens33.10
)。
- 必须为
- DNS 配置:
systemd-resolved
默认使用/etc/systemd/resolved.conf
中的DNS
配置,但可以在.network
文件中覆盖。
- 多网卡场景:
- 如果系统有多个网卡,确保
.network
文件的[Match]
部分唯一匹配目标网卡(如Name=ens33
)。
- 如果系统有多个网卡,确保
- 日志调试:
- 查看日志排查问题:
bash journalctl -u systemd-networkd -b
- 查看日志排查问题:
完整配置示例
目录结构
/etc/systemd/network/
├── ens33.network # 静态 IP 配置
├── ens33-vlan10.netdev # VLAN 接口定义
└── ens33-vlan10.network # VLAN 静态 IP 配置
ens33.network
ini
[Match]
Name=ens33
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
ens33-vlan10.netdev
ini
[NetDev]
Name=ens33.10
Kind=vlan
[VLAN]
Id=10
ens33-vlan10.network
ini
[Match]
Name=ens33.10
[Network]
Address=192.168.10.10/24
DNS=8.8.8.8
DNS=8.8.4.4
通过以上步骤,您可以成功使用 systemd-networkd
配置静态 IP 和 VLAN 子接口。如果需要更复杂的网络场景(如多 VLAN、Bridge),可以进一步扩展 .netdev
和 .network
文件。
参考文档:
1. 直接使用systemd-networkd
或 NetworkManager
配置网络:
-
systemd-networkd
:ArchWiki systemd-networkdNetworkManager
:ArchWiki NetworkManager
2. 使用netplan
配置网络:
-
systemd-networkd
+
netplan
: Configuring networksNetworkManager
+
netplan
: Network Manager How-to guides