Я пытался встроить обратный прокси в инфраструктуру компании. У нас есть 2 оптических линии ISP.

  • tun0 - интерфейс первого интернет-провайдера, выходные пакеты должны использовать fib = 0, шлюз ip xxxx
  • vr1 - интерфейс второго провайдера, выходные пакеты должны использовать fib = 1, шлюз ip гггг
  • vr0 - интерфейс локальной сети, шлюз ip 192.168.0.1

Второй интерфейс провайдера был настроен через ipfw.

Конфигурация ipfw выглядела так:

ipfw -f -q flush

ipfw nat 1 config if vr1 deny_in same_ports reset redirect_port tcp 192.168.0.3:80 80
ipfw add 00010 check-state :default
ipfw add 00020 setfib 1 log logamount 200 tag 2 ip from any to any tagged 1 keep-state :default
ipfw add 00050 nat 1 log logamount 200 tag 1 ip from any to any via vr1

ipfw add 00100 allow ip from any to any via lo0
ipfw add 00200 deny ip from any to 127.0.0.0/8
ipfw add 00300 deny ip from 127.0.0.0/8 to any
ipfw add 00400 deny ip from any to ::1
ipfw add 00500 deny ip from ::1 to any
ipfw add 00600 allow ipv6-icmp from :: to ff02::/16
ipfw add 00700 allow ipv6-icmp from fe80::/10 to fe80::/10
ipfw add 00800 allow ipv6-icmp from fe80::/10 to ff02::/16
ipfw add 00900 allow ipv6-icmp from any to any ip6 icmp6types 1
ipfw add 01000 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
ipfw add 65000 allow ip from any to any

поэтому он транслирует трафик с порта 80 на интерфейсе vr1 на веб-сервер в локальной сети и устанавливает fib = 1 для пакетов от второго провайдера. Лог выглядит так:

Feb 13 10:37:34 gateway kernel: ipfw: 50 Nat TCP 146.185.157.19:36346 84.204.61.126:80 in via vr1
Feb 13 10:37:34 gateway kernel: ipfw: 20 SetFib 1 TCP 146.185.157.19:36346 192.168.0.3:80 out via vr0
Feb 13 10:37:34 gateway kernel: ipfw: 20 SetFib 1 TCP 192.168.0.3:80 146.185.157.19:36346 in via vr0
Feb 13 10:37:34 gateway kernel: ipfw: 20 SetFib 1 TCP 192.168.0.3:80 146.185.157.19:36346 out via vr1
Feb 13 10:37:34 gateway kernel: ipfw: 50 Nat TCP 192.168.0.3:80 146.185.157.19:36346 out via vr1

Что мне нужно сделать, это направить трафик на 127.0.0.1:8088 или 192.168.0.1:8088, чтобы он пошел на обратный прокси.

То, что я сделал, было:

ipfw -f -q flush

ipfw add 00005 setfib 1 log logamount 200 all from any to any via vr1 keep-state
ipfw add 00010 fwd localhost,8088 log logamount 200 all from any to me 80 in via vr1
ipfw add 00015 allow ip from any to any

на первый взгляд это работает, но когда я смотрю в журнал, я вижу

журнал:

Feb 13 11:21:18 gateway kernel: ipfw: 5 SetFib 1 TCP 146.185.157.19:55774 84.204.61.126:80 in via vr1
Feb 13 11:21:18 gateway kernel: ipfw: 10 Forward to [::1]:8088 TCP 146.185.157.19:55774 84.204.61.126:80 in via vr1
Feb 13 11:21:18 gateway kernel: ipfw: 5 SetFib 1 TCP 84.204.61.126:80 146.185.157.19:55774 out via tun0

Так и выходит через tun0. Ничего не выходит через vr1. Нехорошо. Я хотел бы знать, как я могу сказать ipfw, чтобы трафик работал от vr1 до vr1. setfib, кажется, не работает. У меня нет большого опыта в настройке брандмауэров, и я полностью застрял. Я не знаю. Может быть, я должен использовать nat для 192.168.0.1. Я пытался, но безрезультатно. Это выглядело так:

ipfw nat 1 config if vr1 deny_in same_ports reset redirect_port tcp 192.168.0.1:8088 80
ipfw add 00010 check-state :MEGAFON_INBOUND
ipfw add 00020 setfib 1 log logamount 200 ip from any to any tagged 1 keep-state :MEGAFON_INBOUND
ipfw add 00050 nat 1 log logamount 200 tag 1 ip from any to any via vr1
ipfw add 00060 allow ip from any to any

журнал:

ipfw: 50 Nat TCP 146.185.157.19:51022 84.204.61.126:80 in via vr1

И это все. Что я делаю неправильно? Я даже не знаю, следует ли мне использовать nat, fwd или divert. Я буду признателен за любую подсказку.

0