是否有可能将所有流量重定向到 NAT 后面的指定主机?
例如,我有一台服务器、一个域“mydomain.com”和 3 个位于 NAT 后面的主机。我希望配置 3 个子域:
host1.mydomain.com
host2.mydomain.com
host2.mydomain.com
并且它们每个都将所有端口重定向到本地网络中的指定主机。
该重定向应提供如下功能:
http://host1.mydomain.com(可以使用apache实现)
ssh[电子邮件保护](???)
和其他协议在不同端口上
谢谢你的帮助。
答案1
可以使用“反向代理”对 HTTP 和 HTTPS 执行此操作,该代理检查 HTTP 请求中的主机头信息,获取适当的内容并返回。Microsoft 的 ISA(Internet 安全和加速)可以执行此操作,Linux 上的 apache/squid 也可以执行此操作。
对于所有其他端口,您将会遇到更困难的情况,因为大多数流量不包含所需的主机名,而只包含目标 IP(例如:“我想通过 SSH 连接到 1.2.3.4”而不是“我想通过 SSH 连接到 host1.mydomain.com”)
将特定的外部端口映射到内部端口很容易(端口 22 -> 主机 1:22、端口 23 -> 主机 2:22、端口 24 -> 主机 3:22 等),有时这也是所需要的全部。
如果您确实需要将所有端口映射到不同的内部服务器,那么您将需要多个外部 IP 地址,大多数 ISP 都可以提供这些地址(至少如果您有业务连接)
答案2
Apache mod_proxy?
答案3
不可以,无法根据 DNS 名称进行端口转发。域名不是 IP 数据包的一部分,因此路由器无法使用它来区分传入连接。
当远程主机连接到 host1.mydomain.com 时,它会将此名称解析为 IP 地址,并将其放入 IP 数据包中。如果 host2.mydomain.com 解析为相同的 IP 地址,则构建的数据包将与 host1.mydomain.com 完全相同。
因此,当您的服务器上配置多个 IP 地址时,这是可能的。
Apache 可以区分传入的域名,但这是应用程序级别的事情。在 HTTP 1.1 中,浏览器将在 HTTP 标头中发送域名,Apache 可以使用虚拟主机对其进行过滤。