1. 前言
《好好学Linux:Linux系统配置静态IP》一文中,描述了 CentOS7 和 Ubuntu16.04 系统中配置静态IP的方法。
但是,Ubuntu18之后的版本,网络配置方法发生了较大的变更,本文学习一下新的配置方法。
2. 单网卡静态IP配置方法
1、编辑网卡配置文件
1 | vim /etc/netplan/01-network-manager-all.yaml |
如下修改:
1 | # Let NetworkManager manage all devices on this system |
其中 dhcp4 参数的值可以改为 no
,和 false
等价。
2、使配置生效
1 | netplan apply |
3、验证配置
1 | ip addr show dev eth0 |
3. 多网卡静态IP配置方法
3.1. 配置方法一:单文件配置
编辑网卡配置文件
1 | vim /etc/netplan/01-network-manager-all.yaml |
如下修改:
1 | # Let NetworkManager manage all devices on this system |
3.2. 配置方法二:多文件配置
拷贝网卡配置文件
1 | cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/02-network-manager-all.yaml |
如下修改:
1 | # Let NetworkManager manage all devices on this system |
4. 临时配置固定IP
给 eth0 配置两个固定IP:
1 | ip addr add 192.168.1.100/24 dev eth0 |
5. 配置默认网关
配置文件中,可以通过 gateway4
指定网关。
如果多个网卡有不同的网关,该怎样指定默认网关?
答:在 netplan 配置文件中,我们可以针对不同的网卡配置不同的网关。但是,请不要这么做,因为一个系统只能有一个默认网关,否则会导致混乱出现网络问题。
如果有多个网卡,每个网卡的网关不同,那么请选择出想要配置为默认网关的网卡,给该网卡配置上网关,其他的网卡不要配置网关。
6. 扩展:禁用和启用指定的网卡
如果一台主机上有多个网卡,想要禁用和启用其中一张或多张网卡,可以使用下面的方法。
6.1. 临时禁用和启用
1 | ifconfig eth1 down # 禁用 |
6.2. 永久禁用和启用
6.2.1. 基于netplan(推荐)
永久禁用方法:
1、修改netplay配置
1 | vim /etc/netplan/01-network-manager-all.yaml |
添加:
1 | network: |
2、应用netplan配置
1 | netplan apply |
3、重启网络服务
1 | systemctl restart systemd-networkd |
永久启用方法:
修改netplay配置(删除其中的禁用配置),应用netplan配置,重启网络服务。
6.2.2. 基于interfaces
使用 /etc/network/interfaces(如果我们的系统使用此旧方法配置网络),这种方法在新版的Ubuntu中并不常见,因为Netplan取代了/etc/network/interfaces文件,但如果我们的系统依然使用它,可以使用下面的方法。
永久禁用方法:
1、修改interfaces配置
1 | /etc/network/interfaces |
将指定的网卡设置为不自动启动
1 | auto eth0 |
2、重启网络服务
1 | systemctl restart networking |
永久启用方法:
修改interfaces配置(删除其中的禁用配置),重启网络服务。
6.2.3. 基于initramfs
永久禁用方法:
1、配置 blacklist.conf
1 | vim /etc/modprobe.d/blacklist.conf |
在文件最后添加:
1 | blacklist eth1 |
2、更新initramfs
1 | update-initramfs -u |
该命令用于更新 Linux 系统的初始化 RAM 磁盘文件系统(initramfs)。
在系统引导过程中,initramfs 用于加载必要的驱动程序并初始化硬件,以便在挂载根文件系统之前完成这些工作。该命令生成一个新的 initramfs映像文件并更新符号链接到最新的映像文件。在更新内核或任何与内核相关的配置文件更改之后,通常会运行此命令,以确保系统可以正确引导。
3、重启主机进行验证(可选)
1 | reboot |
永久启用方法:
blacklist.conf 删除禁用的配置,更新initramfs。
7. 扩展:Netplan 和 NetworkManager的关系
在 Ubuntu 和一些其他基于 Debian 的 Linux 发行版中,Netplan 和 NetworkManager 有着紧密的合作关系。
Netplan 是一个配置网络的工具,它使用简单的 YAML 文件来描述网络接口的配置。Netplan 是 Ubuntu 17.10 以后的版本中引入的默认网络配置工具,用于统一和简化网络配置过程。Netplan 本身并不直接管理网络连接;它是一个抽象层,将配置转换成底层网络管理服务可以理解的格式。
Netplan 支持将配置转换给以下两种网络后端服务之一:
- systemd-networkd: 主要用于服务器和无界面系统,是一个系统服务,用于配置网络接口。
- NetworkManager: 适用于桌面和服务器环境,特别是需要频繁连接和断开网络的场景。NetworkManager 提供了丰富的命令行界面 (CLI) 和图形用户界面 (GUI),便于用户进行网络配置。
这些后端是 Netplan 生成的配置的 “消费者”,负责实际的网络接口管理工作。
NetworkManager 是一个动态网络控制和配置系统,可以响应网络环境的变化并进行相应的调整。NetworkManager 旨在简化和自动化网络配置和连接管理,尤其是在 WLAN(无线局域网)和移动宽带连接方面。
它们的关系在使用上很简单:
1、系统管理员或用户编写一个 YAML 格式的 Netplan 配置文件,定义了网络接口的期望配置。
2、运行 netplan apply
命令时,Netplan 读取 YAML 文件,然后根据当前系统所使用的网络后端(systemd-networkd 或 NetworkManager),生成相应的配置。
- 如果是 NetworkManager,Netplan 将生成 NetworkManager 可以理解的配置,并将这些配置置于
/etc/NetworkManager/system-connections/
目录下。 - 如果是 systemd-networkd,Netplan 将生成适当的单位文件放在
/etc/systemd/network/
目录下。
3、NetworkManager 或 systemd-networkd 接管,应用这些配置,并管理网络连接。
由此,Netplan 作为一个中间层,可以无缝地与 NetworkManager(或 systemd-networkd)配合工作,让用户能够通过统一的接口来处理网络配置,而无需直接与底层网络管理工具交互。这降低了配置的复杂性,特别是在有多种网络接口和连接类型需要管理的环境中。
8. 设置静态IP无效问题
8.1. 问题描述
/etc/netplan/01-network-manager-all.yaml 配置为:
1 | network: |
上面的配置中给ens5f0网卡配置了一个静态IP 172.22.3.211 ,但是实际上该网卡获取到的IP为 172.22.3.56
8.2. 问题排查解决
1、重新执行 netplan apply
,无效。
2、重新启动NetworkManager,systemctl restart NetworkManager
,无效。
3、重启主机,无效。
4、查看查看网络接口状态和配置信息 nmcli
,发现了异常:
1 | ens5f0:已连接 到 配置 1 |
ens5f0 正常应该连接到 netplan-ens5f0,但是上面显示连接到配置1,这明显是有问题的。
5、检查网络配置方式
在 Linux 系统中,网络配置可能通过多种不同的方式进行管理:
- 命令行工具:如 nmcli(NetworkManager 的命令行界面)和 netplan。
- 配置文件:如
/etc/network/interfaces
(传统 Debian 配置),/etc/netplan/*.yaml
文件(Ubuntu 的 netplan 工具),或者/etc/NetworkManager/system-connections/
目录下的文件(由 NetworkManager 管理)。 - 图形用户界面:如 GNOME 的网络设置或其他桌面环境提供的网络管理器GUI。
在检查 /etc/NetworkManager/system-connections/
目录下的文件时,找到了配置1。由此证明是NetworkManager和netplan协调工作时出现了问题。
1 | # cat /etc/NetworkManager/system-connections/'配置 1.nmconnection' |
解决办法:删除配置1,重新生成NetworkManager配置。
1 | mv /etc/NetworkManager/system-connections/'配置 1.nmconnection' ~ |
执行上面的命令之后,IP成功设置为 172.22.3.211 ,但是 /etc/NetworkManager/system-connections/ 目录中并没有生成新的配置,且不管它。