将来自不同子域的呼叫转移到不同的内部机器

如何将来自不同子域的stream量路由到不同的内部IP地址?

我build立了一个Debian路由器,它有一个公有的IP和一个指向这个IP的域名,我想有不同的子域到达不同的内部机器。

我在这里谈论HTTP,SSH和FTPstream量,并在路由器上安装Shorewall和dnsmasq。

例如,URL:ftp.example.com我想指向一台内部IP为192.168.1.10的机器,然后是dev.example.com我想要另一个内部IP。 说192.168.1.200

如果我能指定哪些协议允许在哪些子域上,并明确地将每个协议和端口路由到内部机器,那将是一件好事。

对于一些协议来说,这只是简单的端口转发是不可能的,除非你在非标准端口上运行它们(所以路由器本身在端口22上用于SSH,内部机器1在端口23上出现在公共IP上,内部机器等等端口24等等)或者具有多于一个的公共地址。

HTTP – 这可以通过使用反向代理来完成。 有类似nginx运行,并有最初采取端口80上的所有stream量,并使用代理function按请求的(子)域请求到相关的机器的请求。 其他Web服务器也具有相似的代理function(即Apache,尽pipe像nginx那样运行更小的代码更有效,如果您只需要代理function的话)。

HTTPS – 如果所有的连接客户端都支持SNI,那么您可以使用与上面提到的HTTP相同的方法。 不幸的是,在Windows XP下运行的Internet Explorer版本不支持SNI,因此取决于您的客户群,这可能是一个问题。 受影响的浏览器将向其用户显示证书错误。 另一个解决方法是,获得一个对所有需要的名称都有效的证书(例如,如果理论是非常不同的名称,则为多名称证书,如果它们都是单个子域名,则为通配证书),但是这些通常比单个名称证书更昂贵。

SSH – 不是直接可能的。 虽然你可以SSH进入路由器,然后从那里进一步SSH进入networking。 即使端口转发和这样的作品通过这样的多跳,如果你得到的咒语是正确的。 如果你使用SSH工作,那么请记住SFTP或者SCP在很多情况下是FTP的可行替代scheme,并且FTP并没有给你带来好处。

FTP – 我有一段时间没有运行FTP服务器,所以我不是专家。 可能会有反向代理选项,但是我对协议的运作方式有所怀疑。 这里的一个选项是使用一个FTP服务,让它通过networking共享访问networking上的不同机器(根据你的authentication要求,这可能是不实际的,但是很多东西应该是足够的)。 你也可以考虑使用SCP或SFTP(通过SSH),它比FTP更高效和更安全。

你想使用这个反向代理。 Apache的mod_proxy应该做的伎俩。