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 |
|
使用方法
配置
显然,没有配置,netplan 什么也做不了。
最有用的配置片段(通过 dhcp 显示内容)如下所示:
1 |
|
此配置将以 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 |
|
为了设置一个静态 IP 地址,可使用地址键,它由一个地址列表 (IPv4 或 IPv6)组成,地址一般连同子网前缀 (例如 10.10.10.2/24)。此外还可以提供网关和 DNS 信息:
1 |
|
如果出现如下提示,其使用 routes 替换 gateway,gateway 已经被弃用
1 |
|
用 DHCP 连接多个接口
许多系统都包括不止一个的网络接口。服务器通常需要连接到多个网络,并且可能要求连接到 Internet 的流量只通过一个某个特定的接口,尽管它们都提供了一个有效的网关。
通过为在 DHCP 上检索的路由指定一个度量,可以实现在 DHCP 上所需的精确路由,这将确保某些路由优于其他路由。在这个例子中,en3s0 比 en4s0 更受欢迎,因为它有一个更低的路由度量:
1 |
|
使用静态 IPV4 并自动获取 IPV6
1 |
|
连接到开放的无线网络
Netplan 很容易支持连接到一个开放的无线网络 (一个没有密码保护的网络) ,只需要定义接入点:
1 |
|
连接到 WPA 个人无线网络
无线设备使用“ wifis”键,并与有线以太网设备共享相同的配置选项。无线接驳点名称及密码亦应指定:
1 |
|
连接到 WPA 企业无线网络
使用 WPA 或 WPA2 Enterprise 进行安全保护的无线网络也很常见,这需要额外的身份验证参数。
例如,如果使用 WPA-EAP 和 TTLS 保护网络:
1 |
|
或者,如果使用 WPA-EAP 和 TLS 保护网络:
1 |
|
在单个接口上使用多个地址
地址键可以获取一个地址列表来分配给一个接口:
1 |
|
使用多个网关的多个地址
与上面的示例类似,可以用多个网关配置具有多个地址的接口。
1 |
|
假设有多个地址,每个地址都有自己的网关,我们在这里不指定网关,而是配置单独路由到 0.0.0/0 (无处不在),并使用使用子网的网关地址。且应该调整 metric 值,以便路由按预期的方式进行。
DHCP 可用于接收接口的一个 IP 地址。在这种情况下,该地址的默认路由将自动配置 metric 的值为 100。作为路由下的一个条目的简写,网关可以设置为其中一个子网的网关地址。在这种情况下,可以从路由中省略该子网的路由。它的 metric 值将设置为100。
复杂的配置例子
1 |
|
配置参考
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 |
|
- 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 |
|
- macaddress: MAC 地址,设置设备的 MAC 地址。 MAC 地址必须是“ XX: XX: XX: XX: XX: XX: XX: XX: XX”的格式。
注意: 由于与 udev 中的设备重命名的交互作用,对于仅通过名称匹配并由 networkd 呈现的设备,这将不可靠地工作。在设置 MAC 地址时通过 MAC 匹配设备。
例子:
1 |
|
- mtu: 数值, 为接口设置最大传输单元/值,默认值为 1500,有效值取决于你的网络接口。
注意: 由于与 udev 中的设备重命名的交互作用,对于仅通过名称匹配并由 networkd 呈现的设备,这将不可靠地工作。设置 MTU 时通过 MAC 匹配设备。 - optional: 布尔值
引导不需要可选设备。正常情况下,networkd 将等待一段时间来配置设备,然后再继续启动。但是,如果设备被标记为可选,网络将不会等待它。这只有 networkd 支持,默认值为 false。
例子:
1 |
|
- optional-addresses: 标量序列, 指定不需要设备联机考虑的地址类型。这会在引导时更改后端的行为,以避免等待标记为可选的地址,从而更快地将接口视为“可用”的。这不会禁用这些地址,这些地址无论如何都会被提取出来。
例子:
1 |
|
- 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 开始的整数。