Переадресация исходящих запросов с помощью PF

1736
Alexander Olsson

Я пытаюсь перенаправить весь исходящий трафик с моей локальной машины на порт 843, чтобы перейти к моей локальной службе на порт 1234.

Поэтому, когда я делаю запрос, например 1.2.3.4:843, я хочу, чтобы 127.0.0.1:1234вместо этого он подключался (прозрачно к запрашивающему приложению).

Я на OS X, поэтому я пытаюсь добиться этого с помощью pf.

Вот что у меня есть:

ext_if = "en0" int_if = "lo0"  rdr on $ext_if inet proto tcp from self to any port 843 -> 127.0.0.1 port 1234 

Теперь, когда я это сделаю, telnet 1.2.3.4 843я ожидал подключения к моей локальной службе (работает через порт 1234).

Однако, похоже, он не перенаправляет должным образом. С помощью tcpdumpя вижу, что пакеты помещаются на интерфейс с адресатом 1.2.3.4.

Если я делаю правило localhost only, например

rdr on $int_if inet proto tcp from self to any port 843 -> 127.0.0.1 port 1234 

Затем telnet localhost 843работает, как ожидалось, и я получаю ответ от моего локального сервиса, который прослушивает порт 1234.

Я не уверен, что я делаю не так, и теперь у меня потеря идей. Любая помощь / указатели приветствуются.

РЕДАКТИРОВАТЬ:

Я протестировал немного больше, и похоже, что с последним правилом любой запрос, который попадает на интерфейс обратной связи, работает. Так telnet 127.2.3.4 843же правильно перенаправляет.

Я пытался добавить $ext_ifк выше

rdr on { $ext_if $int_if } proto tcp from any to any port 843 -> 10.0.1.10 port 1234 

Но без успеха. Я также добавил пересылку sysctl. Ничего не сделал.

sudo sysctl -w net.inet.ip.forwarding=1 sudo sysctl -w net.inet6.ip6.forwarding=1 
3
Если бы тот же вопрос, ответил здесь: https://serverfault.com/questions/421261/os-x-10-8-redirecting-locally-initiated-ssh-connections-to-localhost22 9 лет назад 1

0 ответов на вопрос