文章目录
- 安装
- netplan工作原理
- netplan -h
- 原
- 翻译
- 命令释义
- - `help`:显示netplan的帮助消息。
- - `apply`:将当前netplan配置应用到运行系统。示例命令:`netplan apply --debug`
- - `generate`:从`/etc/netplan/*.yaml`生成特定于后端的配置文件。示例命令:`netplan generate`(一般用不到)
- - `get`:通过指定嵌套键(如`ethernets.eth0.addresses`或`all`)获取设置。示例命令:`netplan get ethernets.eth0.addresses`(注意:这个命令是从`/etc/netplan`中的yaml文件获取合并的网络信息,而不是当前已生效的网络信息)
- - `info`:显示可用功能。示例命令:`netplan info`
- - `ip`:从系统中检索IP信息。示例命令:`netplan ip`
- - `set`:通过指定点分键值对(如`ethernets.eth0.dhcp4=true`)添加新设置。示例命令:`netplan set ethernets.eth0.dhcp4=true`
- netplan set -h
- 示例
- 设置dhcp4用yes或no,true和false都可以
- 设置gateway4
- 使用set命令如果指定.yaml文件没有,会自动生成.yaml文件;如果加上`--root-dir`参数,还能修改/etc/netplan的根目录,比如加上`--root-dir /ky`,就能修改`/ky/etc/netplan`下的.yaml文件(前提是`/ky/etc/netplan`目录存在才行)
- 修改addresses(这是个数组,要用数组`[]`的方式修改)
- 另外,netplan set命令貌似还有记忆上次修改文件的功能,就是如果不用`--origin-hint`指定修改文件,则默认修改上次修改的文件
- 不同的yaml文件可以对同一个网口做设置,用netplan get可获取合并信息,但是可能存在冲突情况,有的会自动解决冲突,有的不会
- - `rebind`:将给定物理功能的SR-IOV虚拟函数重新绑定到其驱动程序。示例命令:`netplan rebind`(一般用不到)
- - `try`:尝试将新的netplan配置应用到运行系统,自动回滚。示例命令:`netplan try`
- 配置示例1:动态ip
- 配置示例2:固定ip
- 配置示例2:禁用ipv6
- 其他疑问
- NetworkManager和netplan有何区别?
- 为什么/etc/netplan/01-network-manager-all.yaml中有renderer: NetworkManager字样,netplan依赖于networkMananger吗?
- 那为什么用户不直接用NetworkManager配置网络?
- 那netplan有提供一些函数接口来修改网络配置吗,还是只能修改yaml配置文件?
- 使用netplan修改ubuntu20.04的固定ip,需要在配置文件里,填写哪些参数?
- 如何检查netplan是否有网络配置权力?`netplan --debug generate`
- 如何让netplan放弃ip网络配置权力?
- 注意:即使不执行netplan apply,系统重启后,也会根据/etc/netplan下的.yaml文件内容,来配置网络
安装
Netplan是Ubuntu 18.04和更高版本的默认网络管理工具,通常在Ubuntu 上已自带。可以通过以下命令检查是否已经安装:
netplan --version
如果出于某种原因没有安装netplan,可以使用以下命令进行安装:
sudo apt update
sudo apt install netplan.io
然后,你可以使用netplan apply
命令来应用任何网络配置更改。所有的网络配置文件都位于/etc/netplan/
目录中,并使用YAML格式编写。
注意:尽管netplan
取代了ifupdown
和NetworkManager
作为默认的网络管理工具,但是在一些情况下,你可能还需要使用这些工具,例如,在使用某些VPN时。
netplan工作原理
Netplan是一个用于配置Linux系统网络的工具。它的工作原理如下:
-
配置文件:Netplan使用YAML格式的配置文件来定义网络配置。默认情况下,配置文件位于
/etc/netplan/
目录下,以.yaml
为后缀。可以创建多个配置文件,每个文件对应一个网络配置。 -
渲染器:Netplan使用渲染器来将配置文件转换为实际的网络配置。渲染器是根据操作系统的不同而不同的。在Ubuntu 18.04及更高版本中,默认的渲染器是
systemd-networkd
,也可以选择使用NetworkManager
作为渲染器。 -
渲染过程:当系统启动时,Netplan会读取配置文件,并使用相应的渲染器将配置应用到系统中。渲染器会根据配置文件中的内容生成相应的网络配置文件,然后重新加载网络服务以应用新的配置。
-
更新配置:如果需要更改网络配置,可以编辑配置文件并保存。然后使用
netplan apply
命令来重新应用配置。Netplan会检测到配置文件的更改,并使用相应的渲染器来更新网络配置。
总结起来,Netplan通过配置文件和渲染器的配合工作,实现了对Linux系统网络配置的管理和应用。它提供了一种简单且统一的方式来配置网络,使得网络配置更加易于管理和维护。
netplan -h
官网介绍:https://netplan.readthedocs.io/en/stable/cli/
CLI命令行接口:
原
root@arnold-virtual-machine:~# netplan -h
usage: /usr/sbin/netplan [-h] [--debug] ...
Network configuration in YAML
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
Available commands:
help Show this help message
apply Apply current netplan config to running system
generate Generate backend specific configuration files from /etc/netplan/*.yaml
get Get a setting by specifying a nested key like "ethernets.eth0.addresses", or "all"
info Show available features
ip Retrieve IP information from the system
set Add new setting by specifying a dotted key=value pair like ethernets.eth0.dhcp4=true
rebind Rebind SR-IOV virtual functions of given physical functions to their driver
try Try to apply a new netplan config to running system, with automatic rollback
root@arnold-virtual-machine:~#
翻译
root@arnold-virtual-machine:~# netplan -h
用法:/usr/sbin/netplan [-h] [--debug] ...
YAML格式的网络配置
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
可用命令:
help 显示此帮助消息
apply 将当前netplan配置应用到运行系统
generate 从/etc/netplan/*.yaml生成特定于后端的配置文件
get 通过指定嵌套键(如"ethernets.eth0.addresses"或"all")获取设置
info 显示可用功能
ip 从系统中检索IP信息
set 通过指定点分键值对(如ethernets.eth0.dhcp4=true)添加新设置
rebind 将给定物理功能的SR-IOV虚拟函数重新绑定到其驱动程序
try 尝试将新的netplan配置应用到运行系统,自动回滚
root@arnold-virtual-machine:~#
命令释义
- help
:显示netplan的帮助消息。
- apply
:将当前netplan配置应用到运行系统。示例命令:netplan apply --debug
root@arnold-virtual-machine:~# netplan apply -h
usage: /usr/sbin/netplan apply [-h] [--debug] [--sriov-only] [--only-ovs-cleanup] [--state STATE]
Apply current netplan config to running system
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
--sriov-only Only apply SR-IOV related configuration and exit
--only-ovs-cleanup Only clean up old OpenVSwitch interfaces and exit
--state STATE Directory containing previous YAML configuration
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan apply -h
用法:/usr/sbin/netplan apply [-h] [--debug] [--sriov-only] [--only-ovs-cleanup] [--state STATE]
将当前的netplan配置应用到运行中的系统
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
--sriov-only 仅应用与SR-IOV相关的配置并退出
--only-ovs-cleanup 仅清理旧的OpenVSwitch接口并退出
--state STATE 包含先前YAML配置的目录
root@arnold-virtual-machine:~#
试了半天也不知道这个--state
参数干嘛用的,我还以为是能另外指定一个目录下的/etc/netplan
目录,结果不行。。。还是都放在/etc/netplan
下吧。
看了半天也没看懂这个--state
参数的作用。。。
- generate
:从/etc/netplan/*.yaml
生成特定于后端的配置文件。示例命令:netplan generate
(一般用不到)
这个命令我们一般不用直接运行它。
https://netplan.readthedocs.io/en/stable/netplan-generate/
netplan generate -h
root@arnold-virtual-machine:~# netplan generate -h
usage: /usr/sbin/netplan generate [-h] [--debug] [--root-dir ROOT_DIR] [--mapping MAPPING]
Generate backend specific configuration files from /etc/netplan/*.yaml
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
--root-dir ROOT_DIR Search for and generate configuration files in this root directory instead of /
--mapping MAPPING Display the netplan device ID/backend/interface name mapping and exit.
root@arnold-virtual-machine:~# netplan generate -h
用法:/usr/sbin/netplan generate [-h] [--debug] [--root-dir ROOT_DIR] [--mapping MAPPING]
从 /etc/netplan/*.yaml 生成特定后端的配置文件
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
--root-dir ROOT_DIR 在此根目录中搜索并生成配置文件,而不是 /
--mapping MAPPING 显示 netplan 设备 ID/后端/接口名称的映射并退出。
执行netplan generate
命令会根据/etc/netplan/*.yaml
目录下的配置文件生成特定后端的配置文件。具体来说,它会将Netplan配置文件转换为网络管理工具(如NetworkManager、systemd-networkd等)所需的配置文件格式。
执行netplan generate
命令后,Netplan会读取/etc/netplan/*.yaml
目录下的配置文件,并根据配置文件中的内容生成相应的后端配置文件。生成的配置文件将存储在特定的目录中,具体位置取决于所使用的后端工具。
这个命令的目的是将高级的Netplan配置转换为底层网络管理工具所需的配置格式,以便实际应用网络配置。生成的配置文件可以通过后续的命令(如netplan apply
)来应用到系统中,从而使网络配置生效。
直接执行netplan apply
命令也是可以的,然而,有时候可能需要手动执行netplan generate
命令,例如在修改了Netplan配置文件后,想要查看生成的后端配置文件的内容,或者想要检查配置文件是否正确生成。在这些情况下,执行netplan generate
命令可以帮助您验证配置文件的生成过程,而不会直接应用配置到系统中。
- get
:通过指定嵌套键(如ethernets.eth0.addresses
或all
)获取设置。示例命令:netplan get ethernets.eth0.addresses
(注意:这个命令是从/etc/netplan
中的yaml文件获取合并的网络信息,而不是当前已生效的网络信息)
netplan get -h
root@arnold-virtual-machine:~# netplan get -h
usage: /usr/sbin/netplan get [-h] [--debug] [--root-dir ROOT_DIR] [key]
Get a setting by specifying a nested key like "ethernets.eth0.addresses", or "all"
positional arguments:
key The nested key in dotted format
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
--root-dir ROOT_DIR Read configuration files from this root directory instead of /
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan get -h
用法:/usr/sbin/netplan get [-h] [--debug] [--root-dir ROOT_DIR] [key]
通过指定嵌套键(如“ethernets.eth0.addresses”或“all”)来获取设置
位置参数:
key 以点分隔格式指定的嵌套键
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
--root-dir ROOT_DIR 从此根目录而不是/读取配置文件
root@arnold-virtual-machine:~#
示例
netplan get --debug all
netplan get --debug ethernets
netplan get --debug ethernets.ens33.gateway4
- info
:显示可用功能。示例命令:netplan info
netplan info -h
root@arnold-virtual-machine:~# netplan info -h
usage: /usr/sbin/netplan info [-h] [--debug] [--json | --yaml]
Show available features
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
--json Output version and features in JSON format
--yaml Output version and features in YAML format
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan info -h
用法:/usr/sbin/netplan info [-h] [--debug] [--json | --yaml]
显示可用的功能
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
--json 以JSON格式输出版本和功能
--yaml 以YAML格式输出版本和功能
root@arnold-virtual-machine:~#
示例
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan info
netplan.io:
website: "https://netplan.io/"
features:
- generate-just-in-time
- generated-supplicant
- dbus-config
- default-routes
- auth-phase2
- dhcp-use-domains
- ipv6-mtu
- modems
- sriov
- openvswitch
- activation-mode
- eswitch-mode
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan info --debug
netplan.io:
website: "https://netplan.io/"
features:
- generate-just-in-time
- generated-supplicant
- dbus-config
- default-routes
- auth-phase2
- dhcp-use-domains
- ipv6-mtu
- modems
- sriov
- openvswitch
- activation-mode
- eswitch-mode
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan info --json
{
"netplan.io": {
"website": "https://netplan.io/",
"features": [
"generate-just-in-time",
"generated-supplicant",
"dbus-config",
"default-routes",
"auth-phase2",
"dhcp-use-domains",
"ipv6-mtu",
"modems",
"sriov",
"openvswitch",
"activation-mode",
"eswitch-mode"
]
}
}
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan info --yaml
netplan.io:
website: "https://netplan.io/"
features:
- generate-just-in-time
- generated-supplicant
- dbus-config
- default-routes
- auth-phase2
- dhcp-use-domains
- ipv6-mtu
- modems
- sriov
- openvswitch
- activation-mode
- eswitch-mode
root@arnold-virtual-machine:~#
默认netplan info是以yaml格式显示结果的。
netplan info结果解释
netplan info
命令用于显示可用的功能。下面是netplan info
的结果解释:
netplan.io
:这是Netplan的官方网站,可以在该网站上获取更多关于Netplan的信息。features
:这是Netplan支持的功能列表。generate-just-in-time
:Netplan可以在应用配置之前即时生成配置文件。generated-supplicant
:Netplan可以生成用于网络认证的配置文件。dbus-config
:Netplan可以通过DBus进行配置。default-routes
:Netplan可以配置默认路由。auth-phase2
:Netplan支持第二阶段的认证。dhcp-use-domains
:Netplan可以使用域名进行DHCP配置。ipv6-mtu
:Netplan可以配置IPv6的最大传输单元(MTU)。modems
:Netplan支持调制解调器配置。sriov
:Netplan支持SR-IOV(单根物理网络适配器的虚拟化)。openvswitch
:Netplan支持Open vSwitch(开源虚拟交换机)。activation-mode
:Netplan支持激活模式配置。eswitch-mode
:Netplan支持以太网交换机模式配置。
这些功能表示Netplan可以实现的不同网络配置选项。
- ip
:从系统中检索IP信息。示例命令:netplan ip
netplan ip -h
root@arnold-virtual-machine:~# netplan ip -h
usage: /usr/sbin/netplan ip [-h] [--debug] ...
Retrieve IP information from the system
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
Available commands:
help Show this help message
leases Display IP leases
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan ip -h
用法:/usr/sbin/netplan ip [-h] [--debug] ...
从系统中获取IP信息
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
可用命令:
help 显示此帮助消息
leases 显示IP租约
root@arnold-virtual-machine:~#
示例
不知道咋用
- set
:通过指定点分键值对(如ethernets.eth0.dhcp4=true
)添加新设置。示例命令:netplan set ethernets.eth0.dhcp4=true
netplan set -h
root@arnold-virtual-machine:~# netplan set -h
usage: /usr/sbin/netplan set [-h] [--debug] [--origin-hint ORIGIN_HINT] [--root-dir ROOT_DIR] key_value
Add new setting by specifying a dotted key=value pair like ethernets.eth0.dhcp4=true
positional arguments:
key_value The nested key=value pair in dotted format. Value can be NULL to delete a key.
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
--origin-hint ORIGIN_HINT
Can be used to help choose a name for the overwrite YAML file. A .yaml suffix will be appended automatically.
--root-dir ROOT_DIR Overwrite configuration files in this root directory instead of /
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan set -h
用法:/usr/sbin/netplan set [-h] [--debug] [--origin-hint ORIGIN_HINT] [--root-dir ROOT_DIR] key_value
通过指定以点分隔的键值对(如ethernets.eth0.dhcp4=true)来添加新设置
位置参数:
key_value 以点分隔的键值对,格式为key=value。值可以为NULL以删除键。
可选参数:
-h, --help 显示帮助信息并退出
--debug 启用调试消息
--origin-hint ORIGIN_HINT
可用于帮助选择覆盖的YAML文件的名称。将自动附加.yaml后缀。
--root-dir ROOT_DIR 在此根目录中覆盖配置文件,而不是在/目录中
root@arnold-virtual-machine:~#
示例
设置dhcp4用yes或no,true和false都可以
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.141/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
renderer: NetworkManager
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# netplan set --origin-hint 01-network-manager-all ethernets.ens33.dhcp4=false
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.1.141/24
dhcp4: false
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:/etc/netplan#
设置gateway4
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.1.141/24
dhcp4: false
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# netplan set --origin-hint 01-network-manager-all ethernets.ens33.gateway4=192.168.1.2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.1.141/24
dhcp4: false
gateway4: 192.168.1.2
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
使用set命令如果指定.yaml文件没有,会自动生成.yaml文件;如果加上--root-dir
参数,还能修改/etc/netplan的根目录,比如加上--root-dir /ky
,就能修改/ky/etc/netplan
下的.yaml文件(前提是/ky/etc/netplan
目录存在才行)
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# ll
total 20
drwxrwxrwx 2 root root 4096 7月 10 10:41 ./
drwxr-xr-x 131 root root 12288 7月 7 13:52 ../
-rw-r--r-- 1 root root 236 7月 10 10:39 01-network-manager-all.yaml
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# netplan set --origin-hint test ethernets.ens33.gateway4=192.168.1.2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# ll
total 24
drwxrwxrwx 2 root root 4096 7月 10 10:41 ./
drwxr-xr-x 131 root root 12288 7月 7 13:52 ../
-rw-r--r-- 1 root root 236 7月 10 10:39 01-network-manager-all.yaml
-rw-r--r-- 1 root root 61 7月 10 10:41 test.yaml
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat test.yaml
network:
ethernets:
ens33:
gateway4: 192.168.1.2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
修改addresses(这是个数组,要用数组[]
的方式修改)
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.1.100/24
dhcp4: false
gateway4: 192.168.1.22
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# netplan set --debug --origin-hint 01-network-manager-all ethernets.ens33.addresses=[192.168.1.141/24]
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.1.141/24
dhcp4: false
gateway4: 192.168.1.22
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
另外,netplan set命令貌似还有记忆上次修改文件的功能,就是如果不用--origin-hint
指定修改文件,则默认修改上次修改的文件
不同的yaml文件可以对同一个网口做设置,用netplan get可获取合并信息,但是可能存在冲突情况,有的会自动解决冲突,有的不会
如下:网关冲突不可解决
dhcp冲突可解决:
不同yaml文件可对同一网口做设置,并且可合并信息执行netplan apply
:
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# ll
total 24
drwxrwxrwx 2 root root 4096 7月 10 11:23 ./
drwxr-xr-x 131 root root 12288 7月 7 13:52 ../
-rwxrwxrwx 1 root root 166 7月 10 11:36 01-network-manager-all.yaml*
-rwxrwxrwx 1 root root 103 7月 10 11:36 test.yaml*
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat test.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml
network:
ethernets:
ens33:
dhcp4: false
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# netplan get
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
addresses:
- "192.168.1.100/24"
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
gateway4: 192.168.1.1
dhcp4: false
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# netplan apply
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe53:63c2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:53:63:c2 txqueuelen 1000 (Ethernet)
RX packets 768742 bytes 57621701 (57.6 MB)
RX errors 0 dropped 62 overruns 0 frame 0
TX packets 48235 bytes 5028407 (5.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 702 bytes 63263 (63.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 702 bytes 63263 (63.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@arnold-virtual-machine:/etc/netplan#
root@arnold-virtual-machine:/etc/netplan#
- rebind
:将给定物理功能的SR-IOV虚拟函数重新绑定到其驱动程序。示例命令:netplan rebind
(一般用不到)
netplan rebind -h
root@arnold-virtual-machine:/etc/NetworkManager#
root@arnold-virtual-machine:/etc/NetworkManager# netplan rebind -h
usage: /usr/sbin/netplan rebind [-h] [--debug] [netdevs [netdevs ...]]
Rebind SR-IOV virtual functions of given physical functions to their driver
positional arguments:
netdevs Space separated list of PF interface names
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
root@arnold-virtual-machine:/etc/NetworkManager#
root@arnold-virtual-machine:/etc/NetworkManager#
root@arnold-virtual-machine:/etc/NetworkManager# netplan rebind -h
用法:/usr/sbin/netplan rebind [-h] [--debug] [netdevs [netdevs ...]]
将给定物理功能的SR-IOV虚拟功能重新绑定到其驱动程序
位置参数:
netdevs 以空格分隔的PF接口名称列表
可选参数:
-h, --help 显示此帮助消息并退出
--debug 启用调试消息
root@arnold-virtual-machine:/etc/NetworkManager#
netplan rebind
命令用于将给定物理功能(Physical Function,PF)的SR-IOV(Single Root I/O Virtualization)虚拟功能(Virtual Function,VF)重新绑定到其驱动程序。
SR-IOV是一种硬件虚拟化技术,允许将物理网络适配器划分为多个虚拟网络适配器。物理功能(PF)是主要的网络适配器,而虚拟功能(VF)是从主要适配器分配的虚拟适配器。
netplan rebind
命令的作用是重新将VF绑定到其驱动程序。这在以下情况下可能会有用:
-
重新配置网络:当您需要重新配置网络适配器的SR-IOV设置时,可能需要重新绑定VF。通过重新绑定VF,您可以将其分配给不同的驱动程序或重新配置其参数。
-
故障恢复:如果VF与其驱动程序之间存在通信问题或其他故障,重新绑定VF可能有助于恢复其正常功能。重新绑定VF可以重新建立VF与驱动程序之间的连接。
-
性能优化:有时,重新绑定VF可以改善网络适配器的性能。通过将VF重新绑定到更适合其需求的驱动程序,可以提高网络适配器的性能和效率。
netplan rebind
命令用于重新绑定SR-IOV虚拟功能(VF)到其驱动程序,以实现网络适配器的重新配置、故障恢复或性能优化。
- try
:尝试将新的netplan配置应用到运行系统,自动回滚。示例命令:netplan try
netplan try -h
root@arnold-virtual-machine:/etc/NetworkManager#
root@arnold-virtual-machine:/etc/NetworkManager# netplan try -h
usage: /usr/sbin/netplan try [-h] [--debug] [--config-file CONFIG_FILE] [--timeout TIMEOUT] [--state STATE]
Try to apply a new netplan config to running system, with automatic rollback
optional arguments:
-h, --help show this help message and exit
--debug Enable debug messages
--config-file CONFIG_FILE
Apply the config file in argument in addition to current configuration.
--timeout TIMEOUT Maximum number of seconds to wait for the user's confirmation
--state STATE Directory containing previous YAML configuration
root@arnold-virtual-machine:/etc/NetworkManager#
root@arnold-virtual-machine:/etc/NetworkManager#
root@arnold-virtual-machine:/etc/NetworkManager# netplan try -h
用法:/usr/sbin/netplan try [-h] [--debug] [--config-file CONFIG_FILE] [--timeout TIMEOUT] [--state STATE]
尝试将新的netplan配置应用于运行中的系统,并自动回滚
可选参数:
-h, --help 显示此帮助消息并退出
--debug 启用调试消息
--config-file CONFIG_FILE
除当前配置外,还应用参数中的配置文件。
--timeout TIMEOUT 等待用户确认的最大秒数
--state STATE 包含先前YAML配置的目录
root@arnold-virtual-machine:/etc/NetworkManager#
解释:它这个try跟我想象的还不太一样,用命令行执行它后,要一段时间内用户敲Enter键,否则就回退之前的ip设置
我在想,如何在代码中,实现检测到网络设置成功后(python可以用ping3库实现用新设置的ip去ping 请求者ip,来检测网络是否设置成功),模拟用户敲Enter的功能
20230712:实在有点懵,我测试的时候,它有时超时后能回滚,有时不能,很诡异。
参考github文档:https://github.com/canonical/netplan/blob/main/doc/netplan-try.md
重点:确认或拒绝,可发SIGUSR1或SIGINT信号。
他们自己也说有bug啊!@!!!!!
示例
无法回滚bug排查
桑奥夫必去!!我现在又复现不了回退失败的情况了- -
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe53:63c2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:53:63:c2 txqueuelen 1000 (Ethernet)
RX packets 2035111 bytes 279455500 (279.4 MB)
RX errors 0 dropped 254 overruns 0 frame 0
TX packets 294933 bytes 48203029 (48.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 9942 bytes 866857 (866.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9942 bytes 866857 (866.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# cat /etc/netplan/kyai_netplan_config.yaml
network:
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.1.141/24
nameservers:
addresses:
- 192.168.1.1
- 8.8.8.8
gateway4: 192.168.1.1
renderer: NetworkManager
version: 2
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# netplan try --timeout 1
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 1 seconds
Reverting.
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe53:63c2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:53:63:c2 txqueuelen 1000 (Ethernet)
RX packets 2035851 bytes 279526834 (279.5 MB)
RX errors 0 dropped 254 overruns 0 frame 0
TX packets 295148 bytes 48232157 (48.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 10008 bytes 872415 (872.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10008 bytes 872415 (872.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@arnold-virtual-machine:~#
root@arnold-virtual-machine:~#
配置示例1:动态ip
将/etc/netplan/
中的.yaml
文件内容改成:
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: true
然后执行netplan apply
,动态ip就设置好了。
注意其中的以太网接口eth0换成你需要修改的以太网接口
配置示例2:固定ip
更改配置文件
在01-network-manager-all.yaml中添加红框中内容:
(注意缩进!注意缩进!注意缩进!)
network:
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.1.141/24
nameservers:
addresses:
- 192.168.1.1
- 8.8.8.8
gateway4: 192.168.1.1
renderer: NetworkManager
version: 2
(不同系统,怎么这个文件名还不一样?在浪潮服务器上是这样的)
116 NX ubuntu20.04盒子上是这样:
在ubuntu20.04虚拟机上是这样:
配置文件名称不重要,因为如果/etc/netplan
下有多个.yaml配置文件,它会合并到一个配置文件(可能会有冲突,执行netplan apply时会提示报错),我们简单使用的话,就维持一个.yaml配置文件即可。
执行修改命令
配置示例2:禁用ipv6
参考文章:https://netplan.readthedocs.io/en/stable/netplan-tutorial/
机上这两个,会禁用ipv6,但是我们暂时用不到
其他疑问
NetworkManager和netplan有何区别?
NetworkManager和Netplan是Ubuntu中两种不同的网络管理工具。
-
NetworkManager:NetworkManager是一个功能强大的网络管理器,用于管理和配置网络连接。它提供了一个图形化界面和命令行工具,可以方便地管理以太网、Wi-Fi、VPN等网络连接。NetworkManager支持自动检测和配置网络连接,可以动态切换网络配置,适用于桌面环境和移动设备。
-
Netplan:Netplan是Ubuntu 17.10及更高版本引入的新一代网络配置工具。它使用简单的YAML配置文件来定义网络接口和连接配置。Netplan的目标是提供一种统一的、简化的方式来配置网络连接,以取代之前的网络管理工具(如ifupdown)。Netplan配置文件位于
/etc/netplan/
目录下,可以定义静态IP、DHCP、网关、DNS等网络参数。
虽然NetworkManager和Netplan都可以用于配置网络连接,但它们的工作方式和使用场景略有不同。NetworkManager适用于桌面环境和移动设备,提供了更多的功能和灵活性。而Netplan则更适合服务器环境,提供了一种简化的配置方式,使网络配置更易于管理和维护。在Ubuntu 20.04中,默认使用Netplan作为网络管理工具。
为什么/etc/netplan/01-network-manager-all.yaml中有renderer: NetworkManager字样,netplan依赖于networkMananger吗?
在Ubuntu 20.04中,默认情况下,Netplan使用NetworkManager作为其渲染器(renderer)。这意味着Netplan配置文件中的renderer: NetworkManager
指定了Netplan使用NetworkManager来管理网络连接。
Netplan本身并不直接依赖于NetworkManager,而是通过渲染器与不同的网络管理工具进行交互。渲染器是Netplan的一个组件,它负责将Netplan配置文件中的网络配置转换为实际的网络管理工具所需的配置。
在Ubuntu 20.04中,默认的Netplan渲染器是NetworkManager,这是因为NetworkManager是一个功能强大的网络管理工具,适用于桌面环境和移动设备。使用NetworkManager作为Netplan的渲染器可以提供更多的功能和灵活性,例如自动检测和配置网络连接、Wi-Fi管理、VPN支持等。
然而,Netplan也支持其他渲染器,如systemd-networkd。你可以根据需要修改Netplan配置文件,将renderer
字段设置为其他渲染器,以便使用不同的网络管理工具。例如,将renderer: NetworkManager
修改为renderer: systemd-networkd
,然后应用配置即可切换到systemd-networkd作为Netplan的渲染器。
总结起来,Netplan并不直接依赖于NetworkManager,但在默认情况下,Netplan使用NetworkManager作为其渲染器来管理网络连接。你可以根据需要选择不同的渲染器来适应不同的网络管理工具。
那为什么用户不直接用NetworkManager配置网络?
用户可以直接使用NetworkManager来配置网络,特别是在桌面环境和移动设备上,NetworkManager提供了一个易于使用的图形界面和命令行工具,可以方便地管理和配置网络连接。
然而,Netplan作为Ubuntu 20.04引入的新一代网络配置工具,提供了一种更简化和统一的方式来配置网络连接。Netplan使用简单的YAML配置文件来定义网络接口和连接配置,使网络配置更易于管理和维护。它的目标是提供一种统一的网络配置方式,以取代之前的网络管理工具(如ifupdown)。
使用Netplan的好处包括:
-
统一的配置语法:Netplan使用YAML配置文件,提供了一种统一的配置语法,使网络配置更易于理解和编写。
-
简化的配置流程:Netplan的配置文件中只需指定网络接口和连接的基本信息,如IP地址、子网掩码、网关等,而不需要关注底层的网络管理细节。
-
支持多个渲染器:Netplan支持多个渲染器,如NetworkManager和systemd-networkd,可以根据需要选择不同的渲染器来管理网络连接。
-
自动应用配置:一旦修改了Netplan配置文件,只需应用配置即可自动加载和应用新的网络配置,无需手动重启网络服务。
尽管Netplan提供了更简化和统一的网络配置方式,但对于一些用户来说,直接使用NetworkManager可能更为直观和熟悉。因此,用户可以根据自己的需求和偏好选择使用NetworkManager或Netplan来配置网络。
那netplan有提供一些函数接口来修改网络配置吗,还是只能修改yaml配置文件?
Netplan本身并没有提供专门的函数接口来修改网络配置。Netplan的主要工作是读取和解析YAML配置文件,并将其转换为底层网络管理工具所需的配置。
要修改网络配置,通常需要直接编辑Netplan的配置文件(位于/etc/netplan/
目录下),并保存更改。然后,可以使用netplan apply
命令来应用新的配置,使其生效。
例如,可以使用文本编辑器(如nano或vim)打开Netplan配置文件,修改其中的网络参数,然后保存文件。接下来,运行sudo netplan apply
命令来应用新的配置。
sudo nano /etc/netplan/01-network-manager-all.yaml
# 修改配置文件
sudo netplan apply
请注意,修改Netplan配置文件时,需要遵循正确的YAML语法。如果配置文件中存在语法错误,netplan apply
命令可能会失败。
如果你希望通过编程方式修改网络配置,可以考虑使用其他工具或库来操作Netplan配置文件。例如,你可以使用Python的PyYAML库来读取和修改Netplan配置文件。这样,你就可以编写自己的脚本来动态修改网络配置。
使用netplan修改ubuntu20.04的固定ip,需要在配置文件里,填写哪些参数?
在使用Netplan修改Ubuntu 20.04的固定IP时,需要在配置文件中填写以下参数:
network
:指定网络配置的开始标记。version
:指定Netplan配置文件的版本号,通常为2。ethernets
:指定以太网接口的配置。eth0
:以太网接口的名称,可以根据实际情况进行更改。dhcp4
:指定IPv4的配置方式为DHCP,如果要设置固定IP,则改为static
。addresses
:指定IPv4地址,例如192.168.1.100/24
。gateway4
:指定IPv4的网关地址,例如192.168.1.1
。nameservers
:指定DNS服务器的地址,例如[8.8.8.8, 8.8.4.4]
。
renderer
:指定网络配置的渲染器,通常为networkd
。
下面是一个示例的Netplan配置文件,用于设置以太网接口eth0的固定IP:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
renderer: networkd
请根据实际情况修改IP地址、网关地址和DNS服务器地址。完成后,将以上配置保存到Netplan配置文件(通常为/etc/netplan/01-netcfg.yaml
),然后运行sudo netplan apply
命令使配置生效。
如何检查netplan是否有网络配置权力?netplan --debug generate
netplan --debug generate
如果这个命令显示类似DEBUG: NetworkManager: definition enp3s0 is not for us (backend 1)
这样的信息,说明netplan将网络管理权限交给了NetworkManager。
如何让netplan放弃ip网络配置权力?
如果你希望netplan在系统启动时不使用/etc/netplan
中的配置文件配置网络,你可以按照以下步骤操作:
-
首先,备份现有的netplan配置文件,以防止需要时无法找到。你可以使用
mv
命令将其移动到其他地方,例如:sudo mv /etc/netplan/*.yaml ~/backup/
这会将所有的netplan配置文件移动到你的home目录下的backup文件夹。
-
创建一个新的netplan配置文件,使netplan放弃管理网络并让NetworkManager接管。在
/etc/netplan/
目录下创建一个新的YAML文件,例如01-network-manager-all.yaml
,并使用以下内容:network: version: 2 renderer: NetworkManager
这告诉netplan让NetworkManager管理所有网络接口。
如图,这是新装的ubuntu20.04系统默认的情况:
它显示:
# Let NetworkManager manage all devices on this system
-
应用新的配置:
sudo netplan apply
请注意,这只是禁用netplan管理网络,并让NetworkManager接管。如果你想完全禁用netplan,可能需要更复杂的步骤,包括从系统中删除netplan和修改系统服务。但这通常不推荐,因为它可能会导致系统不稳定。
注意:即使不执行netplan apply,系统重启后,也会根据/etc/netplan下的.yaml文件内容,来配置网络
netplan会在系统启动时自动加载并应用/etc/netplan目录下的配置文件。即使没有手动执行netplan apply命令,系统重启后也会根据配置文件重新配置网络。这是因为netplan使用systemd或networkManager网络配置管理器来管理网络配置,它会在系统启动时自动加载并应用配置。所以,只需将配置文件放置在/etc/netplan目录下,系统重启后就会自动应用新的网络配置。