Приветствую уважаемые Специалисты!Наведите пожалуйста на правильный путь, что-то всю голову уже изломал.
Схема такая:
Есть сервер FreeBSD 13.1 amd64, с двумя интерфейсами igb0 и igb1.
Всю жизнь на него приходил линк на igb0 [192.168.1.2/24 gw 192.168.1.1] и на нужные порты с вышестоящего роутера были проброшены порты.
Тут возникла необходимость на него завести несколько внешних ip'ов и на этих ip'ах повесить сервисы (WWW, MAIL и т.п.)
IP'ы я завёл посредством VLAN'ов. Т.е. c igb1 транк до коммутатора, в который в access порты воткнуты ланки от провайдера. Подняты несколько таблиц маршрутизации. Соответственно на каждом VLAN'е свой внешний ip и внутренний ip для клетки с сервисами для данного ip'а.
/etc/rc.conf
cloned_interfaces="vlan11 vlan12 vlan13 vlan14"
ifconfig_vlan11="inet 1.2.3.11/24 vlan 11 vlandev igb1 fib 1"
ifconfig_vlan11_alias0="inet 10.1.1.1/32 fib 1"
......ifconfig'и аналогичны.....static_routes="V11 V12 V13 V14"
route_V11="default 1.2.3.1 -fib 1"
......маршруты аналогичны.....
Для сервисов я поднял клетки:
qjail create -n vlan11 -4 10.1.1.1 j11_mail
qjail create -n vlan12 -4 10.1.2.1 j12_site
В sysctl.conf установлен
net.inet.ip.fw.one_pass=0
И соответственно прокидывание портов на сервисы с помощью ipfw:
/etc/rc.ipfw
${FW} add check-state :v0 # Для трафика с igb0
${FW} add check-state :v11 #v11,v12... - это соотв-но для vlan'ов# НАБОР ПРАВИЛ РАЗРЕШАЮЩИХ ЧТО НАДО ДЛЯ igb0.
.....
# ЕДИНООБРАЗНЫЕ БЛОКИ ДЛЯ ПРОКИДЫВАНИЯ С VLAN'ов в клетки
${FW} nat 1 config if vlan11 log deny_in reset same_ports \
redirect_port tcp 10.1.1.1:22 22 \
redirect_port tcp 10.1.1.1:25 25 \
redirect_port tcp 10.1.1.1:465 465 \
redirect_port tcp 10.1.1.1:587 587
${FW} add nat 1 all from any to 1.2.3.11 in via vlan11
${FW} add setfib 1 all from 10.1.1.1 to any
${FW} add setfib 1 all from any to 10.1.1.1
${FW} add skipto 5000 all from 10.1.1.1 to any out via vlan11 keep-state :v11
${FW} add allow log tcp from any to 10.1.1.1 22,25,465,587 setup keep-state :v11
# Всё запретили (это после разрешающих правил для :v0)
${FW} add deny all from any to any
# 5000 правило куда теоретически переходит пакет выходящий из клетки
${FWCMD} add 5000 nat 1 all from any to any via vlan11
${FWCMD} add allow all from any to any
И собственно проблема в чём:
Изнутри клетки - всё работает. Т.е. я находясь в клетке делаю ssh ВНЕШНИЙ_ПОСТОРОННИЙ_СЕРВЕР и вижу на этом сервере, что соединение приходит с ip адреса "закреплённого" за клеткой.
А вот если я снаружи пытаюсь сделать telnet 1.2.3.11 25 , и смотрю tcpdump'ом - то вижу что пакет пришёл на внешний ip, а ответ идёт от 10.1.1.1 - но через igb0 интерфейс! И соответственно соединение не устанавливается.
Я всю голову сломал себе, помогите пожалуйста определить где неверная настройка.