Я пытаюсь перенаправить внешний IP-адрес на другой внешний IP-адрес с помощью pf. Эквивалентная команда iptables будет iptables -t nat -A OUTPUT -d [ipaddress1] -j DNAT --to-destination [ipaddress2]
.
Я пробовал различные формы nat и rdr в моем pf.conf, примеры которых: ($int_if
это внутренний интерфейс, $ext_if
внешний интерфейс, $out_ad
ipaddress1 (адрес для перенаправления) и $res_ad
ipaddress2 (адрес для перенаправления)
nat on $int_if from 127.0.0.1 to $out_ad -> $res_ad
rdr pass on $ext_if proto tcp from $out_ad to $res_ad -> 127.0.0.1
rdr pass on $int_if proto tcp from 127.0.0.1 to $out_ad -> $res_ad
rdr pass log proto tcp from any to $out_ad -> $res_ad
nat from $out_ad to $res_ad -> 127.0.0.1
nat on $ext_if from $out_ad to $res_ad -> $ext_if
rdr on $int_if proto tcp from any to $out_ad -> $res_ad
rdr pass quick on $ext_if proto tcp from any to $out_ad -> $res_ad
Ни один из них, похоже, не помогает. Я установил sysctl net.inet.ip.forwarding=1
также. Любая помощь будет принята с благодарностью. Спасибо
sysctl net.inet.ip.forwarding=1
Это просто включит маршрутизацию на вашем компьютере. Это может сработать, если вы создадите, чтобы разрешить любой IP-адрес назначения на внешнем интерфейсе (по крайней мере, теоретически) (10.20.30.40 - ваш конечный пункт назначения в этом примере)
pass in inet proto tcp from any to 10.20.30.40
(просто идея)
Но ваши правила rdr не будут работать, потому что они находятся в одном интерфейсе, который (согласно некоторым сообщениям на форуме) не разрешен или просто не работает.
С другой стороны, правило общедоступного NAT должно работать, но вы потеряете исходный IP-адрес в конечном пункте назначения. (предназначена?)
nat on $ext_if inet from any to 10.20.30.40 -> ($ext_if:0) port 1024:65535
pass on $ext_if inet from any to 10.20.30.40 keep state
(или состояние synproxy)
для целей отладки попробуйте включить ведение журнала правил (добавив журнал в правило передачи, включив pflog и указав следующую команду)
/etc/rc.conf
...
pflog_enable="YES"
pflog_logfile="/var/log/pflog
...
# tcpdump -i pflog0 -n -e -ttt
Ох, и, пожалуйста, представьте простую структуру сети;)