Netplan简述
Netplan 是一款用于在 Linux 系统上配置网络的程序。属于抽象网络配置描述器。通过Netplan只需要配置一个yaml文件描述网络接口的所需配置即可,无论linux系统采用networkd还是NetworkManager管理网络。Ubuntu18.04及以后版本中默认使用Netplan管理网络。配置文件存放于/etc/netplan/目录下。

配置文件优先级规则
Netplan配置网络时按照字母数字顺序加载所有在/etc/netplan/下的yaml文件。若多个文件定义了相同的网络配置时后加载的配置文件将覆盖前面加载的配置文件,故/etc/netplan/中文件名排序考前的优先级较低(文件名首字母或数字排序靠前),文件名排序较大优先级较高。
文件命名中数字高于字母,即“1”优先于“a”,“03”优先于“05”,“d”优先于“t”
即01-network-manager-all.yaml会优先加载05-network-manager-all.yaml会之后加载。
配置文件规则
netplan版本号说明
首先netplan有两个大版本。版本号<0.103或者版本号≥0.103。旧版本部分配置语法已经弃用,例如:gateway——配置网关的命令已改为routes。
#查看netplan版本命令
sudo apt-cache policy netplan.io

图中可见目前使用的版本为0.106.1
netplan配置文件语法说明
注意:yaml文件严格地要求缩进和符号
- 层级管理中要用两个空格进行缩进,不要用Tab。
- ip地址列表中 – 后面要有一个空格
- : 后面若有文本也要加上一个空格
- IPV6地址要用 “ ” 括起来,(虽然我试过不括也能用)
- 同缩进的关键字无所谓先后,version: 2这种放最后也可以。
- 配置文件有很大的灵活性,同一块网卡可在不通配置文件中配置。
- 不同的网卡也可在一个配置文件中配置。
查看当前网络信息
查看当前网络使用的管理软件NetworkManager或systemd-networkd
sudo systemctl status NetworkManager
sudo systemctl status systemd-networkd
#NetworkManager和networkd虽然可同时运行,但为避免两者冲突,尽量只运行一个。
#停止NetworkManager服务命令如下
sudo systemctl stop NetworkManager
#禁止NetworkManager服务开机启动
sudo systemctl disable NetworkManager
重启networkd服务
sudo systemctl restart systemd-networkd
sudo systemctl status systemd-networkd
看到如下信息表示networkd正在运行

sudo systemctl status systemd-networkd
看到如下信息表示networkd没有运行

