You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下通过pf.conf配置基于用户的多接口流量路由问题

问题原因

当前配置存在3个核心问题,导致流量无法正常通信:

  • route-to 仅指定网络接口无效:以太网场景下必须填写对应接口的下一跳网关IP,否则pf无法完成二层封装,数据包无法正确发送到网关
  • 缺少反向流量路由规则:外部返回的响应数据包到达en1后,会匹配系统默认路由走en0回包,路径不对称导致TCP连接被直接丢弃
  • 未配置源地址转换:testuser的流量从en1发出时,默认使用en0的IP作为源地址,响应包会被路由到en0,无法被testuser的进程接收
正确实现步骤

1. 提前获取接口配置信息

先执行命令查询两个网卡的IP和对应网关,后续配置需要替换为你实际的参数,示例参数如下:

  • en0:IP为192.168.1.10,网关为192.168.1.1
  • en1:IP为192.168.2.10,网关为192.168.2.1

查询命令参考:

# 查看所有接口IP
ifconfig
# 查看路由表获取网关地址
netstat -rn

2. 修改pf配置

编辑/etc/pf.conf,在文件末尾添加如下配置:

# 源地址转换规则:不同用户的出口流量自动转换为对应网卡的IP
nat on en0 from any to any user admin -> (en0)
nat on en1 from any to any user testuser -> (en1)

# 出站策略路由:按用户指定出口网卡和网关
pass out quick route-to (en1 192.168.2.1) all user testuser keep state
pass out quick route-to (en0 192.168.1.1) all user admin keep state

# 入站反向路由:响应包从接收接口原路返回
pass in quick reply-to (en0 192.168.1.1) all inet received-on en0 keep state
pass in quick reply-to (en1 192.168.2.1) all inet received-on en1 keep state

注:配置中(en0)的括号表示动态获取接口当前IP,适合动态IP场景,无需每次IP变更修改配置。

3. 加载并生效配置

先校验配置语法是否合法:

pfctl -nf /etc/pf.conf

无报错后加载配置,如果pf未启用需要先执行pfctl -e启用pf服务:

pfctl -f /etc/pf.conf

4. 验证效果

分别切换到admin和testuser用户,执行curl ifconfig.me,返回的出口IP对应两个网卡的公网IP即配置成功。

注意事项

如果是macOS系统,系统升级可能会覆盖/etc/pf.conf默认配置,建议将自定义规则写入/etc/pf.anchors/下的独立锚点文件,再在pf.conf中引入锚点,避免配置丢失。

内容的提问来源于stack exchange,提问作者Hao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:27:04