我的 ISP 为我提供了 1 个静态 IP 地址,但我需要在该 1 个公共 IP 地址下运行多个内部 IP 地址(来自 VPS)。我有足够的网络连接到我的路由器,但没有公共 IP。
因此,基本上可以将来自某些域的所有流量转发到特定的内部 IP 地址。
通过对 ServerFault 的搜索,我发现了以下可以解决我的问题的方法阿帕奇目的:
<VirtualHost *:80>
ServerName www.example.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://192.168.254.197/
ProxyPassReverse / http://192.168.254.197/
</VirtualHost>
<VirtualHost *:80>
ServerName www.other_example.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://192.168.254.198/
ProxyPassReverse / http://192.168.254.198/
</VirtualHost>
但是这个仅转发网络请求,而不是一切(例如 FTP、SSH、电子邮件等)。
一定有某种东西可以解决这个问题!
我正在使用 CentOS 5。
答案1
HTTP 协议内置了虚拟主机。这是您设置的服务器名称,客户端会在每个请求的Host
标头中发送该名称。其他协议(如 SSH 或 FTP)不具备此功能。您可以将端口 22(用于 SSH)转发到单个盒子/VM,并将其用作到达其他主机的跳转站。
另一方面,FTP 是一种不太友好的协议。有可用的代理,但它们大多有点奇怪。现有 iptables 内部支持转发 FTP 连接。但同样,这只能在一台主机上轻松实现。
对于电子邮件,您可以安装 SMTP 服务器(如 Postfix 或 Exim),并使用该 SMTP 服务器内的规则将邮件转发到内部主机。
答案2
在边缘设备上,您可以配置到不同主机的端口转发或 iptables 重定向规则,但您最终可能需要为 HTTP/HTTPS 之外的服务使用一些非标准端口。
例如,如果您使用的是标准消费级路由器,则可以设置端口转发,以便在 :23 上进入的连接转到 192.168.254.198:22,在 :24 上进入的连接转到 192.168.254.197:22 等等。根据您在边缘的设备,可以应用不同的配置/解决方案。