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 验证解析结果。

NetworkManager 连接与设备关系及诊断路径 物理网卡 ens160 device(硬件) 物理网卡 ens224 device(硬件) 物理网卡 ens256 device(硬件) 连接 ens160-static 192.168.10.20/24 bond0(mode=1) miimon=100 vlan100 ens160.100 / VLAN 100 静态路由 10.20.0.0/16 → 192.168.10.254 bond0 逻辑接口 冗余 / 带宽叠加 192.168.100.20/24 VLAN 广播域 诊断顺序(由近及远): ip link → ip addr → ip route → ping → traceroute → ss -tulnp → nmcli device show 链路 UP 但不通:查 VLAN 放行、bond 活动口、静态路由下一跳、DNS 解析

六、配置检查清单

检查项命令预期结果
连接是否激活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 的报错。
bond 模式必须与交换机侧配置匹配:mode=4 需要交换机启用 LACP,否则链路无法聚合;VLAN 子接口要求父接口与交换机 trunk 同时放行对应 VLAN ID。

掌握以上五类操作后,RHEL 主机的网络配置基本可以脱离图形界面完成。核心思路始终是:用 nmcli 或 nmtui 管理连接,用 ip、ss、ping、traceroute 验证结果,遇到不通时按“链路—地址—路由—服务”的顺序逐层排查。