Ubuntu Server 18.04 无线网络接入配置 - 2

本篇文章主要介绍 Ubuntu Server 网络配置核心 - netplan 配置文件。

6. 使用 netplan 配置无线网络接入

6.1 netplan 简介

Ubuntu Server 18.04 采用 netplan 进行网络配置,官方文档见 Netplan Reference

系统启动时,netplan 的渲染器/呈现器(renderer)将从 /{lib,etc,run}/netplan/*.yaml 配置文件中读取相关配置信息,将配置写到 /run 中,再把网络设备的控制交给相关网络守护进程。

其流转示意图如下:

netplan design overview

  • systemd-networkd 是默认的渲染器/呈现器(renderer),NetworkManager 是另外一种可以选用的渲染器/呈现器(renderer);
  • 不被网络配置覆盖的设备将被忽略;
  • initramfs 中可用;
  • 除 yaml 配置文件外,生成的配置不进行持久化;
  • 支持多配置文件

6.2 netplan 配置文件概述

netplan 配置文件使用 yaml 格式。想快速了解 yaml 文件格式,可以看这里:Yaml 语法简介、PyYAML演示以及网上资源汇总

/{lib,etc,run}/netplan/ 目录下的所有 yaml 文件都将被加载。无论 yaml 文件在哪一个目录下,统一按照文件名称的字典顺序加载;后加载文件中的配置信息增补/覆盖之前加载的配置信息。不同路径中的同名 yaml 文件,按照 lib,etc,run 的顺序加载,遵循覆盖的规则。

netplan 使用的 yaml 文件的基本结构如下:

1
2
3
4
5
6
7
8
network:
version: 2
ethernets:
<dev_id>:
<property_name>: <property_value>
wifis:
<dev_id>:
<property_name>: <property_value>

上面的例子中只列出了 ethernet(以太网)wifi(无线网络) ,实际上 netplan 还支持 bridge,bond,tunnel,vlan 等网络设备类型。

我们最关心的当然是 wifis 无线网络这一节,那么赶紧去看看相关的属性。

6.3 netplan 相关属性设置

dev_id (mapping)

首先,这里的 dev_id 与我们用 iw dev 命令找到的 wlp3s0 (dev_name) 在含义上并不相同。 dev_id 是我们 在配置文件此节 中给 某一类型的网络设备适配同样属性某个或某组设备 起的一个代号而已。dev_id 可以随便起,只要不重名就行。

其次,再说明一下:这里 netplan 通过固定的配置文件结构,借助 YAML 的层次化含义简化了配置的写法;我们不用 dev_id = <dev_id> 的方式来写,而是直接把你命名的 dev_id 写在这里就行。netplan 知道在 ethernetswifis 等网络设备类型节下的 第一层 就是各 dev_id 分组。

举例来说:

1
2
3
4
5
6
7
wifis:
wifi_group1:
<property_name>: <property_value>
...
wifi_group2:
<property_name>: <property_value>
...

这里的 wifi_group1wifi_group2 就是两个 dev_id

从这种结构也可以看出,所有的网络配置都是属于某一个 dev_id 的。

再次,dev_id (mapping) 中的 mapping,表示 dev_id 是 YAML 中的 mapping 类型。至于什么是 mapping 类型,推荐尚不清楚的小伙伴去阅读 Yaml 语法简介、PyYAML演示以及网上资源汇总 一文。下文使用类似的方式来介绍各属性的类型(与官方文档 Netplan Reference 保持一致),不再赘述。

每一个 dev_id 分组包括了哪个或哪几个网络设备则由其下的 match 属性指定。

match (mapping)

match 依靠其三个子属性来确定本组包括哪些设备:

  • name (scalar)
  • macaddress (scalar)
  • driver (scalar)

其中 namedriver 都支持通配符;而 macaddress 的格式要求为 XX:XX:XX:XX:XX:XX,且不支持通配符。

例:

1
2
match:
name: enp2*

指的是设备名以 enp2 开头的网络设备。

1
2
match:
macaddress: 11:22:33:AA:BB:FF

指的是 MAC 地址为 11:22:33:AA:BB:FF 的网络设备。

如果 match 中指定了多个属性,则这些属性是”且”的关系:

1
2
3
match:
driver: ixgbe
name: en*s0

上述 match 指的是第一块使用 ixgbe 驱动的网卡。

如果当此 dev_id 节只针对 一个 网络设备,且使用 特定名字(name (scalar)) 来识别,那么 netplan 提供了一个简化的写法,即用该设备的 dev_name 作为 dev_id

所以,如下两段配置代码是等效的:

1
2
3
wifis:
wlp3s0:
<other_property_name>: <property_value>
1
2
3
4
5
wifis:
group1:
match:
name: wlp3s0
<other_property_name>: <property_value>

我们在实践中通常看到的是上面的简写形式;但请大家记住那只是简写形式,dev_iddev_name 在本质上还是有区别的。

Anyway 我们在准备阶段用 iw dev 命令获得的无线网络设备名(dev_name)wlp3s0,在这里就得用上了。

dhcp4 (bool)

是否使用路由器的 DCHP 服务。默认为关闭 false。如果计划让路由器来分配 IP 地址,则需设置为 true

addresses (sequence of scalars)

先看例子,讲解起来更方便:

1
addresses: [192.168.14.2/24, "2001:1::1/64"]

从上面例子中可见,我们可以通过 addresses 属性,为 dev_id 设置一个或多个静态地址。

静态地址的形式为 addr/prefixlen

  • addr 可以是 IPv4 或 IPv6 的地址;
  • prefixlen 是子网长度(bits),所以 24 就代表着我们常见的 255.255.255.0 这样的子网掩码。

gateway4, gateway6 (scalar)

我们通过这两个属性来设置默认网关。 例:gateway4: 172.16.0.1gateway6: "2001:4::1"

nameservers (mapping)

用以设置 DNS 服务器以及搜索域。例子足以说明一切:

1
2
3
4
5
6
ethernets:
id0:
[...]
nameservers:
search: [lab, home]
addresses: [8.8.8.8, "FEDC::1"]

optional (bool)

设置此设备是否为启动可选。如果设置为 false(非可选),networkd 将在系统启动时等待此设备;若设置为 true(可选),则启动时不等待。

目前,只有 networkd 渲染器/呈现器(renderer)支持此选项(networkd、渲染器/呈现器 相关内容见 Ubuntu Server 18.04 无线网络接入配置 - 1)。此选项的默认值为 false(非可选)。

以上介绍的属性,是对于所有类型的网络设备(如 ethernet,wifi)都通用的属性,下面讲适用于 wifi 类型网络设备的专门属性。

access-points (mapping)

access-points 这一属性的结构如下:

1
2
3
4
access-points:
<SSID>:
password: <password>
mode: "infrastructure|ap|adhoc"

access-points 这一节基本上也是不言自明的。

mode 目前有三种类型:

  • infrastructure:默认,我们一般的接入计算机选这种即可;
  • ap:创建一个供其他设备连接的 access point;
  • adhoc:用于无中心 access piont 的点对点网络;

注意:官方文档在这里特意强调 networkd 并 原生支持wifi,因此如果我们使用默认的 networkd renderer,则需要安装 wpasupplicant。

netplan 文件中还有很多属性可供配置,本文就不一一介绍了,为了配置 Ubuntu Server 的 WiFi 连接,咱们了解到这里就足够了。感兴趣的同学,可以去阅读官方 reference

下面给出两个实例。

第一个例子是我自己笔记本的配置文件 50-cloud-init.yaml

1
2
3
4
5
6
7
8
network:
wifis:
wlp3s0:
dhcp4: true
access-points:
"XXXX":
password: 'XXXXXXXX'
version: 2

第二个例子是我参考的网上例子(Ubuntu-Server18.04开启无线网卡并配置静态ip):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
network:
renderer: NetworkManager
wifis:
wls33:
dhcp4: no
addresses:
- 192.168.18.123/24
gateway4: 192.168.18.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
access-points:
"wifi_ssid":
password: '12345'
version: 2

两者区别在于:

  • 我使用 netplan 体系默认的 networkd 作为 renderer(因此不需要明确指明);而网参版指定 renderer 为 NetworkManager;
  • 我让路由器使用 DHCP 给计算机提供 IP 等网络配置(当然,我会在路由器上做静态地址设置);而网参版在 yaml 文件中配置了服务器的静态 IP 地址。

有了上面的说明,以及这两个例子,99% 的读者应该能依据自己的实际情况配置相应的 network yaml 文件了。

剩下要做的,是让这些配置生效,具体方法详见下一篇:Ubuntu Server 18.04 无线网络接入配置 - 3 - 配置文件生效

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器