我有点搞不清楚 PF 在 Mac OS 中的工作方式。我对这个主题进行了大量研究,但就是找不到解决方案(尽管我发现了许多其他非常相似的问题,但没有答案)。
我的目标是将使用 UDP 端口 (21928) 发送到多播地址 (225.0.0.37) 的传出数据包在离开我的接口之前重定向到同一多播地址的不同 UDP 端口 (6010)。
如果这不可能的话,将端口(21928)重定向到地址 192.168.0.20:6010 将是次佳选择,但最好使用原始多播地址。
据我所知,您不能在传出数据包上使用 PF 规则,但是您可以将这些数据包重定向到环回地址,然后以这种方式执行规则。
rdr pass inet proto udp from any to 225.0.0.37 port 21928 -> 225.0.0.37 port 6010
pass out on en4 route-to lo0 proto udp from en4 to 225.0.0.37 port 21928 keep state
这些是我目前正在使用的规则,在 wireshark 中我可以看到,当 PF 处于活动状态时,数据包进入环回接口,但是除此之外什么也没有发生(当我禁用 PF 时,数据包会按照最初的计划离开 225.0.0.37:21928,这至少表明 PF 在启用时正在做一些事情)。
另外我还启用了此命令:
sysctl net.inet.ip.forwarding=1
我不确定我做错了什么。如能得到任何帮助我将不胜感激。