3. 系统网络基础与NetworkManager
在 RHEL 8/9 中,网络配置的统一入口是 NetworkManager 服务。它把每块物理网卡、每个 VLAN 子接口、每个绑定(bond/team)设备都抽象为一个“连接(connection)”,连接与设备解耦:设备是硬件,连接是配置。理解这一点,后面所有 nmcli 操作都会变得有章可循——我们改的是连接,而不是直接改网卡。
一、nmcli:命令行管理连接
nmcli 是 NetworkManager 的命令行前端,语法结构为 nmcli [对象] [动作] [参数]。常用对象有 general、device、connection。查看当前状态:
nmcli general status
nmcli device status
nmcli connection show
nmcli connection show ens160
创建一条静态 IPv4 连接并启用,是日常最典型的操作:
nmcli connection add type ethernet con-name ens160-static ifname ens160 \
ipv4.method manual ipv4.addresses 192.168.10.20/24 \
ipv4.gateway 192.168.10.1 ipv4.dns 192.168.10.1
nmcli connection up ens160-static
nmcli connection modify ens160-static ipv4.dns "192.168.10.1 8.8.8.8"
nmcli connection reload
注意 ipv4.method 取 manual 表示静态,auto 表示 DHCP。修改后必须 up 或 reload 才生效。nmtui 则是同一套配置的文本界面封装,执行 nmtui 后通过“编辑连接 / 启用连接 / 设置主机名”三个菜单完成操作,适合不熟悉命令行的场景,两者修改的是同一份连接配置。
二、静态路由
当目标网段不在直连范围内,且默认网关无法覆盖时,需要添加静态路由。例如让 10.20.0.0/16 走 192.168.10.254:
nmcli connection modify ens160-static +ipv4.routes "10.20.0.0/16 192.168.10.254"
nmcli connection up ens160-static
ip route show
前缀 + 表示追加,- 表示删除,不带前缀则整体覆盖。路由是否生效,用 ip route get 10.20.1.5 可以直接看到内核选择的出接口和下一跳,比只看路由表更直观。
三、多网卡绑定
绑定把多块物理网卡聚合成一个逻辑接口,提供冗余或带宽叠加。RHEL 中常用 bond,模式选择是关键:active-backup(mode=1)只用一个从属口,主口故障时切换,适合冗余;802.3ad(mode=4)需要交换机配合 LACP,可叠加带宽。配置顺序是先建 bond 连接,再把物理网卡作为 slave 加入:
nmcli connection add type bond con-name bond0 ifname bond0 \
bond.options "mode=active-backup,miimon=100"
nmcli connection add type ethernet con-name bond0-slave1 ifname ens224 master bond0
nmcli connection add type ethernet con-name bond0-slave2 ifname ens256 master bond0
nmcli connection up bond0
其中 miimon=100 表示每 100 毫秒检测一次链路。验证时看 /proc/net/bonding/bond0,确认两个 slave 的 MII Status 均为 up,且当前活动口(Currently Active Slave)符合预期。
四、VLAN 配置
VLAN 用于在同一物理链路上划分广播域。配置时先有承载 VLAN 的父接口,再在其上创建 VLAN 子接口,并指定 VLAN ID:
nmcli connection add type vlan con-name vlan100 ifname ens160.100 \
dev ens160 id 100 ipv4.method manual \
ipv4.addresses 192.168.100.20/24
nmcli connection up vlan100
ip -d link show ens160.100
父接口 ens160 本身可以不配 IP,只作为二层承载。若对端交换机端口未放行 VLAN 100,子接口会 up 但无法通信,此时应检查交换机 trunk 配置。
五、网络诊断命令
排障遵循“由近及远”的顺序:先看链路与地址,再看路由,最后看服务与端口。ip link 看接口是否 UP,ip addr 看地址,ip route 看路由,ping 测连通,traceroute 定位断点,ss -tulnp 看本机监听端口,nmcli device show 看 NetworkManager 视角的详细信息。DNS 问题用 dig 或 getent hosts 验证解析结果。
六、配置检查清单
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 连接是否激活 | nmcli connection show --active | 目标连接状态为 activated |
| 地址是否正确 | ip addr show ens160 | 出现 192.168.10.20/24 |
| 路由是否生效 | ip route get 10.20.1.5 | 下一跳为 192.168.10.254 |
| bond 从属口 | cat /proc/net/bonding/bond0 | 两个 slave 均 up |
| VLAN 子接口 | ip -d link show ens160.100 | 显示 vlan id 100 |
| 端口监听 | ss -tulnp | 服务端口处于 LISTEN |
nmcli connection up <名称>;若仍异常,用 nmcli connection show <名称> 核对参数,再检查 journalctl -u NetworkManager 的报错。掌握以上五类操作后,RHEL 主机的网络配置基本可以脱离图形界面完成。核心思路始终是:用 nmcli 或 nmtui 管理连接,用 ip、ss、ping、traceroute 验证结果,遇到不通时按“链路—地址—路由—服务”的顺序逐层排查。