У меня проблемы с пониманием того, как 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
Это текущие правила, с которыми я играю, и в wirehark я вижу, что, когда PF активен, пакет входит в интерфейс обратной петли, однако кроме этого ничего не происходит (когда я отключаю PF, пакет уходит, как первоначально предполагалось на 225.0 .0.37: 21928, что указывает на то, что PF что-то делает, по крайней мере, при включении).
Кроме того, я включил эту команду:
sysctl net.inet.ip.forwarding=1
Я не уверен, что я здесь делаю не так. Любая помощь будет очень высоко ценится.