Назад | Перейти на главную страницу

pf (Mac OS X) правило для перенаправления всего трафика на определенный IP / порт

Я пытаюсь воссоздать эту настройку iptables (из https://github.com/darkk/redsocks) с pf:

iptables -t nat -A REDSOCKS -p tcp -d 10.0.0.0/8 -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS

Я хочу перенаправить все соединения с 10.0.0.0/8 (независимо от того, какой порт) на локальный порт 12345. В Linux это отлично работает с указанными выше правилами. Теперь я пытаюсь воссоздать его в Mac OS X. В настоящее время я ничего не пробовал, например,

rdr inet proto tcp from any to 10.0.0.0/8 port 0:65535 -> 127.0.0.1 port 12345

Я установил sysctl net.inet.ip.forwarding = 1

Я не уверен, что даже правило rdr эквивалентно перенаправлению iptables nat. Redsocks требует, чтобы соединение сохраняло IP / порт назначения для правильной пересылки через прокси. Поэтому я предполагаю, что пункт назначения в пакетах не следует изменять / переписывать на 127.0.0.1:12345.

Итак, я, вероятно, неправильно понимаю, но я думаю, что вы можете путать цели iptables TPROXY и REDIRECT - но я не думаю, что это важно. Игнорируя это, вы все равно сможете реализовать свою цель.

Ваше разочарование правилом rdr pf вызвано тем, что оно применяется только к входящим пакетам. По данным 2005 г. Сообщение в списке рассылки FreeBSD-pf, вы можете обойти это ограничение с помощью правила маршрута. Я никогда не использовал pf, но если я понимаю синтаксис и связанный адрес электронной почты, следующее правило с вашим правилом rdr может быть правильным?

rdr inet proto tcp from any to 10.0.0.0/8 -> 127.0.0.1 port 12345
pass out route-to (lo0 127.0.0.1) from any to 10.0.0.0/8

Я понимаю, что я вряд ли квалифицирован как какой-либо эксперт, чтобы здесь комментировать; но я надеюсь, что мои комментарии помогут вам найти решение.


Что касается вашего комментария в конце вашего вопроса, где вы написали:

Я не уверен, что даже правило rdr эквивалентно перенаправлению iptables nat. Redsocks требует, чтобы соединение сохраняло IP / порт назначения для правильной пересылки через прокси. Поэтому я предполагаю, что пункт назначения в пакетах не следует изменять / переписывать на 127.0.0.1:12345.

Согласно iptables-extensions (8) цель REDIRECT:

«Он перенаправляет пакет на саму машину, изменяя IP-адрес назначения на первичный адрес входящего интерфейса ...»

и TPROXY сохраняет исходный адрес назначения:

«Он перенаправляет пакет в локальный сокет, никоим образом не меняя заголовок пакета».

Я не знаю, поддерживает ли pf специфичную для Linux операцию TPROXY.