使用 FQDN 的 ftp 代理

使用 FQDN 的 ftp 代理

我在 Watchguard 后面有两台服务器,一台是 Linux 服务器,一台是 Windows 服务器。watch guard 将 http 和 ftp 请求(端口 80 和 21)转发到代理服务器。

我已经在代理服务器上配置了 apache,因此我可以根据域名将 http 请求代理到任一服务器,如下所示

<VirtualHost *:80>
  ServerName        mysite.com.au
  ProxyPreserveHost On
  ProxyPass         "/" "http://10.0.2.21/"
  ProxyPassReverse  "/" "http://10.0.2.21/"
</VirtualHost>

<VirtualHost *:80>
    ServerName        mysite.net.au
    ProxyPreserveHost On
    ProxyPass         "/" "http://10.0.2.31/"
    ProxyPassReverse  "/" "http://10.0.2.31/"
</VirtualHost>

因此 .com.au 指向 10.0.2.21,而 .net.au 指向 10.0.2.31。这些都是内部服务器。

我想对 ftp(端口 21)进行相同类型的转发。

因此,如果我尝试通过 ftp 连接到托管在 Windows 服务器上的站点,代理将知道它托管在 Windows 服务器上(10.0.2.31),并将 ftp 请求转发到正确的服务器。

我想要做的是使用一个代理来监听端口 21,并根据请求的 DNS 名称将流量转发到适当的 ftp 服务器。我有代理,它已经为 http 工作了,但我需要知道如何对 ftp 执行相同的操作。

答案1

正如已经评论过的,不,你不能。

除非每个 FQDN 的 FTP 服务器都监听其自己的 IP 地址(或不同的端口),否则您无法使用 FTP 执行使用 HTTP 所做的事情。

当 Web 浏览器向 Web 服务器发出请求时,它会在每个请求的标头中包含主机名和 FQDN Host:。该Host:标头允许反向代理将请求路由到不同的后端。

FTP 从未提供过这样的服务。FTP 客户端只需建立 TCP/IP 连接,然后等待服务器响应代码在传输 FTP 之前客户端命令例如身份验证详细信息。FTP 客户端不会在会话的任何地方传输它希望连接到哪个服务器。因此,您无法根据 FQDN 将 FTP 连接路由到不同的后端。

编辑:感谢下面的评论:RFC 7151在 2014 年引入了该HOST命令,但客户端支持仍然不成熟,因此不值得依赖。

答案2

有一个基于mod_proxy模块的解决方案ProFTPDhttps://stackoverflow.com/a/35020052/226278

仍然依赖于相当新的HOST命令。

相关内容