从NAT实例后面的AWS VPC私有子网访问ftp

时间:2014-11-26 23:43:00

标签: amazon-web-services ftp nat vpc

我在AWS上创建了一个包含公共和私有子网的VPC。所有应用服务器都在私有子网中,所有出站请求都必须通过面向Internet的NAT实例。

目前,我们的项目要求应用服务器访问服务提供商提供的ftp服务器。

我已经尝试了几种方法来管理它,但都没有运气。我所做的是打开一个端口范围,比如说(40000 - 60000)NAT和APP安全组,以及标准的ftp端口20 - 21。

可以传递用户身份验证,但我无法从应用服务器列出内容。

我可以从NAT访问ftp服务器,完全没问题。

那么我该怎么做才能让它发挥作用?

2 个答案:

答案 0 :(得分:4)

@JohnRotenstein绝对正确,如果可以,你应该使用被动FTP。如果像我一样,你坚持使用坚持你使用Active FTP的客户,因为他们想要你连接的FTP站点自1990年以来一直在运行,现在更改它是完全不合理的,然后继续阅读。

AWS的NAT服务器不支持使用Active FTP连接的私有子网中的计算机。完全停止。如果您问我,这是一个错误,但如果您询问AWS支持,他们会说这是一个不受支持的功能。

我们最终提出的解决方案(并且有效)是:

  • 将公有子网中的弹性网络接口(ENI)添加到私有子网中的EC2实例上
    • 所以现在您的EC2实例有2个网络适配器,2个内部IP等
    • 让我们将这个新的ENI称为“公共ENI”
  • 为您的新公开ENI附加专用的弹性IP
    • 我们假设你得到54.54.54.54并且新的公共ENI的内部IP地址是10.1.1.10
  • 在操作系统的网络配置中添加路由,仅使用新的公共ENI

    • 在Windows中,the command将如下所示,假设您尝试连接的邪恶活动ftp服务器位于8.1.1.1:

      route add 8.1.1.1 mask 255.255.255.254 10.1.1.1 metric 2
      
    • 这使用子网掩码255.255.255.254(即此IP和仅此IP)为使用以太网适配器2的Internet网关10.1.1.1添加到8.1.1.1的FTP服务器的所有流量的路由(你的第二个网卡)

  • 美联储了吗?是的,我也是,但现在来了很难。操作系统不知道它是公共EIN的公共IP地址。因此,您需要教您的FTP客户端使用公共IP发送PORT命令。例如,如果使用CURL,请使用--ftp-port命令,如下所示:

    curl -v --ftp-port 54.54.54.54 ftp://8.1.1.1 --user myusername:mypass
    

瞧!您现在可以从(几乎完全)私有子网中的EC2计算机连接到恶梦活动FTP站点。

答案 1 :(得分:2)

尝试在FTP上使用被动(PASV)模式。

来自Slacksite:Active FTP vs. Passive FTP, a Definitive Explanation

  

在主动模式FTP中,客户端从随机非特权端口(N> 1023)连接到FTP服务器的命令端口,端口21.然后,客户端开始侦听端口N + 1并发送FTP命令PORT N + 1到FTP服务器。然后,服务器将从其本地数据端口(即端口20)连接回客户端的指定数据端口。

因此,流量正在尝试在未通过NAT的其他端口上进行通信。相反,被动模式会创建一个出站连接,然后允许通过NAT