Я пытаюсь воссоздать эту настройку 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.