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

Перенаправление IP-адреса с использованием pf

Я пытаюсь перенаправить внешний 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

Ох, и, пожалуйста, представьте простую структуру сети;)