Ubuntu 网络配置

Ubuntu 网络配置

Ubuntu 从 17.01 开始之后的版本,都已放弃在/etc/network/interfaces 里固定 IP 的配置,而是改成 Netplan 方式,Netplan 是一个在 linux 系统上轻松配置网络的实用工具。您只需创建所需网络接口的 YAML 描述以及每个接口应配置的功能。根据此描述,Netplan 将为您选择的渲染器工具生成所有必要的配置。

Ubuntu Server 与 Ubuntu Desktop 的不同: Desktop 版本默认安装 NetworkManager,并且默认使用 NetworkManager 管理网络,Ubuntu 的 Server 版本只有终端界面,没有桌面 GUI,且 Server 版本不会安装 NetworkManager,需要手动安装。

安装方式: `sudo apt install network-manager

`

工作方式

Netplan 从 /etc/Netplan/*.yaml 读取网络配置,这些文件由管理员、安装人员、云映像实例化或其他操作系统部署编写。在系统引导初期,Netplan 将在 /run 中生成特定于后端的配置文件,然后再将设备的控制权移交给特定的网络守护进程。

Netplan 目前支持以下两种网络管理工具 (渲染器) :

1
2
NetworkManager
Systemd-networkd

使用方法

配置

显然,没有配置,netplan 什么也做不了。

最有用的配置片段(通过 dhcp 显示内容)如下所示:

1
2
3
network:
version: 2
renderer: NetworkManager

此配置将以 NetworkManager 作为渲染器来管理所有设备(默认情况下,一旦检测到 carrier,以太网设备就将通过 DHCP 来启动)。

而使用 networkd 作为渲染器则不会通过 DHCP 来自动启动设备;而是将每个接口设备都在 /etc/netplan 中的文件中进行指定和配置以便在 networkd 中使用。

命令

Netplan 通过如下的几个子命令来驱动网络行为:

  • netplan generate:使用 /etc/netplan 来为渲染器生成所需的配置
  • netplan apply:应用渲染器的配置,根据需要重新启动它们。
  • netplan try:应用配置,等待用户确认;如果网络中断或未给出确认,将回滚。

常见的 Netplan 配置示例

要配置 netplan,请将配置文件保存在 /etc/netplan/ 下的 *.yaml 中 (如 /etc/netplan/config.yaml) ,然后运行 sudo netplan apply,此命令可将解析配置并应用于系统。写入 /etc/netplan/ 下的配置将在重新引导之间保持。

使用 DHCP 和静态寻址

为了让名为‘ enp3s0’的以太网设备通过 DHCP 获得一个地址,创建一个具有以下内容的 YAML 文件:

1
2
3
4
5
6
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true

为了设置一个静态 IP 地址,可使用地址键,它由一个地址列表 (IPv4 或 IPv6)组成,地址一般连同子网前缀 (例如 10.10.10.2/24)。此外还可以提供网关和 DNS 信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.10.10.2/24
routes:
- to: default
via: 10.10.10.1
nameservers:
search: [mydomain, otherdomain]
addresses: [10.10.10.1, 1.1.1.1]

如果出现如下提示,其使用 routes 替换 gateway,gateway 已经被弃用

1
2
** (process:619341): WARNING **: 19:46:34.642: `gateway4` has been deprecated, use default routes instead.
See the 'Default routes' section of the documentation for more details.

用 DHCP 连接多个接口

许多系统都包括不止一个的网络接口。服务器通常需要连接到多个网络,并且可能要求连接到 Internet 的流量只通过一个某个特定的接口,尽管它们都提供了一个有效的网关。

通过为在 DHCP 上检索的路由指定一个度量,可以实现在 DHCP 上所需的精确路由,这将确保某些路由优于其他路由。在这个例子中,en3s0 比 en4s0 更受欢迎,因为它有一个更低的路由度量:

1
2
3
4
5
6
7
8
9
10
11
network:
version: 2
ethernets:
en3s0:
dhcp4: yes
dhcp4-overrides:
route-metric: 100
en4s0:
dhcp4: yes
dhcp4-overrides:
route-metric: 200

使用静态 IPV4 并自动获取 IPV6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
network:
version: 2
renderer: NetworkManager
ethernets:
ens160:
dhcp4: no
addresses:
- 192.168.100.105/24
routes:
- to: default
via: 192.168.100.101
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
dhcp6: true

连接到开放的无线网络

Netplan 很容易支持连接到一个开放的无线网络 (一个没有密码保护的网络) ,只需要定义接入点:

1
2
3
4
5
6
7
network:
version: 2
wifis:
wl0:
access-points:
opennetwork: {}
dhcp4: yes

连接到 WPA 个人无线网络

无线设备使用“ wifis”键,并与有线以太网设备共享相同的配置选项。无线接驳点名称及密码亦应指定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
network:
version: 2
renderer: networkd
wifis:
wlp2s0b1:
dhcp4: no
dhcp6: no
addresses: [192.168.0.21/24]
gateway4: 192.168.0.1
nameservers:
addresses: [192.168.0.1, 8.8.8.8]
access-points:
"network_ssid_name":
password: "**********"

连接到 WPA 企业无线网络

使用 WPA 或 WPA2 Enterprise 进行安全保护的无线网络也很常见,这需要额外的身份验证参数。

例如,如果使用 WPA-EAP 和 TTLS 保护网络:

1
2
3
4
5
6
7
8
9
10
11
12
13
network:
version: 2
wifis:
wl0:
access-points:
workplace:
auth:
key-management: eap
method: ttls
anonymous-identity: "@internal.example.com"
identity: "joe@internal.example.com"
password: "v3ryS3kr1t"
dhcp4: yes

或者,如果使用 WPA-EAP 和 TLS 保护网络:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
network:
version: 2
wifis:
wl0:
access-points:
university:
auth:
key-management: eap
method: tls
anonymous-identity: "@cust.example.com"
identity: "cert-joe@cust.example.com"
ca-certificate: /etc/ssl/cust-cacrt.pem
client-certificate: /etc/ssl/cust-crt.pem
client-key: /etc/ssl/cust-key.pem
client-key-password: "d3cryptPr1v4t3K3y"
dhcp4: yes

在单个接口上使用多个地址

地址键可以获取一个地址列表来分配给一个接口:

1
2
3
4
5
6
7
8
9
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.100.1.38/24
- 10.100.1.39/24
gateway4: 10.100.1.1

使用多个网关的多个地址

与上面的示例类似,可以用多个网关配置具有多个地址的接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 9.0.0.9/24
- 10.0.0.10/24
- 11.0.0.11/24
#gateway4: # unset, since we configure routes below
routes:
- to: 0.0.0.0/0
via: 9.0.0.1
metric: 100
- to: 0.0.0.0/0
via: 10.0.0.1
metric: 100
- to: 0.0.0.0/0
via: 11.0.0.1
metric: 100

假设有多个地址,每个地址都有自己的网关,我们在这里不指定网关,而是配置单独路由到 0.0.0/0 (无处不在),并使用使用子网的网关地址。且应该调整 metric 值,以便路由按预期的方式进行。
DHCP 可用于接收接口的一个 IP 地址。在这种情况下,该地址的默认路由将自动配置 metric 的值为 100。作为路由下的一个条目的简写,网关可以设置为其中一个子网的网关地址。在这种情况下,可以从路由中省略该子网的路由。它的 metric 值将设置为100。

复杂的配置例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
network:
version: 2
# if specified, can only realistically have that value, as networkd cannot
# render wifi/3G.
renderer: NetworkManager
ethernets:
# opaque ID for physical interfaces, only referred to by other stanzas
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"
gateway4: 192.168.14.1
gateway6: "2001:1::2"
nameservers:
search: [foo.local, bar.local]
addresses: [8.8.8.8]
routes:
- 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
# only networkd can render on-link routes and routing policies
renderer: networkd
lom:
match:
driver: ixgbe
# you are responsible for setting tight enough match rules
# that only match one device if you use set-name
set-name: lom1
dhcp6: true
switchports:
# all cards on second PCI bus unconfigured by
# themselves, will be added to br0 below
match:
name: enp2*
mtu: 1280
wifis:
all-wlans:
# useful on a system where you know there is
# only ever going to be one device
match: {}
access-points:
"Joe's home":
# mode defaults to "infrastructure" (client)
password: "s3kr1t"
# this creates an AP on wlp1s0 using hostapd
# no match rules, thus the ID is the interface name
wlp1s0:
access-points:
"guest":
mode: ap
# no WPA config implies default of open
bridges:
# the key name is the name for virtual (created) interfaces
# no match: and set-name: allowed
br0:
# IDs of the components; switchports expands into multiple interfaces
interfaces: [wlp1s0, switchports]
dhcp4: true

配置参考

netplan 配置文件顶级节点为 network: mapping,其中包含 vertion: 2 (curtin、MaaS 等目前使用 1)。然后可根据它们的类型对设备定义进行分组,比如物理设备 ethernets: 、 modem: 、 wifis: 等,或虚拟设备 bridges:、bonds 等。我们的渲染器可以理解这些类型,并且后端支持这些类型。

设备的公共属性:

  • renderer: networkd 或 NetworkManager,指定渲染器。renderer 属性可以在设备类型中指定也可以在全局中指定。
  • dhcp4: 布尔值,是否开启 IPv4 的 dhcp。默认启用 dhcp4。
  • dhcp6: 布尔值,是否开启 IPv6 的 dhcp。默认关闭 dhcp6
  • ipv6-mtu: 设置 ipv6-mtu,注意,这是一个不寻常的要求,需要 ipv6-mtu 特性。
  • ipv6-privacy: 布尔值,为指定的接口启用 ipv6 隐私扩展 (RFC 4941), 并选择临时地址。默认为 false。
  • link-local: ipv4 或 ipv6 序列,将链接本地地址配置为弹出。它们分别允许 IPv4 和 IPv6 链路本地寻址。如果未定义此字段,则默认设置为只启用 IPv6 链路本地地址。如果该字段被定义为一个空集,则 IPv6 链路本地地址和 IPv4 链路本地地址将被禁用。
    只启用 ipv4 的 linklocal: link-local: [ ipv4 ]
    只启用 ipv4 的 linklocal: link-local: [ ipv4, ipv6 ]
    禁用 linklocal: link-local: [ ]
  • critical: 布尔值,为连接指定为“对系统至关重要”,这意味着在重新启动守护进程时将特别注意不释放分配的 IP。(网络管理器不能识别)
  • dhcp-identifier: (仅限网络和后端)设置 DHCPv4 客户端标识符的源。如果指定了 MAC,则使用链路的 MAC 地址。如果省略此选项,或者指定 DUID,networkd 将通过组合链接的 IAID 和 DUID 为接口生成一个符合 rfc4361 的客户机标识符。
  • dhcp4-overrides: 映射,(仅限于网络/后端)重写默认的 DHCP 行为。
  • dhcp6-overrides: 映射,(仅限于网络/后端)重写默认的 DHCP 行为。
  • accept-ra: 布尔值, 接受有内核自己配置 IPv6 的路由器广告。启用时,接受路由器广告。禁用时,不要响应路由器广告。如果取消设置,使用主机内核默认设置。
  • addresses: 标量和映射序列。
    除了通过 DHCP 或 RA 接收的地址之外,还要向接口添加静态地址。每个序列条目都采用 CIDR 表示法,即 addr/prefixlen 形式。Addr 是一个 IPv4 或 IPv6 地址,由 inet _ pton (3) 识别,并以子网位数作为前缀。
    对于虚拟设备 (桥接器 bridges、连接器、 vlan) ,如果没有配置地址并禁用 DHCP,那么接口仍然可以联机,但不能从网络寻址。
    除了地址本身,可以指定配置参数作为映射。当前支持的选项有:
    lifetime:数值 (0-100);label: ip 地址标签
    例子:
1
2
3
4
5
6
7
ethernets:
eth0:
addresses:
- 10.0.0.15/24:
lifetime: 0
label: "maas"
- "2001:1::1/64"
  • ipv6-address-generation:数值 (0-100),暂不解释
  • ipv6-address-token:数值 (0-100),暂不解释
  • gateway4/gateway6: ip 地址
    为 IPv4/6 设置默认网关。网关 ip 必须是 inet _ pton (3) 能够识别的形式。在你的全局配置中应该只有一个网关设置,以使它清晰明了。如果您需要多个默认路由,请通过路由策略定义它们。
  • nameservers: DNS 服务器或搜索域,设置 DNS 服务器和搜索域,用于手动地址配置。
    有两个支持字段:
    addresses: 是一个类似于网关的 IPv4 或 IPv6 地址列表,而 search: 是一个搜索域名列表。
    例子:
1
2
3
4
5
6
ethernets:
id0:
[...]
nameservers:
search: [lab, home]
addresses: [8.8.8.8, "FEDC::1"]
  • macaddress: MAC 地址,设置设备的 MAC 地址。 MAC 地址必须是“ XX: XX: XX: XX: XX: XX: XX: XX: XX”的格式。
    注意: 由于与 udev 中的设备重命名的交互作用,对于仅通过名称匹配并由 networkd 呈现的设备,这将不可靠地工作。在设置 MAC 地址时通过 MAC 匹配设备。
    例子:
1
2
3
4
5
6
ethernets:
id0:
match:
macaddress: 52:54:00:6b:3c:58
[...]
macaddress: 52:54:00:6b:3c:59
  • mtu: 数值, 为接口设置最大传输单元/值,默认值为 1500,有效值取决于你的网络接口。
    注意: 由于与 udev 中的设备重命名的交互作用,对于仅通过名称匹配并由 networkd 呈现的设备,这将不可靠地工作。设置 MTU 时通过 MAC 匹配设备。
  • optional: 布尔值
    引导不需要可选设备。正常情况下,networkd 将等待一段时间来配置设备,然后再继续启动。但是,如果设备被标记为可选,网络将不会等待它。这只有 networkd 支持,默认值为 false。
    例子:
1
2
3
4
5
6
ethernets:
eth7:
# this is plugged into a test network that is often
# down - don't wait for it to come up during boot.
dhcp4: true
optional: true
  • optional-addresses: 标量序列, 指定不需要设备联机考虑的地址类型。这会在引导时更改后端的行为,以避免等待标记为可选的地址,从而更快地将接口视为“可用”的。这不会禁用这些地址,这些地址无论如何都会被提取出来。
    例子:
1
2
3
4
5
ethernets:
eth7:
dhcp4: true
dhcp6: true
optional-addresses: [ ipv4-ll, dhcp6 ]
  • routes: 映射序列,为设备配置静态路由,详见路由选择
  • routing-policy: 映射序列,为设备配置策略路由,详见路由选择

路由选择

使用 netplan 可以进行复杂的路由选择。标准的静态路由以及使用路由表的策略路由通过 networkd 后端得到支持。
这些选项适用于所有类型的接口。

routes: 映射序列

路由块为接口定义标准的静态路由。必须指定至少到和通过 (除了有作用域: link 的路线,其中只需要到)。
对于 from、 to 和 via,IPv4 和 IPv6 地址都是可识别的,并且必须以 addr/prefixlen 或 addr 的形式。

  • from: IP 地址,为通过该路由的流量设置一个源 IP 地址
  • to: IP 地址,路由的目的地址
  • via: IP 地址,地址到此路由使用的网关
  • on-link: 布尔值,当设置为“ true”时,指定路由是直接连接到接口设备的
  • metric: 正整数值,路由的相对优先级。
  • type: 路由类型,路由的有效类型为“unicast” (default) ,“unreachable”, “blackhole” or “prohibit”, 分别表示 “单播”(默认)、”不可到达”、”黑洞”或”禁止”的意思。
  • scope: 路由范围,可选参数有 “global”, “link”, 或 “host”. NetworkManager 不支持此选项。
  • table: 路由表
    用于路由的表编号。在某些情况下,它可能是在单独的路由表中设置路由有用。它也可以使用要引用路由策略规则,也接受表范围。允许值是从 1 开始的正整数。
    某些值已用于引用特定路由表。
  • mtu: 数值, 路由使用的 MTU (以字节为单位),1-101。
  • congestion-window: 数值,用于路由的拥塞窗口,1-102
  • advertised-receive-window: 数值,路由发布广告的接收窗口,1-102

routing-policy: 映射序列

路由策略块为网络定义了额外的路由策略,其中流量可以根据源 IP、防火墙标记等进行特殊处理。
对于 from、to,IPv4 和 IPv6 地址都是可识别的,并且必须以 addr/prefixlen 或 addr 的形式。

  • from: IP 地址,设置源 IP 地址以匹配此策略规则的流量
  • to: IP 地址,匹配前往指定目的地址的流量
  • table: 路由表
    匹配路线的表编号。在某些情况下,它可能是在单独的路由表中设置路由有用。它也可以使用要引用也接受表参数的路由。允许值是从 1 开始的正整数。
    某些值已用于引用特定路由表。
  • priority: 数值,指定路由策略规则的优先级
  • mark: 数值,将此路由策略规则规则匹配已标记的流量由 iptables 防火墙具有此值。允许的值是正面的从 1 开始的整数。

引用

  1. Netplan网络配置工具的学习_network: version: 2 renderer: networkmanager-CSDN博客

Ubuntu 网络配置
https://hexo.leelurker.com/posts/6979
作者
LeeLurker
发布于
2024年1月24日
许可协议