L1-05 RHEL订阅、nmcli配置网络以及SSH远程连接

RHEL10注册订阅

安装好 RHEL 10.1 后,先不要急着敲命令或安装软件。由于RHEL采用订阅制,软件安装与系统更新都依赖官方仓库,未注册订阅前通常无法正常使用dnf获取软件包,因此首次登录后最先要做的就是激活订阅并完成基础更新。

登录进系统,桌面按键盘win键或点击左上角的红帽logo,启动终端

需要注意的是,注册订阅和更新系统都必须使用 root 权限;如果当前登录的是普通用户,请先切换到 root ,或者在命令前加 sudo
:exclamation_question_mark:RHEL10中,subscription-manager 彻底移除了 attach 这个模块及相关参数, 不需要再做任何附加(attach)操作

su -       # 切换到 root 用户;输入 root 密码后,提示符变为 # 表示已进入管理员环境

在控制台执行以下命令,使用你的红帽开发者账号将系统注册:

subscription-manager register --username <红帽账号> --password <密码>

注册完成后,养成习惯,检查一下订阅状态是否真正生效:

subscription-manager status

只要状态显示为 已注册,就可以执行第一次系统更新,确保基础组件达到最新状态:

dnf update -y

RHEL 10配置网络

主要有三种方式配置网络,最简单的就是在桌面设置里面配置,但在服务器环境都是通过命令行来管理,这里就对相对复杂的命令行通过nmcli命令和配置文件的方式配置网络。
从 RHEL 8 开始,系统默认由 NetworkManager 统一管理网络;到了 RHEL 10,传统的 ifcfg-* 方式已经被淘汰。

当前 RHEL 10 默认的网络配置文件存放在 /etc/NetworkManager/system-connections/ 目录下,文件格式变成了 INI 风格的 .nmconnection。了解这个底层机制的变化后,我们就可以通过这两种方式来配置网络:使用 nmcli 命令行交互,或者直接修改底层配置文件。

nmcli 命令配置网络

开始之前,先分清两个核心概念,否则容易把参数写错:

  • 设备(device):指网卡硬件本身,比如 ens160
  • 连接(connection):指套用在这块网卡上的配置方案,包含 IP、网关等信息。
    很多时候连接名设备名刚好都叫同一个名字,比如 ens160,但修改网络时,我们本质上是在修改 connection

查看网络状态

首先查看一下当前系统网卡的 IP 状态:

