共计 3813 个字符,预计需要花费 10 分钟才能阅读完成。
介绍
刚把小鸡玩炸了,索性重装了个Debian 12系统,想要配置下静态IP,发现找不到/etc/network/interfaces了,便去查了了Debian 12 的官方文档,发现其不再使用/etc/network/interfaces,在服务器版已经采用Netplan了。
桌面版本使用NetworkManager (NetworkManager适合桌面GUI使用)
服务器版本使用 netplan网络配置 来配置 systemd-networkd (不过netplan也支持NetworkManager作为后端)
网上也有教程可以切换位传统的那种配置方法,但我们总得与时俱进不是,我们今天就来看下如何使用Netplan配置静态IP。
工作原理
Netplan 从 /etc/netplan/*.yaml 读取配置,配置可以是管理员或者系统安装人员配置; 也可以是云镜像或者其他操作系统部署设施自动生成。 在系统启动阶段早期, Netplan 在 /run 目录生成好配置文件并将设备控制权交给相关后台程序。
Netplan 目前支持以下两种 网络管理工具 :
- NetworkManager
- Systemd-networkd
一言以蔽之,从前你需要根据不同的管理工具编写网络配置,现在 Netplan 将管理工具差异性给屏蔽了。 你只需按照 Netplan 规范编写 YAML 配置,不管底层管理工具是啥,一份配置走天下!
使用指引
默认在 /etc/netplan
目录下有一个 01-netcfg.yaml
内容如下:
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens2:
dhcp4: yes
备注:
如果安装操作系统的时耦没有自动创建一个 YAML
配置文件,可以通过以下命令先生成一个:
sudo netplan generate
不过,对于Ubuntu的desktop, server, cloud版本,自动生成的配置文件会采用不同的名字,例如 01-network-manager-all.yaml
或 01-netcfg.yaml
。
- 编辑
/etc/netplan/01-netcfg.yaml
配置
很显然,没有配置, Netplan 啥都做不了。 最简单有用的配置片段如下:
network:
version: 2
renderer: NetworkManager
这个配置让 NetworkManager 管理所有网络设备 (默认,只要检测到以太网设备接线,便以 DHCP 模式启动该设备)。
使用 Systemd-networkd ,则不会自动启动网络设备; 每个需要启用的网卡均需要在 /etc/netplan 配置文件中指定配置。 网络配置示例如下:
network:
ethernets:
enp0s3:
addresses: []
dhcp4: true
optional: true
enp0s8:
addresses: [192.168.56.3/24]
dhcp4: no
optional: true
version: 2
这个配置为 enp0s3 网卡开启 DHCP 自动获取地址; 为 enp0s8 网卡配置了一个静态 IP 192.168.56.3 ,掩码是 24 位。
命令
netplan 操作命令提供两个子命令:
- netplan generate :以 /etc/netplan 配置为管理工具生成配置;
- netplan apply :应用配置(以便生效),必要时重启管理工具;
因此,调整 /etc/netplan 配置后,需要执行以下命令方能生效:
$ netplan apply
配置示例
DHCP
network:
ethernets:
enp0s3:
addresses: []
dhcp4: true
version: 2
静态配置
network:
ethernets:
enp0s8:
addresses: [10.0.0.2/24]
gateway4: 10.0.0.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp4: no
version: 2
或者
network:
version: 2
renderer: networkd
ethernets:
ens2:
dhcp4: no
dhcp6: no
addresses: [192.168.122.11/24, ]
gateway4: 192.168.122.1
nameservers:
addresses: [192.168.122.1, ]
行以下命令生效(注意在控制台执行,否则网络会断开):
sudo netplan apply
验证检查 ifconfig -a
可以看到IP地址已经修改成静态配置IP地址
netplan配置一个网卡多个IP
有时候需要在一个网卡上配置多个IP地址,实现单臂网桥路由,netplan也支持 interface alias 。配置方法很简单:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.100.1.38/24
- 10.100.1.39/24
gateway4: 10.100.1.1
或者:
ethernets:
enp3s0:
addresses: [ 10.100.1.38/24, 10.100.1.39/24 ]
执行 netplan apply
可以看到系统网卡:
enp3s0
enp3s0:1
分配了IP地址 10.100.1.38
和 10.100.1.39
静态IPV4+静态IPV6配置
network:
ethernets:
eth0:
addresses:
- 2a04:xxxx:xxxx:xxxx::1/64
- x.x.x.x/24
#dhcp4: true
gateway4: x.x.x.1
gateway6: fe80::1
nameservers:
addresses:
- 8.8.8.8
- 2001:4860:4860::8888
#match:
#macaddress: 00:20:47:bf:aa:24
#set-name: eth0
version: 2
动态IPV4+静态IPV6配置
network:
ethernets:
eth0:
addresses:
- 2a04:xxxx:xxxx:xxxx::1/64
dhcp4: true
gateway6: fe80::1
#match:
#macaddress: 00:20:47:bf:aa:24
#set-name: eth0
version: 2
这是一个Netplan配置文件的示例,用于配置Debian或基于Ubuntu的系统的网络接口。以下是对这个配置文件的详细解释:
network:
version: 2
network
:这是Netplan配置文件的顶级部分,表示这是一个网络配置。version
:指定Netplan配置文件的版本。在这个示例中,版本为2,这是Netplan的第二个主要版本。
ethernets:
eth0:
ethernets
:这个部分包含了以太网接口的配置信息。在这里,我们正在配置一个名为eth0
的以太网接口。
addresses:
- 2a04:bdc7:100:2d47::1/64
addresses
:这里指定了以太网接口的IPv6地址。在示例中,IPv6地址是2a04:bdc7:100:2d47::1/64
,这是一个IPv6地址及其子网掩码的表示。
dhcp4: true
dhcp4
:这一行指定以太网接口是否应该使用IPv4 DHCP协议来获取IP地址。在这个示例中,设置为true
,表示启用IPv4 DHCP。
gateway6: fe80::1
gateway6
:这里指定了IPv6的网关地址。在示例中,IPv6网关是fe80::1
。
match:
macaddress: 00:20:47:bf:aa:35
match
:这个部分用于配置匹配规则,以便将此配置应用于特定的网络接口。在示例中,我们使用MAC地址来匹配接口。只有当接口的MAC地址与00:20:47:bf:aa:35
匹配时,才会应用这个配置。
set-name: eth0
set-name
:这里指定了以太网接口的名称。在示例中,将接口名称设置为eth0
。
这个配置文件的目的是将以太网接口eth0
配置为使用IPv4 DHCP获取IP地址,并分配一个IPv6地址和网关。它还包括一个匹配规则,以确保这个配置只适用于具有特定MAC地址的接口,并将接口名称设置为eth0
。你可以根据需要进行修改,以适应你的网络配置需求。
References
https://linux.fasionchan.com/zh_CN/latest/administration/network/netplan.html
https://cloud-atlas.readthedocs.io/zh_CN/latest/linux/ubuntu_linux/network/netplan.html
https://cloud-atlas.readthedocs.io/zh_CN/latest/linux/ubuntu_linux/network/switch_nm.html