Как пробросить vsftpd за nat?
Есть хост host1 с vsftpd сервером, работающий на порте 21. А так же есть второй хост host2, который я хочу использовать в качестве прокси.
Я хочу сделать так, чтобы при подключении к host2 по порту 2121, трафик проксировался на host1 на порт 21. Проксирование хочу сделать c помощью DNAT и SNAT.
Сервер vsftpd настроен так, чтобы использовать еще доп. диапазон портов:
pasv_enable=YES
pasv_min_port=8000
pasv_max_port=8099
Вот, что у меня получилось:
# пробрасываем порт 2124 с host2 на порт 21 на host1
-A PREROUTING -p tcp --dport 2124 -j DNAT --to-destination host1:21
# пробрасываем порты 8000:8099 с host2 на порты 8000:8099 на host1
-A PREROUTING -p tcp --dport 8000:8099 -j DNAT --to-destination host1:8000-8099
# поставляем адрес host2 вместо реального адреса клиента?
-A POSTROUTING -p tcp --dport 8000:8099 -j SNAT --to-source host2
-A POSTROUTING -p tcp --dport 21 -j SNAT --to-source host2
Если попробовать подключиться по адресу host2:2121, тогда у нас получится установить соединение, но только при одном условии: если клиент будет иметь доступ к host1 по iptables.
Почему-то, при подключении к host2, пакеты от клиента все равно направляются на host1. А этой связи я как раз хочу избежать.
При подключении клиента к host2, на host1 приходит такое соединение напрямую с адреса клиента:
IN=enp34s0 OUT= MAC=2c:f0:5d:0d:db:21:80:7f:f8:79:21:42:08:00 SRC=client DST=host1 LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=20998 DF PROTO=TCP SPT=31755 DPT=8008 WINDOW=65535 RES=0x00 SYN URGP=0
Как видно, это соединение на порт DPT=8008, один из портов пассивно режима, но почему клиент напрямую установил соединение с host1?
Ответы (1 шт):
В конфиге vsftpd нужно добавить параметр
pasv_address=host2
Где, вместо host2, подставить ip адрес прокси хоста.