В моей локальной сети есть vsftpd
сервер; есть гипотетический клиентский компьютер в другой подсети, который не может устанавливать прямые подключения к моему FTP-серверу; и есть маршрутизатор между 2 подсетями, фактически VPN.
У меня нет доступа к маршрутизатору, поэтому я не могу сделать port range
с iptables
.
OpenSSH
сервер работает на клиенте, поэтому я могу пересылать отдельные порты. Также я могу подключиться к любому порту на гипотетическом FTP-клиенте. Поэтому я подумал, что могу перенаправить порт управления 21 клиенту и заставить vsftpd
подключаться напрямую к клиенту для потоков данных (режим active
). Но vsftpd
говорит 500 Illegal PORT command
, вероятно, потому что адрес ip
, сообщаемый клиентом, отличается от ip соединения, сделанного ssh
с портом 21
.
1 2015.03.30 14:28:24:0263 0015|->PWD
1 2015.03.30 14:28:24:0279 0016|<-257 "/okimftp" is the current directory
1 2015.03.30 14:28:24:0279 0000|->PORT 10,3,2,9,223,67
1 2015.03.30 14:28:24:0279 0000|<-500 Illegal PORT command
Так что, возможно, мне понадобится прокси-сервер FTP
на клиентском компьютере, который будет изменять адреса в командах управления (для активного режима) и либо иметь свой собственный бэкэнд в моей локальной сети, либо управлять сеансом ssh для создания дополнительных переадресация портов (для пассивного режима)
Решенный с парой 3proxy
.
бэкенд 3proxy.cfg в моей LAN:
auth iponly
# only allow connect to control or ephemeral ports on FTP server
allow * * ftp.company.org 21,30000-65535
socks -u
туннель:
ssh@client.net -R 0.0.0.0:1080:localhost:1080
frontend 3proxy.cfg на клиенте:
auth iponly
# allow host names that are resolvable only remotely
fakeresolve
allow *
# chain FTP proxy to parent Socks5 proxy with remote resolve
parent 1000 socks5+ 127.0.0.1 1080
ftppr -p2121