首先,我对 docker 引擎还很陌生。我有一个由两台服务器组成的小型集群,其中装有 docker 引擎。
在 node1 上,我有: 一个带有 openvpn 的容器 一个带有配置了被动模式的 ftp 的容器
容器 ftp:
docker run -d -v /var/lib/docker/volumes/ftpuserdb/_data:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=bob -e FTP_PASS=12345 -e PASV_ADDRESS=<PUBLIC IP> -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS_ENABLE=YES -e PASV_ENABLE=YES --name ftp-server fauria/vsftpd
在 node2 上我只有一个容器来测试连接 ftp(ftpclient)。
我可以从(ftpclient)连接到 ftp,但是当我尝试使用被动模式时,出现错误:
227 进入被动模式 (public,ip,from,node1,82,110)。(我隐藏了 ip ^^)
ftp:连接:连接被拒绝
当我检查防火墙时:我发现我的端口是打开的。
Chain DOCKER (2 references)
target prot opt source destination
ACCEPT udp -- anywhere IP udp dpt:openvpn
ACCEPT tcp -- anywhere IP tcp dpt:3000
ACCEPT tcp -- anywhere IP tcp dpt:21110
ACCEPT tcp -- anywhere IP tcp dpt:21109
ACCEPT tcp -- anywhere IP tcp dpt:21108
ACCEPT tcp -- anywhere IP tcp dpt:21107
ACCEPT tcp -- anywhere IP tcp dpt:21106
ACCEPT tcp -- anywhere IP tcp dpt:21105
ACCEPT tcp -- anywhere IP tcp dpt:21104
ACCEPT tcp -- anywhere IP tcp dpt:21103
ACCEPT tcp -- anywhere IP tcp dpt:21102
ACCEPT tcp -- anywhere IP tcp dpt:21101
ACCEPT tcp -- anywhere IP tcp dpt:21100
但是如果我直接从主机尝试从我的 node2 进行 ftp,则没有任何问题。一切正常。
有人知道吗?我尝试了很多方法,但就是搞不定……
问候
答案1
根据维基百科:
在被动模式下,客户端使用控制连接向服务器发送 PASV 命令,然后从服务器接收服务器 IP 地址和服务器端口号,客户端随后使用该命令从任意客户端端口打开到接收到的服务器 IP 地址和服务器端口号的数据连接。
因此基本上客户端可以连接到 FTP 服务器上的任何随机端口。
一些 FTP 服务器(proftpd
带有PassivePorts
指示例如)可以被告知将用于被动模式的端口限制在某个范围内,你可以映射到同一范围在主机上。