说明: 本文介绍了 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 地址已经耗尽,这促使了对更广泛地址空间协议的需求。
在 IPv4 地址空间中,地址分为公网 IP、私有 IP 和 CGN(Carrier Grade NAT)地址。以下是详细区分:
公网 IP 地址
公网 IP 地址是全球唯一的,可以在整个互联网中进行通信的 IP 地址。它们不属于下列提到的私有 IP 和 CGN 地址的范围。所以,除了以下私有 IP、CGN 地址以及保留地址和特殊用途地址(如多播地址、环回地址等),其他的都属于公网 IP。
私有 IP 地址
私有 IP 地址用于局域网(LAN)内部通信,是不会在互联网中进行路由的。这些地址范围由 IANA(Internet Assigned Numbers Authority)分配:
- 10.0.0.0 到 10.255.255.255
- 172.16.0.0 到 172.31.255.255
- 192.168.0.0 到 192.168.255.255
CGN (Carrier Grade NAT) 地址
CGN 地址也称为共享地址空间,用于 ISP 提供的 NAT 方案,以减少 IPv4 地址的消耗。以下是该范围:
- 100.64.0.0 到 100.127.255.255
这些地址也不会在全球互联网中进行路由,用于解决多个用户共享一个公共 IP 地址的需求(Tailscale 用的这个地址段)。
其他特殊地址
还有一些保留和特殊用途的地址,例如:
- 环回地址: 127.0.0.1
- 广播地址: 255.255.255.255
- 多播地址: 224.0.0.0 到 239.255.255.255
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 的数据包。
在 IPv6 中,没有对应 IPv4 的私有 IP 和公网 IP 的概念,但有类似的机制来实现内网和公网的区别与应用。以下是一些重要的 IPv6 地址类型和其用途:
全球单播地址(Global Unicast Address)
全球单播地址就是 IPv6中用于在全球范围内进行通信的唯一地址,类似于 IPv4的公网 IP。其地址范围一般是以 2000::/3
开头。
唯一本地地址(Unique Local Address, ULA)
唯一本地地址在某种程度上类似于 IPv4的私有 IP 地址,用于局域网通信,不会在全球互联网中进行路由。其地址范围是 FC00::/7
,也可以细分为以下两个范围:
- 随机分配的 ULA:
FD00::/8
,通用情况下会使用这个范围,通过随机生成的方式保证在局部网络内的唯一性。 - 原始分配的 ULA:
FC00::/8
,目前未正式广泛使用。
链路本地地址(Link-Local Address)
这些地址只能用于单个网络链路的节点之间,不能路由到其他链路。所有 IPv6 接口在启动时都会自动生成一个链路本地地址以支持邻居发现协议。其地址范围是 FE80::/10
。
不管是 Linux、macOS 还是 Windows 都会分配一个 Link-Local Address,以 inet6 FE80::
开头。
# Linux
[root@localhost ~]# ifconfig
ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::486a:e224:31e4:d1fc prefixlen 64 scopeid 0x20<link>
ether 52:ea:eb:77:3d:fe txqueuelen 1000 (Ethernet)
RX packets 112410841 bytes 40294807433 (37.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64910 bytes 24656852 (23.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# macOS
❯ ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether f8:28:19:6a:2b:0f
inet6 fe80::18cd:9189:ab4:ef40%en0 prefixlen 64 secured scopeid 0x6
inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
# Windows
PS C:\Users\muzi> ipconfig
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::530b:7d8a:998a:f3f5%16
IPv4 地址 . . . . . . . . . . . . : 192.168.1.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.254
其他类型地址
还有一些其他特殊用途的地址,比如:
- 多播地址:
FF00::/8
,用于多播通信。 - 组播地址:
FF00::/8
,用于组播通信。
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
- 新增【常见问题】
- 2024-10-21
- 新增 IPv4 & IPv6 各类地址说明
Nice,NetworkManager之前的网络的管理还是差别比较大的!
和7、8两个版本的管理确实有很大的区别,感谢分享了这么好的说明和教程