Есть сервак в локалке с двумя интерфейсами в две подсети. На нём необходимо создать jails, которые выведены в эти разные подсети (по их IP).
Ограничения на взаимодействие между сетями нет, просто IP для jail соответствуют этим двум подсетям.
Я встал в тупик на проблеме обеспечения корректной работы FTP в этих jail (REVERSE ftp-proxy). Перепробовал всё, но без толку.

Всё нормально работает в пределах взаимодействий по 21 порту (командный режим). Как только идёт переключение в пассивный режим для передачи данных (например, команда ls), возникает очень длительный затык. Всё отрабатывает, но только через несколько минут.
Разруливаю всё через файрволл PF (FreeBSD 10.3). Все руководства перечитал и перепробовал, хотя они не предусматривают такой случай жизни.
http://dant.net.ru/calomel/ftp_proxy.html
http://www.openbsd.org/faq/pf/ftp.html#server
https://home.nuug.no/~peter/pf/en/ftpproblem.html
Для тестовых целей я упростил схему до одного интерфейса и одной jail. Тестирую FTP из подсети где jail.
Сейчас использую такую конфигурацию PF (в последних экспериментах открыл порты больше 1023, хотя это ничего не изменило):
Код: Выделить всё
# ftp-proxy -R 10.48.41.81 -P 21
# Пробовал использовать рекомендованное тегирование пакетов, но оно не помогает.
# Расширенное логирование ftp-proxy тоже ничего не даёт.
iface_2="vlan0"
set skip on { lo0, lo1, lo2 }
scrub in all
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $iface_2 proto tcp from any to 10.48.41.81 port 21 -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"
pass in quick log on $iface_2 inet proto tcp from any to 127.0.0.1 port 8021
# Было рекомендовано здесь: http://dant.net.ru/calomel/ftp_proxy.html Не помогает.
pass in quick log on $iface_2 inet proto tcp from any to 10.48.41.81 port 21
pass in quick log on $iface_2 proto tcp from any to 10.48.41.81 port > 1023
pass out quick all
block drop in all
Код: Выделить всё
@1 nat-anchor "/*" all
@2 rdr-anchor "/*" all
@3 rdr pass on vlan0 inet proto tcp from <int_net:0> to 10.48.41.81 port = ftp -> 127.0.0.1 port 8021
………………………
@32 anchor "/*" all
@33 pass in log quick on vlan0 inet proto tcp from <int_net:0> to 10.48.41.81 port = ftp flags S/SA keep state
@34 pass in log quick on vlan0 inet proto tcp from any to 10.48.41.81 port > 1023 flags S/SA keep state
@35 pass in log quick on vlan0 inet proto tcp from any to 127.0.0.1 port = ftp-proxy flags S/SA keep state
@36 pass out quick all flags S/SA keep state
@37 block drop in all
Код: Выделить всё
13:21:13.090836 00:50:56:a8:0c:9b > 3c:a8:2a:0a:4d:7d, ethertype IPv4 (0x0800), length 74: 10.48.41.197.63670 > 10.48.41.81.21: Flags [P.], seq 487664651:487664659, ack 1176357923, win 1040, options [nop,nop,TS val 488596182 ecr 3070076677], length 8
13:21:13.091037 3c:a8:2a:0a:4d:7d > 00:50:56:a8:0c:9b, ethertype IPv4 (0x0800), length 89: 10.48.41.81.21 > 10.48.41.197.63670: Flags [P.], seq 1:24, ack 8, win 1040, options [nop,nop,TS val 3070102204 ecr 488596182], length 23
13:21:13.092517 00:50:56:a8:0c:9b > 3c:a8:2a:0a:4d:7d, ethertype IPv4 (0x0800), length 72: 10.48.41.197.63670 > 10.48.41.81.21: Flags [P.], seq 8:14, ack 24, win 1040, options [nop,nop,TS val 488596182 ecr 3070102204], length 6
13:21:13.092952 3c:a8:2a:0a:4d:7d > 00:50:56:a8:0c:9b, ethertype IPv4 (0x0800), length 114: 10.48.41.81.21 > 10.48.41.197.63670: Flags [P.], seq 24:72, ack 14, win 1040, options [nop,nop,TS val 3070102206 ecr 488596182], length 48
13:21:13.094127 00:50:56:a8:0c:9b > 3c:a8:2a:0a:4d:7d, ethertype IPv4 (0x0800), length 74: 10.48.41.197.63691 > 10.48.41.81.56265: Flags [SEW], seq 2262204441, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 488596182 ecr 0], length 0
13:21:13.094168 3c:a8:2a:0a:4d:7d > 00:50:56:a8:0c:9b, ethertype IPv4 (0x0800), length 74: 10.48.41.81.56265 > 10.48.41.197.63691: Flags [S.E], seq 839468741, ack 2262204442, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 1193070092 ecr 488596182], length 0
13:21:13.095635 00:50:56:a8:0c:9b > 3c:a8:2a:0a:4d:7d, ethertype IPv4 (0x0800), length 66: 10.48.41.197.63691 > 10.48.41.81.56265: Flags [.], ack 1, win 1040, options [nop,nop,TS val 488596182 ecr 1193070092], length 0
13:21:13.095662 00:50:56:a8:0c:9b > 3c:a8:2a:0a:4d:7d, ethertype IPv4 (0x0800), length 72: 10.48.41.197.63670 > 10.48.41.81.21: Flags [P.], seq 14:20, ack 72, win 1040, options [nop,nop,TS val 488596182 ecr 3070102206], length 6
13:21:13.095760 3c:a8:2a:0a:4d:7d > 00:50:56:a8:0c:9b, ethertype IPv4 (0x0800), length 66: 10.48.41.81.56265 > 10.48.41.197.63691: Flags [F.], seq 1, ack 1, win 1023, options [nop,nop,TS val 1193070094 ecr 488596182], length 0
13:21:13.096725 00:50:56:a8:0c:9b > 3c:a8:2a:0a:4d:7d, ethertype IPv4 (0x0800), length 66: 10.48.41.197.63691 > 10.48.41.81.56265: Flags [.], ack 2, win 1040, options [nop,nop,TS val 488596182 ecr 1193070094], length 0
13:21:13.106163 3c:a8:2a:0a:4d:7d > 00:50:56:a8:0c:9b, ethertype IPv4 (0x0800), length 66: 10.48.41.81.21 > 10.48.41.197.63670: Flags [.], ack 20, win 1040, options [nop,nop,TS val 3070102219 ecr 488596182], length 0
^C
11 packets captured

Пробовал ftpsesame, тоже ничего не меняет.