nmcli本身不管理内核ip转发或iptables,仅配置连接级静态路由;实现跨网段转发需三步:用nmcli添加接口路由、启用ip_forward、配置iptables forward/nat规则,并确保客户端指向转发机。

nmcli 本身不直接管理内核级的静态路由转发(如 IP 转发开关或 iptables 规则),它主要用于配置 NetworkManager 托管的连接(如以太网、Wi-Fi、bond、bridge 等)及其关联的**接口路由**(即 per-connection static routes)。要实现跨网段的私有流量转发,需分两层配合:一是用 nmcli 配置通往目标网段的**静态路由条目**(让本机知道怎么“发出去”),二是启用系统级的 **IP 转发 + 包过滤规则**(让本机真正“转起来”)。
用 nmcli 添加静态路由(让本机知道目标怎么走)
静态路由是告诉本机:去某个网段(比如 172.16.25.0/24)的数据包,该从哪个接口、经哪个下一跳发出。nmcli 支持为指定连接添加永久性静态路由:
- 查看当前连接名:
nmcli connection show - 为连接 enp24s0f2 添加指向 172.16.25.0/24 的路由(下一跳为 192.168.133.1):
nmcli connection modify enp24s0f2 +ipv4.routes "172.16.25.0/24 192.168.133.1" - 若下一跳不是直连网关(例如目标需经另一台中间设备),确保该下一跳可达;若目标网段直连该接口(如 172.16.25.0/24 就挂在 enp24s0f2 上),可省略下一跳:
nmcli connection modify enp24s0f2 +ipv4.routes "172.16.25.0/24" - 保存并重载连接:
nmcli connection reload && nmcli connection down enp24s0f2 && nmcli connection up enp24s0f2 - 验证路由是否生效:
ip route show | grep 172.16.25
开启内核 IP 转发(让本机允许转发)
仅配路由不会让 Linux 转发别人的数据包——必须打开内核转发开关:
- 临时开启:
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:写入
/etc/sysctl.conf:echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - 确认结果:
cat /proc/sys/net/ipv4/ip_forward应输出 1
配置 iptables FORWARD 和 NAT 规则(控制转发行为与地址转换)
转发不仅靠“开开关”,还需明确允许哪些流进、流出,并处理回程地址一致性(尤其当目标不认源 IP 时):
- 放行来自内部网段(如 10.20.40.0/24)到目标网段(172.16.25.0/24)的转发:
iptables -I FORWARD -i enp24s0f0 -o enp24s0f2 -d 172.16.25.0/24 -j ACCEPT - 放行对应回程流量(已建立连接):
iptables -I FORWARD -i enp24s0f2 -o enp24s0f0 -s 172.16.25.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT - 做 SNAT/MASQUERADE,确保目标看到的是转发机出口 IP(避免回程路由失败):
iptables -t nat -A POSTROUTING -o enp24s0f2 -d 172.16.25.0/24 -j MASQUERADE - 规则持久化(Ubuntu/Debian 推荐):
sudo apt install iptables-persistent -y && sudo netfilter-persistent save
客户端侧需设置默认网关或静态路由
仅服务端配置完还不够。源主机(如机器 B:10.20.40.22)必须把去往 172.16.25.0/24 的流量发给转发机(A 的 10.20.40.221):
- 在 B 上临时加路由:
ip route add 172.16.25.0/24 via 10.20.40.221 - 或永久配置(视发行版而定):修改其 NetworkManager 连接,用
nmcli connection modify加等效路由,再重启连接 - 验证 B 是否能 ping 通 A 的 enp24s0f2 地址(192.168.133.46),这是转发链路连通的前提











