1.介绍
? 发行版安装程序、云实例化、特定设备的镜像或任何其他部署操作系统的方法,都会将其网络配置放入YAML配置文件中。在启动初期,netplan的“network renderer”将读取/{lib,etc,run}/netplan/*.yaml文件,并将配置写入/run,以将设备控制转交给指定的网络守护进程。
- 配置的设备默认由systemd-networkd处理,除非指定了renderer(NetworkManager)
- 没有被网络配置覆盖的设备,不会被触动;
- 可用于initramfs(依赖少,速度快)
- 没有持久生成的配置,只有原始的YAML配置
- 解析器支持多个配置文件,这就允许像libvirt或lxd等应用打包预期的网络配置(virbr0, lxdbr0),或更改全局默认策略,使用NetworkManager进行所有配置。
- 保留灵活性,更改后端/策略或调整到删除NetworkManager,因为生成的配置是短暂的。
2.总体结构
? netplan的配置文件使用YAML格式 (http://yaml.org/spec/1.1/current.html)。所有/{lib,etc,run}/ netplan / *.yaml都将被使用。 ? netplan配置文件中的顶级节点是“network: ”,且需要包含“version: 2” (curtin、MaaS等目前使用的YAML是版本1),然后是按类型分组的设备,例如 “ethernets:“, “modems:“, “wifis:“或者“bridges:“。
3.配置说明
3.1.设备配置ID
? 每个设备类型(如“ethernets:“)下面设备名称为“ID”,在整个配置文件中必须是唯一的。(从0.97开始)如果在配置文件中用ID定义接口,它将由适合的renderer启动。设备定义有两种物理/结构上的不同类别,ID字段对它们有不同的解释:
? 物理设备 ? 例如: ethernet, modem, wifi,它们可以重启,甚至热插拔。在一般情况下,可以通过匹配条件选择它们:例如名称、MAC地址、驱动程序或设备路径。不指定匹配规则时,ID字段只是匹配接口名称;当指定匹配规则时,ID字段是一个纯粹不透明的名称,仅用于引用配置中的复合设备定义。 ? 虚拟设备 ? 例如:veth, bridge, bond,它们完全在配置文件和网络堆栈的控制下。也就是说,这些设备是创建的,而不是匹配的。因此match和set-name都不适用,且ID字段是创建的虚拟设备的名称。
3.2.物理设备类型的通用属性
match
? name:当前接口的名称,支持Globs ? macaddress:设备的MAC地址,格式为“XX:XX:XX:XX:XX”。不允许使用Globs ? driver:内核驱动名称,支持Globs
例子:
? 匹配所有在第2PCI总线上的卡:
match:
name: enp2*
? 匹配MAC地址:
match:
macaddress: 11:22:33:AA:BB:FF
? 匹配驱动为ixgbe的第一张卡:
match:
driver: ixgbe
name: en*s0
? 匹配驱动为bcmgenet或smsc*的第一张卡:
match:
driver: ["bcmgenet", "smsc*"]
name: en*
set-name
? 对满足匹配条件的唯一设备,进行重命名
3.3.所有设备类型的通用属性
renderer 指定网络后端,目前支持networkd和NetworkManager。此属性可以在“network:”中全局指定,默认是networkd
dhcp4
? 开启IPv4的DHCP功能,默认关闭
dhcp6
? 开启IPv6的DHCP功能,默认关闭
link-local 配置启动的本地链路地址,有效选项包括ipv4和ipv6,缺省只启用IPv6本地链路地址。
addresses
? 配置格式是CIDR符号,即addr/prefixlen。addr可为IPv4或IPv6地址,通过inet_pton(3)和前缀固定子网的位数。
例子:
addresses: [192.168.14.2/24, "2001:1::1/64"]
ethernets:
eth0:
addresses:
- 10.0.0.15/24:
lifetime: 0
label: "maas"
- "2001:1::1/64"
gateway4, gateway6
? 已弃用,请参见默认路由。配置IPv4/6的默认网关,用于手动配置。如果需要多条缺省路由,请通过routing-policy定义。
例子:
gateway4: 172.16.0.1
gateway6: "2001:4::1"
nameservers
? 设置DNS服务器和搜索域,支持两个字段:“address:”类似于gateway*的IPv4/6地址列表;“search:”搜索域列表。
例子:
ethernets:
id0:
[...]
nameservers:
search: [lab, home]
addresses: [8.8.8.8, "FEDC::1"]
macaddress
? 设置设备的MAC地址,格式为“XX:XX:XX:XX:XX:XX”.
例子:
ethernets:
id0:
match:
macaddress: 52:54:00:6b:3c:58
[...]
macaddress: 52:54:00:6b:3c:59
routes
? 为设备配置静态路由,至少必须指定to
from
配置经过该路由流量的源IP地址
to
路由的目的地址
via
路由的网关的地址
on-link
当设置为true时,表示路由与接口直接相连
metric
路由的相对优先级,必须为正整数。
type
路由类型,有效选项包括" unicast "(默认)," anycast ", " blackhole ", " broadcast ", " local ", " multicast ", " nat ", " prohibit ", " throw ", " unreachable "或" xresolve "。
scope
路由范围,对网络的影响有多大。可能取值为“global”, “link”或“host”。
table
路由的表号,取值范围为从1开始的正整数
mtu
路由的MTU值,以字节为单位,必须为正整数
congestion-window
路由的拥塞窗口,由段的数量表示,必须为正整数。
advertised-receive-window
例子:
eth0:
[...]
routes:
- to: default #可选,可以是0/0或0.0.0.0/0
via: 10.0.0.1
metric: 100
on-link: true
- to: default #可选,可以是::/0
via: cf02:de:ad:be:ef::2
eth1:
[...]
routes:
- to: default
via: 172.134.67.1
metric: 100
on-link: true
table: 76 #不在主路由表中,与eth0默认路由不冲突
routing-policy
? 配置设备的策略路由,其可以根据源IP、防火墙标记等对流量进行特殊处理。对于from和to都可以同时识别IPv4和IPv6地址,且必须为addr/prefixlen或addr。
from
配置源IP地址,来匹配该策略规则的流量
to
配置目的IP地址,来匹配该策略规则的流量
table
路由匹配的表号,取值范围为从1开始的正整数
priority
路由策略规则的优先级,以影响处理路由规则的顺序。数字越大,优先级越低。
mark
路由策略规则与iptables防火墙标记的流量匹配,取值范围为从1开始的正整数
type-of-service
根据流量应用的服务号类型匹配策略规则
3.4.身份验证
? Netplan支持以太网、wifi接口和单独的wifi网络的高级认证设置。略
3.5.ethernets的属性
? 以太网设备属性,除了上面描述的常见之外,还支持一些可用于SR-IOV设备的附加属性。略
3.6.modems的属性
? GSM/CDMA modem配置仅支持NetworkManager,systemd-networkd不支持调制解调器。略
3.7.wifis的属性
? systemd-networkd不支持wifi,所以如果你让networkd渲染器处理wifi,你需要安装wpasupplicant
3.8.bridges的属性
interfaces
? 所有匹配此ID列表的设备都将被添加到网桥。这可能是一个空列表,在这种情况下,桥将在没有成员接口的情况下联机。
例子:
ethernets:
switchports:
match: {name: "enp2*"}
[...]
bridges:
br0:
interfaces: [switchports]
parameters
? 指定桥接选项的特殊参数。时间间隔需要表示为秒或毫秒数,可以使用时间后缀(例如“s”表示秒,“ms”表示毫秒)来限定时间间隔。略
3.9.bonds的属性
interfaces
? 所有匹配此ID列表的设备将被添加到绑定
例子:
ethernets:
switchports:
match: {name: "enp2*"}
[...]
bonds:
bond0:
interfaces: [switchports]
parameters
? 指定bomds选项的特殊参数。时间间隔需要表示为秒或毫秒数,可以使用时间后缀(例如“s”表示秒,“ms”表示毫秒)来限定时间间隔。略
mode
设置接口的绑定模式。缺省情况下为balance-rr(轮询调度)。取值包括balance-rr、active-backup、balance-xor、broadcast、802.3ad、balance-tlb和balance-alb。OpenVSwitch支持active-backup和balance-tcp、balance-slb两种附加模式
lacp-rate
配置LACPDUs报文的传输速率。这只在802.3ad模式下有用。可能的值为slow(默认为30秒)和fast(每秒)
mii-monitor-interval
MII监控(检测绑定接口是否有载波)的时间间隔,默认为0,禁用MII监控。相当于网络后端的MIIMonitorSec=字段。如果没有指定时间后缀,默认为毫秒
min-links
使绑定接口处于up状态的最小连接数
transmit-hash-policy
指定用于选择slave的传输哈希策略。这只在balance-xor, 802.3ad和balance-tlb模式下有用。取值为layer2、layer3+4、layer2+3、encap2+3和encap3+4
ad-select
设置聚合选择模式。取值包括stable、bandwidth和count。该选项仅在“802.3ad”模式下使用
all-slaves-active
如果bond应该丢弃在未激活端口上接收到的重复帧,则将此选项设置为false。如果它们应该被交付,将此选项设置为true。默认值为false,这是适用于大多数情况
略
3.10.tunnels的属性
? 隧道允许流量像在同一个本地网络上的系统之间一样通过,尽管系统之间可能相距很远。它们可以用于在ISP不提供服务的网络上支持IPv6流量,或者扩展和“连接”独立的本地网络。略
3.11.vlans的属性
id
? VLAN ID,范围为0到4094
link
? 用于创建此VLAN的基础设备的ID
例子:
ethernets:
eno1: {...}
vlans:
en-intra:
id: 1
link: eno1
dhcp4: yes
en-vpn:
id: 2
link: eno1
addresses: ...
3.12.nm-devices的属性
? nm-devices设备类型仅供内部使用,不应在普通配置文件中使用
3.13.后端特定配置参数
? 除了可用于配置接口的其他字段外,一些后端可能需要在netplan中记录它们自己的一些参数,特别是当netplan定义是由后端消费者自动生成时。目前,这只用于NetworkManager。
networkmanager
? 保持守护进程用于识别连接的networkmanager特定配置参数。
name
设置连接的显示名称
uuid
为这个连接定义UUID(唯一标识符),由NetworkManager自身生成
stable-id
定义NetworkManager使用的stable ID(连接名的另一种形式),以防止连接名可能发生更改,例如在用户之间共享连接时
device
定义应用此连接的接口名称
passthrough
可以作为缺少密钥文件设置的回退机制
4.例子
network:
version: 2
#如果指定,将使用NetworkManager作为渲染器,因为networkd不能trender wifi/3G
renderer: NetworkManager
ethernets:
#物理接口的不透明ID,仅由其他节引用
id0:
match:
macaddress: 00:11:22:33:44:55
wakeonlan: true
dhcp4: true
addresses:
- 192.168.14.2/24
- 192.168.14.3/24
- "2001:1::1/64"
nameservers:
search: [foo.local, bar.local]
addresses: [8.8.8.8]
routes:
- to: default
via: 192.168.14.1
- to: default
via: "2001:1::2"
- to: 0.0.0.0/0
via: 11.0.0.1
table: 70
on-link: true
metric: 3
routing-policy:
- to: 10.0.0.0/8
from: 192.168.14.2/24
table: 70
priority: 100
- to: 20.0.0.0/8
from: 192.168.14.3/24
table: 70
priority: 50
#只有network可以使用link路由和路由策略
renderer: networkd
lom:
match:
driver: ixgbe
#如果使用set-name,则需要设置足够严格的匹配规则,这些规则只匹配唯一个设备
set-name: lom1
dhcp6: true
switchports:
#第二PCI总线上所有未自行配置的卡,将被添加到下面的br0
match:
name: enp2*
mtu: 1280
wifis:
all-wlans:
#在你知道只有一种设备的系统上很有用
match: {}
access-points:
"Joe's home":
# 模式默认为"infrastructure" (client)
password: "s3kr1t"
#这将使用hostapd,且不匹配规则,并在wlp1s0上创建一个AP
wlp1s0:
access-points:
"guest":
mode: ap
#没有配置WPA,意味着默认的open
bridges:
#key名是已创建的虚拟接口的名称,没有match:和set-name:也是被允许的
br0:
interfaces: [wlp1s0, switchports]
dhcp4: true
|