nmcli可通过策略路由隔离管理网段:创建专用连接并设ipv4.never-default、ipv4.routing-rules指定表ID、ipv4.routes配置独立路由表,再禁用IP转发与自动路由,确保流量严格走自定义路径。

在 Linux 中用 nmcli 配置静态路由策略来隔离不安全的管理网段(比如 10.100.20.0/24),核心思路不是单纯加一条路由,而是结合策略路由(policy routing)——即按源 IP 或接口打标签、走独立路由表,再配合路由规则(rule)控制流量走向。这样能确保管理流量不混入业务路径,也不被默认网关转发出去。
确认 NetworkManager 支持策略路由
Red Hat Enterprise Linux(RHEL)、CentOS Stream、Fedora 等较新版本的 NetworkManager 默认支持策略路由(需 NM ≥ 1.32)。检查方法:
- 运行
nmcli -p g | grep -i policy,若输出含routing-policy-rule或ip-rule,说明已启用 - 若无输出,可临时启用:
sudo nmcli general permissions set network-control yes(需 root 权限) - 确保
kernel已加载ip_tables和ip6_tables模块(通常默认加载)
为管理网段创建专用连接并绑定源地址
假设管理网段是 10.100.20.0/24,物理接口为 enp0s8,你希望所有来自该子网的流量(如从 10.100.20.10 发起)强制走独立路径,且不经过主路由表:
- 先创建带静态 IP 的连接:
nmcli connection add type ethernet con-name mgmt-if ifname enp0s8 ip4 10.100.20.10/24 gw4 10.100.20.1 - 禁用该连接的默认路由注入:
nmcli connection modify mgmt-if ipv4.never-default yes - 指定该连接使用自定义路由表(如表 ID 200):
nmcli connection modify mgmt-if ipv4.routing-rules "from 10.100.20.0/24 table 200" - 添加一条指向管理网关的静态路由到表 200:
nmcli connection modify mgmt-if ipv4.routes "10.100.20.0/24 10.100.20.1 200; 0.0.0.0/0 10.100.20.1 200"
(第二项是让所有非本地流量也走管理网关,实现完全隔离)
禁止管理流量进入主路由表与转发
仅靠路由表还不够,必须防止系统把管理子网当“可达直连”后误转发。需补充内核级限制:
- 关闭该接口的 IP 转发:
nmcli connection modify mgmt-if ipv4.ip-forwarding no - 禁用反向路径过滤(避免因不对称路由丢包):
nmcli connection modify mgmt-if ipv4.ignore-auto-routes yesnmcli connection modify mgmt-if ipv4.ignore-auto-dns yes - 激活连接:
nmcli connection up mgmt-if
验证策略是否生效
执行以下命令逐层确认:
- 查路由规则:
ip rule show→ 应看到类似from 10.100.20.0/24 lookup 200 - 查自定义路由表:
ip route show table 200→ 应含网关和默认路由 - 模拟源地址测试:
ip route get 8.8.8.8 from 10.100.20.10→ 输出应显示 via10.100.20.1devenp0s8table 200 - 抓包验证:
sudo tcpdump -i enp0s8 host 8.8.8.8,再从另一终端用curl --interface 10.100.20.10 http://httpbin.org/ip,确认只有 enp0s8 出现流量
不复杂但容易忽略的是:策略路由依赖完整的规则+表+路由三要素闭环。少设一条 ipv4.routing-rules,或忘了 never-default,都可能导致管理流量“逃逸”到主路由表,失去隔离效果。











