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

Joe*_*tar 1 debian routing subdomain shorewall

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

我已经设置了一个 Debian 路由器,它有一个公共 IP 和一个指向该 IP 的域名,我想让不同的子域到达不同的内部机器。

我在这里谈论的是 HTTP、SSH 和 FTP 流量,我在路由器上安装了 Shorewall 和 dnsmasq。

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

如果我可以指定在哪些子域上允许使用哪些协议并将每个协议和端口明确路由到内部机器,那就太好了。

Dav*_*ett 5

对于某些协议,仅通过端口转发是不可能的,除非您在非标准端口上运行它们(因此路由器本身在 SSH 的端口 22 上,内部机器 1 出现在公共 IP 的端口 23 上,内部机器等等端口 24 等)或拥有多个公共地址。

HTTP - 这可以通过使用反向代理来完成。运行 nginx 之类的东西,并让所有流量最初进入端口 80,并使用代理功能根据请求的(子)域将请求发送到相关机器。其他 Web 服务器也具有类似的代理功能(即 Apache,但如果您只需要代理功能,运行像 nginx 这样更小的东西会更有效)。

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

SSH - 不能直接使用。尽管您可以通过 SSH 连接到路由器,然后从那里通过 SSH 进一步连接到网络。如果你的咒语正确的话,即使是端口转发等也可以通过像这样的多跳来工作。如果您使用 SSH,请记住 SFTP 或 SCP over 在许多情况下是 FTP 的可行替代方案,并赋予 FTP 没有的好处。

FTP - 我已经有一段时间没有运行 FTP 服务器了,所以我不是这里的专家。可能有反向代理选项,但我对协议运作方式的了解对此表示怀疑。这里的一种选择是拥有一个 FTP 服务并让它通过网络共享访问网络上的不同机器(这可能不切实际,具体取决于您的身份验证要求,但对于很多事情来说应该足够了)。您还可以考虑使用 SCP 或 SFTP(通过 SSH),它们比 FTP 更高效、更安全。