查看当前DNS信息
resolvectl status
查看当前网关信息
#查看IPV4默认网关
ip route show default
#查看IPV6默认网关
ip -6 route show default
查看当前网络详细配置(包含DNS信息)
networkctl status
查看当前网络详细信息
ip address
ip address输出结果详情可参阅另一篇文章ip address、ip addr、ip a参数详解
配置文件模板
配置文件语法规则均≥0.103版本
IPv6地址中有无“”均可。
标准静态地址配置文件
network:
version: 2
#选择管理软件,默认是networkd,也可修改为NetworkManager
renderer: networkd
ethernets:
#配置名为eth0的网卡:
eth0:
#配置IP地址:
addresses:
- 10.0.0.2/24
- "2001:xxxx:xxxx:xxxx::2/64"
#配置DNS服务器:
nameservers:
addresses:
- 10.10.10.253
- 8.8.8.8
- "2001:xxxx:xxxx:xxxx::3333/64"
#配置默认网关:
routes:
- to: default
via: 192.168.0.1
via: "2001:xxxx:xxxx:xxxx::xxxx"
DHCP配置文件
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
连接家用wifi配置文件
network:
version: 2
renderer: NetworkManager
wifis:
wlp2s0b1:
dhcp4: yes
access-points:
#输入wifi名
"network_ssid_name":
password: "**********"
networkmanager配置
networkmanager配置和systemd-networkd配置差别很大。ubuntu24.04中默认生成的配置如下:
network:
version: 2
ethernets:
ens160:
renderer: NetworkManager
match: {}
addresses:
nameservers:
addresses:
- 192.168.0.2
dhcp6: true
networkmanager:
uuid: "abcdefgh-aaaa-bbbb-cccc-111111111111"
name: "netplan-ens160"
passthrough:
connection.timestamp: "1766849861"
ipv4.address1: "192.168.0.2/24,192.168.0.1"
ipv4.method: "manual"
ipv6.ip6-privacy: "-1"
proxy._: ""
其中networkmanager中的配置并非属于netplan语法。而是直接透传给networkmanager。networkmanager的配置会覆盖之前netplan的配置。
配置固定IPv6后缀的地址
此配置仅供参考。
注意!由于networkmanager语法中设置了ipv6.method: “auto”,所以netplan语法中的ipv6-address-token: “::100″不会生效。只有networkmanager语法中设置的ipv6.token: “::101” 会生效。
network:
version: 2
ethernets:
ens160:
renderer: NetworkManager
match: {}
addresses:
- "10.0.0.25/24"
nameservers:
addresses:
- 10.0.0.1
#netplan语法,设置一个后缀为::100的IPv6地址。然而此配置中不会生效。
ipv6-address-token: "::100"
#关闭DHCPv6,明确表示使用SLAAC
dhcp6: false
accept-ra: true
networkmanager:
uuid: "febc54dc-e29c-3939-a911-8a11855bd1c8"
name: "netplan-ens160"
passthrough:
connection.timestamp: "1766849861"
ipv4.address1: "10.0.0.25/24,10.0.0.1"
ipv4.method: "manual"
ipv6.ip6-privacy: "2"
# 确保确保获取IPv6地址的方法为自动 (SLAAC)
ipv6.method: "auto"
#networkmanager语法,设置一个后缀固定为"::101"的IPv6地址
ipv6.token: "::101"
proxy._: ""
ipv6.ip6-privacy(ipv6隐私扩展)
- 0:禁用。只有一个固定地址(由 Token 生成),对外访问也用它。
- 1:启用,优先使用固定地址。系统会有临时地址,但默认不用它上网。
- 2:启用,优先使用临时地址。上网用临时地址。
- -1:默认值。在不同的 Linux 发行版中默认行为不同。
更多配置教程请参阅Netplan官方文档:
https://netplan.readthedocs.io/en/stable/netplan-tutorial/#showing-current-netplan-configuration
Netplan命令
#验证配置
#输入此命令后linux临时应用新配置(默认为 120 秒)并等待确认。超过120秒不确认则回滚
sudo netplan try
#应用新的 Netplan 配置
sudo netplan apply
#获取当前netplan配置
netplan get
常见错误
Cannot call Open vSwitch: ovsdb-server.service is not running
#表示ovsdb-server服务没运行。
#需要启动ovsdb-server服务。或安装ovsdb-server服务
#检查ovsdb-server状态
sudo systemctl status ovsdb-server
#启动ovsdb-server
sudo systemctl start ovsdb-server
#设置开机启动
sudo systemctl enable ovsdb-server
unit ovsdb-server.service could not be found
#表示ovsdb-server服务没有安装或正确配置
#检查 Open vSwitch 是否安装
sudo apt list --installed | grep openvswitch
#安装ovsdb-server
sudo apt install openvswitch-switch
#重新配置ovsdb-server
sudo ovs-ctl force-reload-kmod
重置网络配置
若配置出现失败则删除修改后的yaml文件并重启网络。
sudo systemctl restart systemd-networkd
#或者
sudo systemctl restart NetworkManager
Debian11配置Netplan
某些小的vps只能使用Debian,而Debian11默认不采用Netplan,此时需要手动安装。
首先判断Debian11采用哪种网络管理方案
sudo systemctl status NetworkManager
sudo systemctl status systemd-networkd
#若两种方案都没有使用表示debian采用最传统的ifupdown管理网络。
#ifupdown配置文件位于 /etc/network/interfaces。
#里面一般有着默认网关、DNS服务器、IP地址等信息。
#记录下当前的配置文件信息。
cat /etc/network/interfaces
启动systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
#查看systemd-networkd运行状态
sudo systemctl status systemd-networkd
安装Netplan
sudo apt update
sudo apt install netplan.io
#检查netplan版本号
sudo apt-cache policy netplan.io
#部分显示如下,≥0.103就没问题。
netplan.io:
Installed: 0.101-4
Candidate: 0.101-4
#确认网卡名称,一般都是eth0或ens3之类
ip a
修改配置文件
根据之前cat /etc/network/interfaces信息编写配置文件。
注意!由于debian11的netplan版本太老,部分语法无法识别。
#编辑配置文件
vi /etc/netplan/50-network.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.0.0.1/24 # IPv4地址
- 2001:22::1/64 # IPv6地址
routes:
- to: 0.0.0.0/0 # 不要用default
via: 192.0.2.1 # IPv4 网关
- to: ::/0 # 不要用default
via: 2001:db8::1 # IPv6 网关
nameservers:
addresses:
- 8.8.8.8
- 2001:4860:4860::8888
#保存退出
测试配置文件
sudo netplan try
#只要不报错,就会出现倒计时
#确认无误后按下[ENTER]确认
清除旧配置(可选)
#备份旧配置文件
sudo cp /etc/network/interfaces /etc/network/interfaces_back
#卸载ifupdown
#再次强调下,若netplan没有配置好,你可能要重装vps系统。
sudo apt remove ifupdown -y
sudo apt autoremove -y
#卸载完成。