我的本地网络上有两台服务器,我想让它们可以访问互联网。
我希望所有流量都server1.example.com
被路由到 10.0.0.1,所有流量都server2.example.com
被路由到 10.0.0.2
如果需要,我可以设置第三台服务器来运行代理或任何需要的东西。我更喜欢 Mac/Linux 解决方案。
我见过的大多数其他解决方案仅代理特定服务。我想代理所有流量。
我如何根据主机名进行路由?
答案1
正如@Andriy 所说,仅仅使用 IP 是不可能的。
当您的计算机连接到 时server1.example.com
,它实际上正在将其解析为 IP 地址,例如:123.123.123.123
。
一旦它获得了 IP 地址,它就会尝试连接到主机上的相关端口123.123.123.123
。此时,还没有“主机名' 或 DNS。
如果您想实现这一点,那么您有两个选择:
- 通过使用不同的公网IP地址来区分服务。
- 通过使用不同的端口来区分服务。
您已经声明过“不希望它是特定于协议的“,但(例如)如果您使用 HTTP(S),那么这将是可能的。
这是唯一可能的,因为 HTTP 在其标头中包含了附加信息,在连接到主机后,123.123.123.123
它会说“请假装我在跟server1.example.com
“。
连接123.123.123.123
并说“请假装我在跟someotherhost.example.com
“—即使此主机未公开宣传。此请求是否执行取决于您的配置。
答案2
不幸的是,IP 路由中没有主机名,只有 IP 地址。IP 标头仅包含源 IP 和目标 IP,而不包含主机名。
因此,您不能根据名称代理所有流量,因为 IP 数据包内部没有域名。
但是,某些协议(如 HTTP 1.1)确实带有域名。因此,您可以设置反向 HTTP 代理,查看 HTTP 请求,并根据这些请求中的域名/URL 将其转发到您的内部服务器。
HTTP 反向代理有很多种。基本上,大多数 HTTP 服务器(如 Apache)都可以配置为反向代理。以下是此类配置的示例: