nmcli 不直接配置 rp_filter,需通过 sysctl 或 /proc 设置;rp_filter 为内核参数,0 关闭校验、1 严格模式(进哪出哪)、2 宽松模式(任意接口可达即可),多网卡推荐设为 2,并禁用 networkmanager 对 rp_filter 的接管以确保生效。

nmcli 本身不直接配置 rp_filter,它只管理网络连接和接口状态。rp_filter 是内核网络参数,需通过 sysctl 或 /proc 接口设置。但 nmcli 可配合完成多网卡环境下的整体网络策略,确保 rp_filter 设置生效且不被 NetworkManager 覆盖。
明确 rp_filter 的作用和取值含义
rp_filter(反向路径过滤)用于校验入站数据包的源 IP 是否“合理”:防止 IP 欺骗、缓解 DDoS、避免异步路由引发的丢包。在多网卡场景下尤其关键——比如流量从 eth1 进、回包却从 eth0 出,严格模式(值为 1)会直接丢弃该入包。
- 0:关闭校验,所有入包均放行(不推荐,降低安全性)
- 1:严格模式——源 IP 必须能通过接收该包的网卡反向路由到达(即“进哪出哪”)
- 2:宽松模式——源 IP 只要能通过系统任意网卡反向可达即允许(适合多出口、策略路由、Oracle RAC 等场景)
用 nmcli 查看并标记多网卡连接名
先确认各网卡对应的 Connection 名称,这是后续持久化配置的基础:
- 运行
nmcli connection show,记下如System eth0、Wired connection 1或自定义名(如mgmt、data) - 查看对应设备:例如
nmcli device show eth1 | grep GENERAL.CONNECTION确认其绑定的连接名 - 若连接名含空格或特殊字符,后续 sysctl 配置中需用下划线替代(如
System_eth0→ 实际对应文件路径为/proc/sys/net/ipv4/conf/System_eth0/rp_filter)
分网卡或全局设置 rp_filter 值
推荐优先使用宽松模式(2)应对多网卡常见问题,再按需细化:
- 临时设置(重启失效):
echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/rp_filterecho 2 | sudo tee /proc/sys/net/ipv4/conf/eth0/rp_filterecho 2 | sudo tee /proc/sys/net/ipv4/conf/eth1/rp_filter - 永久生效(编辑
/etc/sysctl.conf):
添加以下行(注意:NetworkManager 不覆盖此配置,但需确保未在 NM 连接中启用ipv4.ignore-auto-routes等冲突选项):net.ipv4.conf.all.rp_filter = 2net.ipv4.conf.eth0.rp_filter = 2net.ipv4.conf.eth1.rp_filter = 2
保存后执行sudo sysctl -p
与 NetworkManager 协同避坑
某些发行版(如 RHEL/CentOS/Fedora)的 NetworkManager 默认启用 rp_filter=1,可能覆盖 sysctl 设置。需检查并禁用其接管:
- 编辑对应连接的 ifcfg 文件(通常在
/etc/sysconfig/network-scripts/ifcfg-*)或使用 nmcli 修改连接属性:nmcli connection modify "System eth0" ipv4.ignore-auto-routes yesnmcli connection modify "System eth0" ipv4.ignore-auto-dns yes - 禁止 NM 自动写入 rp_filter:
在/etc/NetworkManager/conf.d/99-disable-rpfilter.conf中添加:[connection]rp_filter=0
然后重启服务:sudo systemctl restart NetworkManager - 验证是否生效:
sysctl net.ipv4.conf.eth0.rp_filter和cat /proc/sys/net/ipv4/conf/eth0/rp_filter应返回 2











