Ubuntu 中使用 NetworkManager (nmcli 命令) / netplan (命令行和配置文件) / systemd-networkd 配置网络 创建 / 修改 静态 IP 连接 及 创建 VLAN 子接口Ubuntu 中使用 NetworkManager (nmcli 命令) / netplan (命令行和配置文件) / systemd-networkd 配置网络 创建 / 修改 静态 IP 连接 及 创建 VLAN 子接口Ubuntu 中使用 NetworkManager (nmcli 命令) / netplan (命令行和配置文件) / systemd-networkd 配置网络 创建 / 修改 静态 IP 连接 及 创建 VLAN 子接口Ubuntu 中使用 NetworkManager (nmcli 命令) / netplan (命令行和配置文件) / systemd-networkd 配置网络 创建 / 修改 静态 IP 连接 及 创建 VLAN 子接口
  • 文章
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

Ubuntu 中使用 NetworkManager (nmcli 命令) / netplan (命令行和配置文件) / systemd-networkd 配置网络 创建 / 修改 静态 IP 连接 及 创建 VLAN 子接口

发表 admin at 2025年10月7日
类别
  • 文章
标签
本文主要介绍Ubuntu的网络管理工具,其它 Linux 发行版参考这里。

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:验证配置

  1. 检查接口状态:

    bash
    
    ip a

    确认 ens33 的 IP 地址为 192.168.1.100。

  2. 检查路由表:

    bash
    
    ip route

    确认默认路由指向 192.168.1.1。

  3. 测试连通性:

    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

注意事项

  1. 连接名称:
    • con-name "Static-IP" 可以替换为任意名称(如 ens33-static)。
  2. 网卡名称:
    • 确保 ens33 是正确的网卡名称(通过 ip a 或 nmcli device status 确认)。
  3. 防火墙:
    • 如果使用 ufw 或 iptables,确保允许相关流量。
  4. 持久化:
    • nmcli 配置会自动保存,重启后仍生效。

故障排查

  • 问题:nmcli connection up "Static-IP" 失败。
    • 解决:检查网卡名称是否正确,或尝试重启 NetworkManager:
      bash
      
      sudo systemctl restart 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:验证配置

  1. 检查接口状态:

    bash
    
    ip a

    确认 ens33 的 IP 地址已更新为 192.168.1.100。

  2. 检查路由表:

    bash
    
    ip route

    确认默认路由指向 192.168.1.1。

  3. 测试连通性:

    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

注意事项

  1. 连接名称:
    • 如果连接名称不是 ens33,请替换为实际的连接名称(通过 nmcli connection show 确认)。
  2. 网卡名称:
    • 确保 ens33 是正确的网卡名称(通过 ip a 或 nmcli device status 确认)。
  3. 持久化:
    • nmcli 修改会自动保存,重启后仍生效。
  4. 防火墙:
    • 如果使用 ufw 或 iptables,确保允许相关流量。

故障排查

  • 问题:修改后 IP 未生效。
    • 解决:检查连接名称是否正确,或尝试重启 NetworkManager:
      bash
      
      sudo systemctl restart 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:验证配置

  1. 检查接口状态:

    bash
    
    ip a

    输出应包含 ens33.10(VLAN 子接口),并显示 IP 地址 192.168.10.10。

  2. 检查路由表:

    bash
    
    ip route

    确认默认路由指向 192.168.10.1。

  3. 测试连通性:

    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

注意事项

  1. 物理网卡名称:
    • 确保 ens33 是正确的物理网卡名称(通过 ip a 或 nmcli device status 确认)。
  2. VLAN 支持:
    • 确保物理网卡和交换机支持 802.1Q VLAN 标记。
  3. 交换机配置:
    • 如果 VLAN 10 流量需要出站到外部网络,交换机端口需配置为 Trunk 模式,并允许 VLAN 10 流量通过。
  4. 防火墙:
    • 如果使用 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 提供了一个名为netplan的命令行界面,可使用它来控制 Netplan 配置的某些方面。查看 netplan Netplan CLI。
工具 描述
help 显示通用帮助信息
generate 从/etc/netplan/*.yaml生成特定于后端的配置文件
apply 将当前 Netplan 配置应用到运行中的系统
try 尝试将新的 Netplan 配置应用到运行中的系统,并自动回滚
get 通过指定嵌套键(如 "ethernets.eth0.addresses" 或 "all")获取设置
set 通过指定点分key=value对(如 "ethernets.eth0.dhcp4=true")添加新设置
info 显示可用功能
ip 从系统检索 IP 信息(如 DHCP 租约)
rebind 将给定物理功能的 SR-IOV 虚拟功能重新绑定到其驱动程序
status 查询运行中系统的网络状态

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
Netplan 配置文件

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

请注意,配置文件可以存在于三个不同的位置,其优先级从高到低如下:

  1. /run/netplan/*.yaml
  2. /etc/netplan/*.yaml
  3. /lib/netplan/*.yaml
虽然 Netplan 提供了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

注意事项

  1. YAML 语法:
    • 如果手动编辑 YAML 文件,请确保缩进正确(使用空格,而非制表符)。
    • 冒号后必须有一个空格(如 dhcp4: no)。
  2. 网卡名称:
    • 使用 ip a 或 ls /sys/class/net 确认网卡名称(如 ens33)。
  3. 调试:
    • 如果配置未生效,检查日志:
      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 网关连通性

关键说明

  1. 配置文件命名规则:
    • .network 文件:定义网络配置(IP、网关、DNS)。
    • .netdev 文件:定义虚拟网络设备(如 VLAN、Bridge)。
  2. VLAN 接口命名:
    • 必须为 父接口.VLAN_ID(如 ens33.10)。
  3. DNS 配置:
    • systemd-resolved 默认使用 /etc/systemd/resolved.conf 中的 DNS 配置,但可以在 .network 文件中覆盖。
  4. 多网卡场景:
    • 如果系统有多个网卡,确保 .network 文件的 [Match] 部分唯一匹配目标网卡(如 Name=ens33)。
  5. 日志调试:
    • 查看日志排查问题:
      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-networkd
    • NetworkManager:ArchWiki NetworkManager

2. 使用netplan配置网络:

    • systemd-networkd + netplan: Ubuntu Server documentation Configuring networks
    • NetworkManager + netplan: Ubuntu Core documentation Network Manager How-to guides

类别

  • 文章

Archives

©2015-2025 艾丽卡 support@alaica.com