Ubuntu Server 18.04 无线网络接入配置 - 2
- 前一篇文章(Ubuntu Server 18.04 无线网络接入配置 - 1)介绍了配置前的准备工作以及一部分预配置工作;
- 后一篇文章(Ubuntu Server 18.04 无线网络接入配置 - 3)将介绍让配置文件生效的方法。
本篇文章主要介绍 Ubuntu Server 网络配置核心 - netplan 配置文件。
6. 使用 netplan 配置无线网络接入
6.1 netplan 简介
Ubuntu Server 18.04 采用 netplan 进行网络配置,官方文档见 Netplan Reference。
系统启动时,netplan 的渲染器/呈现器(renderer)将从 /{lib,etc,run}/netplan/*.yaml
配置文件中读取相关配置信息,将配置写到 /run
中,再把网络设备的控制交给相关网络守护进程。
其流转示意图如下:
- 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 文件的基本结构如下:
|
|
上面的例子中只列出了 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 知道在 ethernets、wifis 等网络设备类型节下的 第一层 就是各 dev_id 分组。
举例来说:
这里的 wifi_group1 和 wifi_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)
其中 name 和 driver 都支持通配符;而 macaddress 的格式要求为 XX:XX:XX:XX:XX:XX,且不支持通配符。
例:
|
|
指的是设备名以 enp2 开头的网络设备。
|
|
指的是 MAC 地址为 11:22:33:AA:BB:FF 的网络设备。
如果 match 中指定了多个属性,则这些属性是”且”的关系:
|
|
上述 match 指的是第一块使用 ixgbe 驱动的网卡。
如果当此 dev_id 节只针对 一个 网络设备,且使用 特定名字(name (scalar)) 来识别,那么 netplan 提供了一个简化的写法,即用该设备的 dev_name 作为 dev_id。
所以,如下两段配置代码是等效的:
|
|
|
|
我们在实践中通常看到的是上面的简写形式;但请大家记住那只是简写形式,dev_id 与 dev_name 在本质上还是有区别的。
Anyway 我们在准备阶段用 iw dev
命令获得的无线网络设备名(dev_name)wlp3s0,在这里就得用上了。
dhcp4 (bool)
是否使用路由器的 DCHP 服务。默认为关闭 false
。如果计划让路由器来分配 IP 地址,则需设置为 true
。
addresses (sequence of scalars)
先看例子,讲解起来更方便:
|
|
从上面例子中可见,我们可以通过 addresses 属性,为 dev_id 设置一个或多个静态地址。
静态地址的形式为 addr/prefixlen
。
addr
可以是 IPv4 或 IPv6 的地址;prefixlen
是子网长度(bits),所以 24 就代表着我们常见的255.255.255.0
这样的子网掩码。
gateway4, gateway6 (scalar)
我们通过这两个属性来设置默认网关。 例:gateway4: 172.16.0.1
,gateway6: "2001:4::1"
。
nameservers (mapping)
用以设置 DNS 服务器以及搜索域。例子足以说明一切:
|
|
optional (bool)
设置此设备是否为启动可选。如果设置为 false(非可选),networkd 将在系统启动时等待此设备;若设置为 true(可选),则启动时不等待。
目前,只有 networkd 渲染器/呈现器(renderer)支持此选项(networkd、渲染器/呈现器 相关内容见 Ubuntu Server 18.04 无线网络接入配置 - 1)。此选项的默认值为 false(非可选)。
以上介绍的属性,是对于所有类型的网络设备(如 ethernet,wifi)都通用的属性,下面讲适用于 wifi 类型网络设备的专门属性。
access-points (mapping)
access-points 这一属性的结构如下:
|
|
access-points 这一节基本上也是不言自明的。
mode 目前有三种类型:
- infrastructure:默认,我们一般的接入计算机选这种即可;
- ap:创建一个供其他设备连接的 access point;
- adhoc:用于无中心 access piont 的点对点网络;
注意:官方文档在这里特意强调 networkd 并 不 原生支持wifi,因此如果我们使用默认的 networkd renderer,则需要安装 wpasupplicant。
netplan 文件中还有很多属性可供配置,本文就不一一介绍了,为了配置 Ubuntu Server 的 WiFi 连接,咱们了解到这里就足够了。感兴趣的同学,可以去阅读官方 reference。
下面给出两个实例。
第一个例子是我自己笔记本的配置文件 50-cloud-init.yaml
:
第二个例子是我参考的网上例子(Ubuntu-Server18.04开启无线网卡并配置静态ip):
|
|
两者区别在于:
- 我使用 netplan 体系默认的 networkd 作为 renderer(因此不需要明确指明);而网参版指定 renderer 为 NetworkManager;
- 我让路由器使用 DHCP 给计算机提供 IP 等网络配置(当然,我会在路由器上做静态地址设置);而网参版在 yaml 文件中配置了服务器的静态 IP 地址。
有了上面的说明,以及这两个例子,99% 的读者应该能依据自己的实际情况配置相应的 network yaml 文件了。
剩下要做的,是让这些配置生效,具体方法详见下一篇:Ubuntu Server 18.04 无线网络接入配置 - 3 - 配置文件生效。