一个计算机技术爱好者与学习者

0%

好好学Linux:Ubuntu18配置静态IP

1. 前言

《好好学Linux:Linux系统配置静态IP》一文中,描述了 CentOS7 和 Ubuntu16.04 系统中配置静态IP的方法。
但是,Ubuntu18之后的版本,网络配置方法发生了较大的变更,本文学习一下新的配置方法。

2. 单网卡静态IP配置方法

1、编辑网卡配置文件

1
vim /etc/netplan/01-network-manager-all.yaml

如下修改:

1
2
3
4
5
6
7
8
9
10
11
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: false # 禁止动态IP
addresses: [192.168.56.111/24] # IP地址和掩码
gateway4: 192.168.56.1 # 网关
nameservers:
addresses: [180.76.76.76,114.114.114.114] #DNS服务器

其中 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
2
3
4
5
6
7
8
9
10
11
12
13
14
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: false # 禁止动态IP
addresses: [192.168.56.111/24] # IP地址和掩码
gateway4: 192.168.56.1 # 网关
nameservers:
addresses: [180.76.76.76,114.114.114.114] #DNS服务器
eth1:
dhcp4: false
addresses: [172.16.0.111/24]

3.2. 配置方法二:多文件配置

拷贝网卡配置文件

1
2
cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/02-network-manager-all.yaml
vim /etc/netplan/02-network-manager-all.yaml

如下修改:

1
2
3
4
5
6
7
8
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
eth1:
dhcp4: false
addresses: [172.16.0.111/24]

4. 临时配置固定IP

给 eth0 配置两个固定IP:

1
2
ip addr add 192.168.1.100/24 dev eth0
ip addr add 192.168.1.101/24 dev eth0

5. 配置默认网关

配置文件中,可以通过 gateway4 指定网关。

如果多个网卡有不同的网关,该怎样指定默认网关?
答:在 netplan 配置文件中,我们可以针对不同的网卡配置不同的网关。但是,请不要这么做,因为一个系统只能有一个默认网关,否则会导致混乱出现网络问题。
如果有多个网卡,每个网卡的网关不同,那么请选择出想要配置为默认网关的网卡,给该网卡配置上网关,其他的网卡不要配置网关。

6. 扩展:禁用和启用指定的网卡

如果一台主机上有多个网卡,想要禁用和启用其中一张或多张网卡,可以使用下面的方法。

6.1. 临时禁用和启用

1
2
ifconfig eth1 down # 禁用
ifconfig eth1 up # 启用

6.2. 永久禁用和启用

6.2.1. 基于netplan(推荐)

永久禁用方法:
1、修改netplay配置

1
vim /etc/netplan/01-network-manager-all.yaml

添加:

1
2
3
4
5
6
7
network:
version: 2
renderer: NetworkManager
ethernets:
eth1:
dhcp4: false
optional: true

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
2
auto eth0
iface eth0 inet manual

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
2
3
4
5
6
7
8
9
10
11
network:
version: 2
renderer: NetworkManager
ethernets:
ens5f0:
dhcp4: false
addresses: [172.22.3.211/24]
gateway4: 172.22.3.1
ens5f2:
dhcp4: false
optional: true

上面的配置中给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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ens5f0:已连接 到 配置 1
"Intel I350"
ethernet (igb), B4:96:91:12:9E:26, 硬件, mtu 1500
ip4 默认
inet4 172.22.3.56/24
route4 0.0.0.0/0
route4 172.22.3.0/24
inet6 fe80::a0e0:cc7b:xxx:xxx/64
route6 fe80::/64

ens5f2:已连接 到 netplan-ens5f2
"Intel I350"
ethernet (igb), B4:96:91:12:9E:28, 硬件, mtu 1500
inet4 169.254.136.104/16
inet4 169.254.249.45/16
route4 224.0.0.0/4
route4 169.254.0.0/16
route4 169.254.0.0/16
inet6 fe80::b696:91ff:xxx:xxx/64
route6 fe80::/64

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# cat /etc/NetworkManager/system-connections/'配置 1.nmconnection'
[connection]
id=配置 1
uuid=657c4d21-ebc8-48a9-9ccf-41a234060f68
type=ethernet
permissions=
timestamp=1691305627

[ethernet]
mac-address-blacklist=

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

[proxy]

解决办法:删除配置1,重新生成NetworkManager配置。

1
2
mv /etc/NetworkManager/system-connections/'配置 1.nmconnection' ~
netplan apply

执行上面的命令之后,IP成功设置为 172.22.3.211 ,但是 /etc/NetworkManager/system-connections/ 目录中并没有生成新的配置,且不管它。