我已经经历过几次了,并且完全陷入了配置的困境。目前,我已经为 FTP 服务器设置了以下内容:
本地PC(我的MAC)->AWS EC2(HaProxy)->FTP服务器
以下是我迄今为止所做的一些事情:
- 已确认端口 20/21 在安全组中开放
- 在 SG 中配置打开 TCP 端口(对于被动端口)。
- 通过 netstat 确认相应的端口已打开(作为健全性检查,我让 HaProxy 绑定到 0-65535 TCP 端口(SG 相同)。
- 尝试通过代理连接到 FTP 服务器时运行 TCPDump
这是我的 haproxy.cfg 的副本
listen FTP :21, :10000-10250
mode tcp
log 127.0.0.1 local0 debug info warning error
bind *:21
bind *:20
server foo xx.xx.xx.xx:21 check port 21
当我运行 tcpdump 时,我得到:
10:54:11.695983 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 45:51, ack 684, win 16384, options [nop,nop,TS val 652929632 ecr 148377527], length 6: FTP: EPSV
10:54:11.726462 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 684:726, ack 51, win 227, options [nop,nop,TS val 148377680 ecr 652929632], length 42: FTP: 229 Extended Passive mode OK (|||12612|)
10:54:11.726513 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 726, win 16378, options [nop,nop,TS val 652929662 ecr 148377680], length 0
10:55:27.134823 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 51:80, ack 726, win 16384, options [nop,nop,TS val 653004663 ecr 148377680], length 29: FTP: EPRT |1|10.33.x.x|56397|
10:55:27.165241 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 726:798, ack 80, win 227, options [nop,nop,TS val 148396540 ecr 653004663], length 72: FTP: 500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
10:55:27.165287 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 798, win 16375, options [nop,nop,TS val 653004693 ecr 148396540], length 0
10:55:27.165377 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 80:106, ack 798, win 16384, options [nop,nop,TS val 653004693 ecr 148396540], length 26: FTP: PORT 10,33,x,x,220,77
10:55:27.194982 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 798:870, ack 106, win 227, options [nop,nop,TS val 148396547 ecr 653004693], length 72: FTP: 500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
10:55:27.195025 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 870, win 16375, options [nop,nop,TS val 653004722 ecr 148396547], length 0
10:55:27.195304 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 106:112, ack 870, win 16384, options [nop,nop,TS val 653004722 ecr 148396547], length 6: FTP: LIST
10:55:27.224432 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 870:894, ack 112, win 227, options [nop,nop,TS val 148396555 ecr 653004722], length 24: FTP: 425 No data connection
10:55:27.224464 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 894, win 16381, options [nop,nop,TS val 653004751 ecr 148396555], length 0
我在 HaProxy 上配置了日志记录,目前有这个(不确定这是否有帮助):
Jun 12 14:49:25 localhost haproxy[18805]: 50.232.x.x:14857 [12/Jun/2017:14:48:24.811] FTP FTP/media 1/14/60772 792 -- 0/0/0/0/0 0/0
Jun 12 14:49:25 localhost haproxy[18805]: 50.232.x.x:14857 [12/Jun/2017:14:48:24.811] FTP FTP/media 1/14/60772 792 -- 0/0/0/0/0 0/0
Jun 12 14:51:48 localhost haproxy[18805]: 50.232.x.x:56254 [12/Jun/2017:14:49:41.820] FTP FTP/media 1/13/127012 960 -- 0/0/0/0/0 0/0
Jun 12 14:51:48 localhost haproxy[18805]: 50.232.x.x:56254 [12/Jun/2017:14:49:41.820] FTP FTP/media 1/13/127012 960 -- 0/0/0/0/0 0/0
Jun 12 14:52:02 localhost haproxy[18805]: 50.232.x.x:56342 [12/Jun/2017:14:51:54.618] FTP FTP/media 1/14/7670 401 -- 1/1/1/1/0 0/0
Jun 12 14:52:02 localhost haproxy[18805]: 50.232.x.x:56342 [12/Jun/2017:14:51:54.618] FTP FTP/media 1/14/7670 401 -- 1/1/1/1/0 0/0
Jun 12 14:53:36 localhost haproxy[18805]: 50.232.x.x:56345 [12/Jun/2017:14:51:59.386] FTP FTP/media 1/19/97481 1032 -- 0/0/0/0/0 0/0
Jun 12 14:53:36 localhost haproxy[18805]: 50.232.x.x:56345 [12/Jun/2017:14:51:59.386] FTP FTP/media 1/19/97481 1032 -- 0/0/0/0/0 0/0
Jun 12 14:53:59 localhost haproxy[18805]: 50.232.x.x:56373 [12/Jun/2017:14:53:37.880] FTP FTP/media 1/14/21641 333 -- 0/0/0/0/0 0/0
Jun 12 14:53:59 localhost haproxy[18805]: 50.232.x.x:56373 [12/Jun/2017:14:53:37.880] FTP FTP/media 1/14/21641 333 -- 0/0/0/0/0 0/0
我可以连接到 FTP 服务器并 cd 到目录。但我无法在那里运行 ls/put/get 。当我尝试被动模式时,我得到:
ftp> ls
229 Extended Passive mode OK (|||12612|)
ftp: Can't connect to `54.234.x.x': Operation timed out
500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
425 No data connection
以主动模式运行:
Passive mode: off; fallback to active mode: off.
ftp> ls
500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
425 No data connection
我认为这不是一个问题,特别是对于 FTP 服务器而言,只是因为我可以通过代理连接到它。即使我直接连接到 FTP 服务器,我也可以在主动和被动模式下运行命令。我的问题是:
- 我还可以研究什么来进一步解决此问题?
- 我可以做任何进一步的日志记录配置来增强除我当前拥有的之外的任何类型的 TCP 请求的日志记录吗?
- HaProxy 中是否缺少一些配置方面的内容(我知道 HaProxy 本身是一个 HTTP 负载均衡器,但我查找了足够多的示例,可以将其配置为用作 FTP 服务器的代理,并且我无法将 FTP 服务器重新配置为作为 SFTP 运行)?
答案1
经过与我的同事的大量研究和调查后,发生的事情是这样的:
- HaProxy 可能是一个可行的解决方案。但是,FTP 服务器被配置为强制被动模式。 HaProxy 可用于代理 FTP 连接,但没有真正的方法将其配置为对被动连接做出相应的反应。结果,我无法运行 ls/get/put (甚至可能更多)命令!
我的解决方案是转到 ftp-proxy 并配置它。一旦我配置 ftp-proxy 将流量路由到 FTP 服务器(同时将其配置为侦听被动连接),VIOLA!有效!!
答案2
我也尝试做同样的事情,但 ls 命令失败了。以下是我在 HA 代理中配置的内容。监听 xmldb 10.204.24.71:2100 服务器 xmldb1 10.212.22.31:2100 检查 20 秒间 服务器 xmldb2 10.212.22.36:2100 检查 20 秒间
10.212.22.36和10.212.22.31是运行ftp服务器的DB服务器。并且只能从运行 HA 代理的 10.204.24.71 服务器访问它们。
现在我从其他无法访问数据库服务器但可以访问HA代理服务器的Linux机器进行连接。
我需要进行更多配置才能使其工作吗?