说明: 本文介绍了 Rocky Linux 9 网络配置的常用命令及方法。对于更深入的网络管理知识,请参阅:Rocky Linux 9 从入门到精通003 — 网络配置(进阶篇),内容涵盖:网卡重命名、网络唤醒(通过网卡唤醒计算机)、网卡聚合绑定(Bonding)等。
IPv4 与 IPv6
在进行 IP 配置之前,我们延伸了解一下 IPv4 与 IPv6 。 IPv4(Internet Protocol version 4)和 IPv6(Internet Protocol version 6)是互联网上用于数据包交换的两个版本的网络层协议。它们是互联网协议套件的核心部分,负责在网络设备之间路由和传递数据。
IPv4
IPv4 是第四版互联网协议,自 1981 年以来一直被广泛使用。IPv4 的特点包括:
- 地址空间: IPv4 使用 32 位地址,这意味着它可以支持大约 42 亿个独特的 IP 地址。
- 地址表示: IPv4 地址通常以点分十进制格式表示,例如 192.168.1.1。
- 地址配置: IPv4 地址可以手动配置(静态)或通过动态主机配置协议(DHCP)自动分配。
- 分片: IPv4 允许在传输过程中对数据包进行分片,这可以由发送端、接收端或中间路由器处理。
由于互联网的快速增长,IPv4 地址已经耗尽,这促使了对更广泛地址空间协议的需求。
IPv6
IPv6 是互联网协议的最新版本,旨在解决 IPv4 地址耗尽的问题,并引入了一些新的特性和改进。IPv6 的特点包括:
- 地址空间: IPv6 使用 128 位地址,极大地扩展了地址空间,可以支持近乎无限数量的独特 IP 地址。
- 地址表示: IPv6 地址通常以冒号分隔的十六进制格式表示,例如 2001:0db8:85a3:0000:0000:8a 2 e:0370:7334。
- 地址配置: IPv6 地址可以通过多种方式配置,包括静态配置、状态无关地址自动配置(SLAAC)和动态主机配置协议版本 6(DHCPv 6)。
- 无分片: IPv6 设计时取消了路由器的分片功能,要求发送端执行路径最大传输单元(PMTU)发现,并发送适合路径上最小链路 MTU 的数据包。
IPv4 与 IPv6 之间的主要区别
- 地址长度: IPv4 是 32 位,IPv6 是 128 位。
- 地址表示法: IPv4 使用点分十进制,而 IPv6 使用冒号分隔的十六进制。
- 地址空间: IPv6 提供了比 IPv4 更广阔的地址空间。
- NAT 转换: 消除 NAT 以将地址空间从 32 位扩展到 128 位。
- IPSec 支持: 在 IPv6 中,IPSec 是核心特性的一部分,但同样也需要进行配置,比如采用 strongswan 等。
- 数据包处理: IPv6 简化了数据包头部,以提高路由效率,并取消了路由器分片功能。
- 自动配置: IPv6 支持更高级的自动配置能力。
- 多播和广播: IPv6 支持多播,但不支持 IPv4 那样的网络广播。取而代之,IPv6 使用多播和邻居发现协议来实现网络上的设备发现和配置。
IPv4 与 IPv6 这些区别反映了互联网协议在安全性、效率、可扩展性方面的进步,同时也提出了新的挑战,例如迁移和兼容性问题。随着 IPv6 逐渐被广泛采用,这些挑战将得到解决。
以下两图为 IPv4 与 IPv6 报文头对比:
网络配置
系统安装完成后,首先需要配置对应 IP 地址,确保我们可以通过 SSH 连接,这样进行命令行操作会更方便。如果您无法查看到对应网络接口,可能的原因:
- 网卡驱动没有正确加载: 可能是系统没有自动加载网卡的驱动程序。可以使用
lspci
或lsusb
命令查看硬件信息,确认网卡设备是否被系统检测到。如果检测到网卡但无法使用,可能需要手动查找并安装适当的 Linux 驱动程序。 - 网卡被禁用: 有时网卡可能在 BIOS/UEFI 中被禁用,或者在系统中被网络管理器配置为禁用状态。
- 网络服务未运行: 如果网络服务(例如 NetworkManager 或 network 服务)没有运行,那么网卡可能不会被正确配置和激活,目前 Rocky Linux 9.3 默认采用 NetworkManager 服务进行网络管理。
- 网卡硬件故障: 这种概率很低,但也不是没有。
正常情况如下:
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 12:f7:e7:b9:9e:13 brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.11.172/24 brd 192.168.11.255 scope global noprefixroute ens18
valid_lft forever preferred_lft forever
inet6 fe80::10f7:e7ff:feb9:9e13/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens18 ethernet connected ens18
lo loopback connected (externally) lo
[root@localhost ~]# nmcli conn show
NAME UUID TYPE DEVICE
ens18 62ad7899-3c31-325a-86c3-43db8ddc2aec ethernet ens18
lo c4e401b0-6f1f-48b5-b1e7-8022a4f40979 loopback lo
网络配置命令 nmcli
对于 IPv4 与 IPv6 有了基础的认识后,下面我们再来说一下网络配置命令 nmcli
,这对于我们设置网络非常重要。
在 Rocky Linux 中使用 nmcli
命令来配置网络连接时,下面是详细配置说明:
-
auto 或 dhcp:自动配置,使用 DHCP 客户端从 DHCP 服务器获取 IP 地址、子网掩码、默认网关和 DNS 服务器等配置信息。
nmcli connection modify <连接名称> ipv4.method auto # 或 nmcli connection modify <连接名称> ipv4.method dhcp
这两个选项都会让网络接口使用动态主机配置协议(DHCP)来自动获取网络配置。
-
manual:手动配置,需要手动指定静态的 IP 地址、子网掩码、默认网关和 DNS 服务器等配置信息。
nmcli connection modify <连接名称> ipv4.method manual ipv4.addresses <IP地址/子网掩码> ipv4.gateway <网关地址> ipv4.dns <DNS地址>
在这种方式下,您需要指定所有必要的网络配置,包括 IP 地址、子网掩码、网关和 DNS 服务器信息。
-
link-local:使用 IPv4 链路本地地址(169.254.0.0/16 范围内的地址),通常不需要进一步的配置。
nmcli connection modify <连接名称> ipv4.method link-local
这种方法允许设备在没有 DHCP 服务器的局域网内进行通信。
-
shared:共享模式,网络接口将共享其连接到的网络,并充当其他设备的网关和 DHCP 服务器。
nmcli connection modify <连接名称> ipv4.method shared
当您希望该设备为连接到它的其他设备提供网络接入时,可以使用这种方式。
-
disabled:禁用 IPv4 配置。
nmcli connection modify <连接名称> ipv4.method disabled
这个选项会关闭 IPv4 网络功能,通常用于仅需要 IPv6 或者不需要任何 IP 层网络配置的场合。
请注意,<连接名称>
应该替换为您想要配置的网络连接名称,您可以通过 nmcli connection show
命令查看所有可用的网络连接名称。另外,当您更改了连接配置之后,需要重新启动网络连接使配置生效:
nmcli connection down <连接名称>
nmcli connection up <连接名称>
配置 IPv4
通过前面的一系列铺垫,我们终于来到了 IPv4 的配置,在登录 Rocky Linux 9.3 后,您可用会发现以前传统的通过 /etc/sysconfig/network-scripts
目录配置网卡信息,Rocky Linux 9.3 下已经不存在了,通过 cat /etc/sysconfig/network-scripts/readme-ifcfg-rh.txt
可以看到对应说明,配置已经迁移至 /etc/NetworkManager/system-connections/
,我们可以通过 nmcli
命令进行配置,下面我们一条一条命令拆解执行。
# 查看设备信息
[root@localhost ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens18 ethernet connecting (getting IP configuration) ens18
lo loopback unmanaged --
# 配置 IPv4 地址
[root@localhost ~]# nmcli connection modify ens18 ipv4.addresses 192.168.11.172/24
# 配置 IPv4网关
[root@localhost ~]# nmcli connection modify ens18 ipv4.gateway 192.168.11.254
# 配置 IPv4 DNS,多个 DNS IP 之间使用双引号 + 空格
[root@localhost ~]# nmcli connection modify ens18 ipv4.dns "114.114.114.114 223.6.6.6"
# 设置 DNS 基础搜索,多个域名之间使用双引号 + 空格
[root@localhost ~]# nmcli connection modify ens18 ipv4.dns-search "rockylinux.cn rockylinux.org"
# 配置 DHCP 为手动模式,不然会出现网络连接一会正常,一会中断的情况。
[root@localhost ~]# nmcli connection modify ens18 ipv4.method manual
# 重新加载网络配置
[root@localhost ~]# nmcli connection down ens18; nmcli connection up ens18
# 查看接口配置信息
[root@localhost ~]# nmcli device show ens18
GENERAL.DEVICE: ens18
GENERAL.TYPE: ethernet
GENERAL.HWADDR: AA:6C:33:A3:47:FE
GENERAL.MTU: 1500
GENERAL.STATE: 70 (connecting (getting IP configuration))
GENERAL. CONNECTION: ens18
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/15
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 192.168.11.172/24
IP4.GATEWAY: 192.168.11.254
IP4.ROUTE[1]: dst = 192.168.11.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.11.254, mt = 100
IP4.DNS[1]: 114.114.114.114
IP6.ADDRESS[1]: fe80::a86c:33ff:fea3:47fe/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024
# 查看 IP 地址
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether aa:6c:33:a3:47:fe brd ff:ff:ff:ff:ff:ff
Altname enp 0 s 18
inet 192.168.11.172/24 brd 192.168.11.255 scope global noprefixroute ens18
Valid_lft forever preferred_lft forever
inet6 fe80::a86c:33ff:fea3:47fe/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# 查看配置文件,如果需要配置多IP,可以修改此配置文件。
[root@localhost ~]# cat /etc/NetworkManager/system-connections/ens18.nmconnection
[connection]
id=ens18
uuid=7f49fd62-02d9-323e-8f35-0c8249647a74
type=ethernet
autoconnect-priority=-999
interface-name=ens18
timestamp=1669365850
[ethernet]
[ipv4]
address1=192.168.11.172/24,192.168.11.254
# address2=192.168.11.145/24,192.168.11.254 # 多 IP 配置
dns=114.114.114.114;223.6.6.6;
dns-search=rockylinux.cn;rockylinux.org;
method=manual
[ipv6]
addr-gen-mode=eui64
method=disabled
[proxy]
# 查看网络连接
[root@localhost ~]# nmcli connection
NAME UUID TYPE DEVICE
ens18 7f49fd62-02d9-323e-8f35-0c8249647a74 ethernet ens18
# 重启网络
[root@localhost ~]# systemctl restart NetworkManager
[root@localhost ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-11-25 03:52:19 EST; 5s ago
Docs: man:NetworkManager(8)
Main PID: 2002 (NetworkManager)
Tasks: 4 (limit: 48930)
Memory: 2.9M
CPU: 105ms
CGroup: /system. slice/NetworkManager. service
└─2002 /usr/sbin/NetworkManager --no-daemon
配置 IPv6
在 Rocky Linux 中配置 IPv6 可以通过多种方式进行,包括使用网络配置文件、nmcli
(NetworkManager 的命令行界面)或者图形用户界面。以下是使用 nmcli
来配置 IPv6 的基本步骤。
# 查看网络连接
nmcli con show
# 配置静态 IPv6 地址
nmcli con mod ens18 ipv6.method manual ipv6.addresses 2001:db8::2/64 ipv6.gateway 2001:db8::1
# 启用自动配置(例如通过 SLAAC)
nmcli con mod ens18 ipv6.method auto
# 启用 DHCPv6
nmcli con mod ens18 ipv6.method dhcp
# 重新启动网络连接以应用更改
nmcli con down ens18;nmcli con up ens18
禁用 IPv6
IPv6 可以在运营商网络或大型互联网企业中会使用到,在中小企业用到的概率不是很大,这时候我们可以彻底禁用 IPv6 。
# 内核层禁用 IPv6
[root@localhost ~]# grubby --update-kernel ALL --args ipv6.disable=1
# 此命令禁用,不会变更 /boot/grub2/grub.cfg 配置文件
[root@localhost ~]# cat /boot/grub2/grub.cfg | grep kernelopts | tail -n 1
set kernelopts="root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap "
# 回滚内核层禁用 IPv6 操作
[root@localhost ~]# grubby --update-kernel ALL --remove-args ipv6.disable
# 验证内核参数是否禁用 IPv6,以下命令实际查看的是 /etc/default/grub 文件。
[root@localhost ~]# grubby --info DEFAULT
index=0
kernel="/boot/vmlinuz-5.14.0-362.8.1.el9_3.x86_64"
args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap ipv6.disable=1"
root="/dev/mapper/rl-root"
initrd="/boot/initramfs-5.14.0-362.8.1.el9_3.x86_64.img"
title="Rocky Linux (5.14.0-362.8.1.el9_3.x86_64) 9.3 (Blue Onyx)"
id="263d8af4bb1d454fbf67662961401825-5.14.0-362.8.1.el9_3.x86_64"
# 禁用 IPv6 后,这时候查看对应的 NetworkManager 日志,会出现以下错误。
[root@localhost ~]# journalctl -f -u NetworkManager
Jan 07 11:02:27 k8s-master-002 NetworkManager[770]: <warn> [1673060547.7163] platform-linux: do-add-ip6-address[2: fe80::f438:916e:4a6d:e55]: failure 95 (Operation not supported)
Jan 07 11:02:29 k8s-master-002 NetworkManager[770]: <warn> [1673060549.7175] platform-linux: do-add-ip6-address[2: fe80::29ee:3c45:cf9d: e3b8]: failure 95 (Operation not supported)
Jan 07 11:02:31 k8s-master-002 NetworkManager[770]: <warn> [1673060551.7191] platform-linux: do-add-ip6-address[2: fe80::6bbb:18d2:20a9:3b3a]: failure 95 (Operation not supported)
Jan 07 11:02:33 k8s-master-002 NetworkManager[770]: <warn> [1673060553.7199] platform-linux: do-add-ip6-address[2: fe80::6ad4:df3f:4258:c7d3]: failure 95 (Operation not supported)
# 这时候还需要通过 nmcli 禁用对应 IPv6,就不会再出现以上错误了。
[root@localhost ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens18 e04856f6-0cfe-3b52-a4a0-c1d4e3ef66cc ethernet ens18
[root@localhost ~]# nmcli connection modify ens18 ipv6.method disabled
[root@localhost ~]# systemctl restart NetworkManager
[root@localhost ~]# nmcli connection up ens18
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
# 重启,生效配置
[root@localhost ~]# reboot
# 验证是否生效
[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap ipv6.disable=1
常见问题
网卡无法自动启动
当设置 systemctl enable NetworkManager
后,网卡无法自动启动,每次都需要执行 nmcli con up enp6s0f0
来启动网卡,这是因为网卡 [connection]
项未设置 autoconnect=true
。
[root@localhost ~]# cat /etc/NetworkManager/system-connections/enp6s0f0.nmconnection
[connection]
id=enp6s0f0
uuid=6cd8f827-4er5-4fc4-9da1-fe746dac0f45
type=ethernet
autoconnect=true # 设置为 true
interface-name=enp6s0f0
[ethernet]
[ipv4]
method=manual
address1=192.168.11.172/24,192.168.11.254
dns=192.168.11.254
may-fail=false
[ipv6]
addr-gen-mode=eui64
method=auto
[proxy]
或者命令行配置
[root@localhost ~]# nmcli connection modify enps6s0f0 connection.autoconnect yes
参考文献
变更记录
- 2024-06-30
- 新增【常见问题】
Nice,NetworkManager之前的网络的管理还是差别比较大的!
和7、8两个版本的管理确实有很大的区别,感谢分享了这么好的说明和教程