AWS EC2 被动 FTP - 服务器发送了带有不可路由地址的被动回复。改为使用服务器地址

AWS EC2 Passive FTP - Server sent passive reply with unroutable address. Using server address instead

我在 AWS ec2 实例上安装了 pureftp 运行ning。我试图以我认为有效的被动模式将其设置为 运行,但我发现它可能无法正常工作。我在 FileZilla

中收到以下错误
Status:         Connected
Status:         Retrieving directory listing...
Status:         Server sent passive reply with unroutable address. Using server address instead.
Status:         Directory listing of "/" successful

奇怪的是,有些人无法登录,而其他人则无法登录。

我有以下 pureftp 配置

端口范围

#Port range for passive connections replies. - for firewalling.

PassivePortRange `50000 50100`

PASV IP

#Force an IP address in PASV/EPSV/SPSV replies. - for NAT.
#Symbolic host names are also accepted for gateways with dynamic IP
#addresses.

ForcePassiveIP            `ftp.mydomain.com` "my cname record is mapped to my ec2 public dns"

当我在服务器上查看本地端口范围时,/proc/sys/net/ipv4/ip_local_port_range以下是开放的

32768   61000

我的 ec2 安全组打开了端口 50000 - 50100

当我查看我的服务器日志时,我偶尔会看到除此之外的其他内容。

Feb  5 08:57:41 ip-172-11-42-52 dhclient[1062]: DHCPREQUEST on eth0 to 172.11.32.1 port 67 (xid=0x601547fd)
Feb  5 08:57:41 ip-172-11-42-52 dhclient[1062]: DHCPACK from 172.11.32.1 (xid=0x601547fd)
Feb  5 08:57:43 ip-172-11-42-52 dhclient[1062]: bound to 172.11.42.52 -- renewal in 1417 seconds.

有人知道哪里出了问题吗?

所以我相信我已经解决了这个问题。似乎 aws 正在动态更改 ip 地址。当我为我的 passiveip 引用 ftp.domain.com 时,它解析到的 ip 与绑定到 cname 记录的初始 ip 不匹配。

解决方案是为我的 ec2 实例分配一个静态弹性 ip,并将我在 pureftp 中的 passiveip 设置为我的静态弹性 ip。到目前为止,它似乎已经解决了我的问题。

我找到了一些您可以尝试的解决方案。

https://serverfault.com/questions/821025/vsftpd-passive-reply-with-0-0-0-0-address-even-with-correct-pasv-address

我通过禁用 listen_ipv6 并在配置中启用监听来解决它。

listen_ipv6=否 听=是

Server sent passive reply with unroutable address. Using server address instead

通过将以下行添加到 etc/vsftpd.conf

,我解决了让 FTP 在 AWS EC2 上工作的错误
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_addr_resolve=YES
pasv_address=XX.XX.XX.XX

XX.XX.XX.XX 设置为分配为实例的 public 地址的弹性 IP。

1024-1048 和 20-21 范围内的端口创建为自定义 TCP 入站规则,允许来自任何地方的连接。

FTP 服务器是 运行 vsftpd,在使用 Filezilla 客户端访问的 Ubuntu EC2 上。

我通过设置 vsftpd.conf

得到了解决方案
listen=YES
listen_ipv6=NO

参考这里