这与关于GCP的这个问题非常相关,但是在AWS上,并且试图用不同的方法来解决它。
我有一个FTP客户端试图以ftp活动模式连接到Internet上的一些ftp服务器。FTP客户端有私有地址,它位于NAT实例服务器(而不是NAT网关)后面
这个NAT服务器也有私有地址,并且它本身就在VPC Internet GW的后面.
图表:
FTP客户端(10.60.0.0/24) -> NAT服务器(10.254.254.0/24) -> IGW -> Internet ->防火墙/NAT-> FTP服务器
NAT服务器是AWS NAT Linux (内核4.9),它打开了伪装。
对于活动-FTP(端口模式),这是不工作的.
我已经激活了CT助手(nf_nat_ftp)及其触发iptables规则:
iptables -A PREROUTING -t raw -p tcp --sport 1024: --dport 21 -j CT --helper ftp我可以看到,"PORT“命令正被正确地从FTP客户端的私有IP地址转换为NAT服务器的私有IP。
不幸的是,这还不够,因为FTP服务器正在接收带有私有地址( NAT服务器之一)的FTP "PORT“命令。
因此,从ftp服务器启动的ftp数据连接当然永远不会恢复。
至少现在,我不能“替换”ftp客户端(它是遗留应用程序的一部分)。
有没有办法在端口命令中“注入”公共IP?一些想法出现在我的脑海中,但我找不到证据证明它们是现实的还是我在浪费时间:
关于选项3:我尝试了网易,它实际上可以更改端口命令,但它似乎给ftp客户端的nat带来了麻烦!:(
当然,其他解决方案是受欢迎的!
谢谢。
发布于 2017-12-29 11:59:53
试着回答我自己关于有限用例的问题
限制是:在nat服务器后面只有一个处于活动模式的ftp客户端(它不能用于伪装)。
首先,启动nat服务器本地端口21上的网络,将包含“端口10,60,10,11”的所有数据包转换为“端口1,2,3,4”(从而保持端口号不变):
./netsed tcp 21 0 0 s/PORT%2010,60,10,11,/PORT%201,2,3,4,其次,将流量从ftp客户端重定向到netsed:
iptables -t nat -A PREROUTING -p tcp --dport 21 -j REDIRECT --to 21这将使ftp服务器“高兴”,并将有效地尝试打开从端口20到公共IP的新连接。IGW会通过,但是NAT服务器不知道如何处理连接(它不在CT中,而是一个新的连接)。
因此,尽管它可能很难看,但现在将所有传入的流量从端口20转发到内部FTP客户端:
iptables -t nat -A PREROUTING -p tcp -d 10.254.254.203 --sport 20 --dport 1024:65535 -j DNAT --to-destination 10.60.10.11:1024-65535。
感谢@Steffen指出CT状态没有被设定。
发布于 2017-12-29 05:20:08
有没有办法在端口命令中“注入”公共IP?
即使这是可能的,这也于事无补。虽然服务器可能会接受带有公共IP地址的PORT命令,但它将无法使用此IP地址和端口连接回FTP客户端,因为IGW上没有匹配的NAT状态。
如果您有两个NAT(在您的情况下是NAT服务器和IGW),那么这两个都需要在PORT命令中转换地址,并创建一个状态来将连接从服务器传递到新设置的IP、端口到IP,以及从原始端口命令传递端口。
我真的建议远离FTP,使用不像FTP那样需要动态数据连接的替代方案。只有当NAT网关无法翻译端口/PASV时,这种动态连接才会给您带来问题--可能是因为缺少FTP助手,或者是因为您正在使用FTPS (即FTP与TLS),其中NAT网关甚至无法看到原始IP、端口,并且也无法根据需要修改控制连接。取而代之的是使用SFTP (FTP over SSH)之类的协议,因为它们只使用一个TCP连接,所以NAT没有问题。
https://serverfault.com/questions/889934
复制相似问题