Я пытаюсь передать внешний IP-адрес другому внешнему IP-адресу с pf. Эквивалентная команда iptables была бы iptables -t nat -A OUTPUT -d [ipaddress1] -j DNAT --to-destination [ipaddress2]
.
Я попробовал различные формы туземных и 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
Ох, и, пожалуйста, предоставьте какая-то простая сетевая структура;)