![一个公共 IP 后面有多个 FTP 主机](https://linux22.com/image/625338/%E4%B8%80%E4%B8%AA%E5%85%AC%E5%85%B1%20IP%20%E5%90%8E%E9%9D%A2%E6%9C%89%E5%A4%9A%E4%B8%AA%20FTP%20%E4%B8%BB%E6%9C%BA.png)
我有两个盒子。一个是 ubuntu,一个是 Windows。两者都托管 http 和 ftp 站点。之前它们通过不同的 IP 连接到互联网,所以没有问题,但是,现在我们只剩下一个公共 IP,我必须让两台机器都可用,而无需更改端口。
现在,由于两者都处理不同的域,我在 ubuntu 框中添加了一个虚拟主机,该虚拟主机代理反向到所需域上的 Windows 框
然而,当谈到 ftp 时,我很茫然,如何在 ubuntu 框中处理域 A,并推迟域 b 以供 Windows 框处理?
我在 ubuntu 系统上使用 vsftpd,在 Windows 系统上使用 IIS
任何帮助表示感谢
路易斯
答案1
一种解决方法是让其中任意一个盒子处理所有 FTP 流量,其中一个用户上传到本地文件系统,另一个用户上传到从另一台服务器导出的文件共享。
或者完全放弃 FTP 并使用 WebDAV,它将允许基于名称的虚拟托管。
答案2
不幸的是,ftp 不像 http 那样支持基于主机名/DNS 的虚拟主机。
因此,如果您必须有两个单独的 ftp 站点,那么我建议您获取一个额外的外部 IP 地址。
如果它们不是匿名 ftp 站点,您可能希望为每个 ftp 用户设置不同的 chroot。
祝你好运。
答案3
嗯,
选项1
您是否尝试过为 FTP 服务器使用 SRV 记录?您需要实施一些 DNS 更改,并且它们必须映射到 FTP 服务器的内部 IP 地址,因此会涉及一些 NAT,但这听起来是可行的方法。来自维基百科:
A Service record (SRV record) is a specification of data in the Domain Name System defining the location, i.e. the hostname and port number, of servers for specified services.
并采用以下形式
_service._proto.name. TTL class SRV priority weight port target.
所以对你来说我会做类似的事情
_ftp._tcp.ftp1.example.com. 3600 IN 0 1 21 ftpserver1.example.com
当然,还有某种方法将 ftpserver1.example.com 解析为适当的 IP。
坏消息是?并非所有客户端软件都支持 SRV 记录,因此也许
选项 2
您应该使用一个监听端口 21 的代理并根据请求的 DNS 名称将流量转发到适当的 ftp 服务器。