我的局域网中有vsftpd
一台服务器;另一个子网中有一台假想的客户端机器,它无法直接连接到我的 FTP 服务器;两个子网之间有一个路由器,实际上是 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
客户端计算机上的某些代理,这些代理可以修改控制命令中的地址(用于主动模式),并且在我的 LAN 中拥有自己的后端或控制 ssh 会话以创建额外的端口转发(用于被动模式)
答案1
用一对 解决了3proxy
。
我的局域网中的后端 3proxy.cfg:
auth iponly
# only allow connect to control or ephemeral ports on FTP server
allow * * ftp.company.org 21,30000-65535
socks -u
隧道:
[email protected] -R 0.0.0.0:1080:localhost:1080
客户端上的前端 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