root@RHEL:~# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.0.10  netmask 255.255.255.0  broadcast 172.16.0.255
        inet6 fe80::20c:29ff:fe66:7d6d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:66:7d:6d  txqueuelen 1000  (Ethernet)
        RX packets 963804  bytes 1447901368 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 91978  bytes 5447691 (5.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        ...

可以看见当前系统有两张网卡,一张是我们虚拟机添加的”物理网卡”ens160,一张是本地环回虚拟网卡lo(用于本机内部通信,通常不需要去管它)。

  • ens160:网卡接口名称,一般来说用于业务流量的物理网卡都是ensenp开头。
  • UP, RUNNING:表示这块网卡当前处于启用且正在运行的状态。
  • inet 172.16.0.10:这是网卡当前使用的IPv4地址, netmask 是子网掩码255.255.255.0 前缀 /24
  • inet6 … scopeid 0x20:这是 IPv6 的本地链路地址,通常以 fe80:: 开头。
  • ether 00:0c:29:66:7d:6d:这是网卡的物理 MAC 地址。
  • RX/TX packets:分别表示网卡已接收(RX)和已发送(TX)的数据包数量及流量大小,这可以用来快速判断网卡是否有实际的数据收发动作。

确认了当前的 IP 后,我们再查看一下当前物理网卡在NetworkManager中的硬件状态
#后是执行的命令
主要关注 DEVICE(网卡名)和 CONNECTION(当前正在使用的连接名)这两列。只有当网卡 STATE已连接 时,说明它已经绑定了一个连接方案。

root@RHEL:~# nmcli device status
DEVICE  TYPE      STATE         CONNECTION 
ens160  ethernet  已连接        ens160     
lo      loopback  连接(外部)  lo    

接着查看当前已有的连接配置,当前网卡和连接名称均为 ens160
这里列出的是系统里存好的配置方案。确认好这里的 NAME 列,后面的修改命令全都要针对这个 NAME 来操作。

root@RHEL:~# nmcli connection show
NAME    UUID                                  TYPE      DEVICE 
ens160  a20596a9-215f-3835-8189-200e617603f9  ethernet  ens160 
lo      1cb84265-5457-443b-9d2f-692a2442c7ab  loopback  lo

要查看更详细的输出,后面跟上具体的连接名,执行命令后要退出查看模式使用快捷键:CTRL+C,此快捷键的作用是中断当前正在运行的命令。输出中可以找到当前地址的配置方式manual静态模式的。

root@RHEL:~# nmcli connection show ens160
connection.id:                          ens160
connection.uuid:                        a20596a9-215f-3835-8189-200e617603f9
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              ens160
...
ipv4.method:                            manual   #静态模式
ipv4.dns:                               172.16.0.2,223.5.5.5      #主备两个dns地址
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         172.16.0.10/24          #IPv4地址
ipv4.gateway:                           172.16.0.2                   #网关地址
...
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         172.16.0.10/24
IP4.GATEWAY:                            172.16.0.2
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 172.16.0.2, mt = 100
IP4.ROUTE[2]:                           dst = 172.16.0.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             172.16.0.2
IP4.DNS[2]:                             223.5.5.5
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe66:7d6d/64  
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

配置DHCP

当前网卡是静态IP,那么我们先修改为DHCP,使用命令修改IPv4的获取方法改成 auto,并清理手动配置的IPv4信息。

nmcli connection modify ens160 ipv4.method auto
  • modify ens160:指定修改名为 ens160 的连接配置。
  • ipv4.method auto:设置获取方式为自动。既然是自动获取,系统就会向 DHCP 服务器请求 IP、网关和 DNS。

但是你之前如我一样配置过静态IP,那么只使用下面这条命令,将旧配置清空不然会有逻辑错误,导致DHCP不生效。

nmcli connection modify ens160 ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns ""

修改完成后,配置不会立刻应用到网卡上,必须执行以下命令重启该连接让其立即生效:

nmcli connection up ens160

生效后,通过以下命令验证网卡是否成功拿到了动态 IP:

ip addr show ens160

在输出信息中寻找带有 inet 字样的一行,后面跟着的就是DHCP服务器自动分配的IP地址和掩码,可以从下方输出看见我这里是172.16.0.128/24,之前是172.16.0.10/24。如果有这行且地址正常,说明DHCP配置成功。

root@RHEL:~# nmcli connection modify ens160 ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns ""
root@RHEL:~# nmcli connection up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/9)
root@RHEL:~# ip addr show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:7d:6d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29667d6d
    inet 172.16.0.128/24 brd 172.16.0.255 scope global dynamic noprefixroute ens160
       valid_lft 1793sec preferred_lft 1793sec
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

配置静态 IPv4 地址

大多数生产环境中的服务器都使用固定IP。
以我这里的VMware NAT网络为例,网段为 172.16.0.0/24,网关为 172.16.0.2
在开始配置之前,你需要检查自己VMware虚拟网卡的网段信息,而不是复制粘贴命令,这样才能通过NAT正常访问网络。

前面我们已经将网卡改成了通过DHCP自动获取 IP,现在再把它切换为静态配置。
这里将网卡地址设置为 172.16.0.10/24,默认网关172.16.0.2,DNS为172.16.0.2,223.5.5.5

一条命令即可完成属性的修改:

nmcli connection modify ens160 ipv4.method manual ipv4.addresses 172.16.0.10/24 ipv4.gateway 172.16.0.2 ipv4.dns 172.16.0.2,223.5.5.5
  • ipv4.method manual:把模式改成 manual(手动),需要先指定method否则后面的静态地址不会生效。
  • ipv4.addresses .../24:设置IP和子网掩码长度。
  • ipv4.gateway:默认网关。
  • ipv4.dns:配置DNS,不配的话只能ping通IP,无法解析域名。

完了后同样需要重启连接让配置生效。生效后使用命令检查IP和路由:

nmcli connection up ens160
ip addr show ens160                           
ip route                                    #查看当前路由信息

root@RHEL:~# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 172.16.0.10/24 ipv4.gateway 172.16.0.2 ipv4.dns 172.16.0.2,223.5.5.5
root@RHEL:~# nmcli connection 
add      delete   edit     help     load     modify   reload   up       
clone    down     export   import   migrate  monitor  show     
root@RHEL:~# nmcli connection up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/10)
root@RHEL:~# ip addr show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:7d:6d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29667d6d
    inet 172.16.0.10/24 brd 172.16.0.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@RHEL:~# ip route
default via 172.16.0.2 dev ens160 proto static metric 100 
172.16.0.0/24 dev ens160 proto kernel scope link src 172.16.0.10 metric 100 
  • 检查 inet 字段是否是刚才设置的静态IP。
  • 查看路由时,输出中有一行以 default via 172.16.0.2 开头。default 代表默认路由,这说明当前网络的流量是通过这个网关转发访问外网。

配置IPv6

在IPv6环境,操作逻辑与IPv4其实是一样的,只是命令有些不同。例如配置一个静态v6地址及网关(这里地址为示例):

nmcli connection modify ens160 ipv6.method manual ipv6.addresses 2001:8888:1::10/64 ipv6.gateway 2001:8888:1::1  ipv6.dns 2402:4e00:: 

同样,执行命令让配置生效。生效后,检查v6的地址和路由:

nmcli connection up ens160
ip -6 addr show ens160
ip -6 route
root@RHEL:~# nmcli connection modify ens160 ipv6.method manual ipv6.addresses 2001:8888:1::10/64 ipv6.gateway 2001:8888:1::1  ipv6.dns 2402:4e00:: 
root@RHEL:~# nmcli connection up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/11)
root@RHEL:~# ip -6 addr show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    altname enp3s0
    altname enx000c29667d6d
    inet6 2001:8888:1::10/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@RHEL:~# ip -6 route
2001:8888:1::/64 dev ens160 proto kernel metric 100 pref medium
fe80::/64 dev ens160 proto kernel metric 1024 pref medium
default via 2001:8888:1::1 dev ens160 proto static metric 100 pref medium

修改配置文件配置网络

除了使用 nmcli 命令,对于在进行自动化部署时,直接修改配置文件也是一种做法。
前面提到,RHEL 10的网络配置文件存放在 /etc/NetworkManager/system-connections/ 目录下。我们直接使用 vim 编辑对应的网卡配置文件:

vim /etc/NetworkManager/system-connections/ens160.nmconnection

vim编辑工具基本使用:

  1. 打开文件后,按键盘上的字母 i 键,底部出现 -- INSERT -- 时即进入插入模式,此时可修改文本。
  2. 修改完成后,按 Esc 键退出插入模式。
  3. 输入 :wq 并按回车键,即可保存文件并退出。如果改错了不想保存,可以输入 :q! 强制退出。

配置DHCP

在打开的文件中找到 [ipv4] 模块。配置DHCP只需要保留 method=auto,其余静态地址相关的行全部删除/注释

[ipv4]
method=auto

配置静态IP

[ipv4] 模块的写法如下,如果要配置多个IP地址只需要按数字顺序递增 address 的后缀即可,网关只写一个

[ipv4]
method=manual
address1=172.16.0.10/24,172.16.0.254
address2=172.16.0.20/24
dns=223.5.5.5;

INI 语法:

  • 与旧版的 ifcfg 不同,Keyfile 格式将 IP、掩码和网关合并在了一起。address1= 后面的格式是 IP地址/掩码前缀,网关地址,中间用英文逗号隔开;网关可以单独写一行。
  • dns= 后面写DNS服务器地址,如果有多个可以用分号隔开,并且整行必须以分号 ; 结尾
  • 要配置 IPv6,则是在文件中的 [ipv6] 模块下添加对应的 address1method=manual,语法规则相同。

重载并激活

修改完文本并保存退出后,NetworkManager守护进程默认是不知道文件被改动了的。
按照顺序先执行 reload 命令让服务重新读取磁盘上的文件,然后再拉起连接,否则改的配置不会生效:

nmcli connection reload
nmcli connection up ens160
root@RHEL:~# vi /etc/NetworkManager/system-connections/ens160.nmconnection 
root@RHEL:~# nmcli connection reload 
root@RHEL:~# nmcli connection up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/16)
root@RHEL:~# ip addr show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:7d:6d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29667d6d
    inet 172.16.0.128/24 brd 172.16.0.255 scope global dynamic noprefixroute ens160
       valid_lft 1792sec preferred_lft 1792sec
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

网络连通性测试

网络配置完成后,通过 ping 命令可以验证网络连通状态。
与 Windows 不同,在Linux下直接执行 ping 命令会一直发送探测数据包,直到按下 Ctrl + C 中断。为了避免一直刷屏,我们在实际排错时通常会带上 -c 参数,用来精确指定发送数据包的次数,注意不要少掉空格。

首先,ping网关,可以验证物理链路和内网配置是否正确。
输出中可以看见没有超时,并且回复产生了统计数据,发了4个包全都收到了,说明网络可达。

root@RHEL:~# ping -c 4 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) 字节的数据。
64 字节,来自 172.16.0.2: icmp_seq=1 ttl=128 时间=0.194 毫秒
64 字节,来自 172.16.0.2: icmp_seq=2 ttl=128 时间=0.119 毫秒
64 字节,来自 172.16.0.2: icmp_seq=3 ttl=128 时间=0.226 毫秒
64 字节,来自 172.16.0.2: icmp_seq=4 ttl=128 时间=0.273 毫秒

--- 172.16.0.2 ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3062ms
rtt min/avg/max/mdev = 0.119/0.203/0.273/0.056 ms

测试域名连通性,ping域名可以检测路由是否正常转发外网,以及配置的DNS是否生效。
可以看见ping这个域名解析成了IP地址,并且收到了对方服务器应答。

root@RHEL:~# ping -c 4 www.sitetalk.net
PING www.sitetalk.net.a1.initxb.com (101.200.115.63) 56(84) 字节的数据。
64 字节,来自 101.200.115.63: icmp_seq=1 ttl=128 时间=47.9 毫秒
64 字节,来自 101.200.115.63: icmp_seq=2 ttl=128 时间=62.0 毫秒
64 字节,来自 101.200.115.63: icmp_seq=3 ttl=128 时间=59.8 毫秒
64 字节,来自 101.200.115.63: icmp_seq=4 ttl=128 时间=51.9 毫秒

--- www.sitetalk.net.a1.initxb.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 47.881/55.393/61.984/5.723 ms

SSH 远程连接

实际的系统运维中,绝大多数操作都是通过SSH进行远程管理。回到宿主机,打开MobaXterm、Windterm等终端工具,或者打开CMD通过刚才配置好的静态IP远程连接到这台RHEL服务器:

ssh root@172.16.0.10

首次连接,系统会弹出密钥指纹提示,这是正常的安全确认机制。直接输入 yes 并回车,接着输入 root 密码即可登录系统。