В наличии сервер под у правлением FreeBSD, выполняющий роль маршрутизатора. У сервера 2 сетевых интерфейса, смотрящие в разные подсети (внутреннюю и внешнюю). FreeBSD является дефолтным роутером для хостов из внутренней подсети.
Так же, есть второй маршрутизатор, который тоже имеет 2 сетевых интерфейса, смотрящие в те же подсети, что и у FreeBSD, а так же на этом маршрутизаторе настроен VPN. FreeBSD знает маршрут до сети VPN через внешний интерфейс.
Проблема заключается в том, что пакеты TCP с флагом SYN, отправленные из сети VPN во внутреннюю сеть через второй маршрутизатор, успешно доходят до целевого хоста. Затем целевой хост отправляет ответ с флагами SYN+ACK в сеть VPN через FreeBSD (так как он является для хоста дефолтным роутером), но FreeBSD, получив на вход такой пакет, даже не пытается маршрутизировать его через внешний интерфейс на второй роутер, а сразу отвечает хосту пакетом с флагом RST.
Т.е., суть проблемы в том, что имеющаяся FreeBSD не маршрутизирует TCP-пакеты с флагом SYN+ACK. Но если попробовать установить соединение с внутреннеого хоста с каким-либо хостом из VPN - соединение устанавливается.
В tcpdump это выглядит вот так:
Код: Выделить всё
10:20:49.489471 IP 172.16.16.172.22 > 10.11.0.2.36404: Flags [S.], seq 3415517329, ack 2442972357, win 28960, options [mss 1460,sackOK,TS val 1393955687 ecr 173685929,nop,wscale 9], length 0
10:20:49.489513 IP 10.11.0.2.36404 > 172.16.16.172.22: Flags [R.], seq 1, ack 1, win 0, length 0
10:20:50.488604 IP 172.16.16.172.22 > 10.11.0.2.36404: Flags [S.], seq 3431128753, ack 2442972357, win 28960, options [mss 1460,sackOK,TS val 1393955937 ecr 173686179,nop,wscale 9], length 0
10:20:50.488638 IP 10.11.0.2.36404 > 172.16.16.172.22: Flags [R.], seq 1, ack 1, win 0, length 0
Нашел причину блокировки: дефолтное правило в PF "block all"
Но появилась новая проблема... Какое бы я разрешающее правило не писал - все равно блокирует (((