我正在尝试在 2 个 IP 地址上启动 HTTP 服务器。
我目前的情况是服务器连接到 2 个路由器。
--> Router 1 w/ Static IP (192.168.1.1)
HTTP Server --> Switch
--> Router 2 w/ Static IP (192.168.1.2)
但是 HTTP 服务器的 NIC 只能设置为 1 个网关(路由器 1)
两个路由器都具有 HTTP 服务器的 DMZ 设置,因此不存在防火墙问题。
通过路由器 1 的流量到达服务器,但来自路由器 2 的流量超时......(有点预料到)
这就是我现在的情况。你们建议我该怎么做?
我正在考虑向 HTTP 服务器添加另一个 NIC,以便我可以将其设置为网关 2。我认为这样可以工作,但我想知道这样做是否可行。或者也许有更好的方法?
向所有人致敬
答案1
您说得对,如果两个网卡位于同一子网中,则不能使用不同的网关。您可以做的是将第二个路由器设置为 192.168.2.1(我假设子网掩码为 C 类 255.255.255.0)。然后为第二个网卡指定一个来自 2.x 子网的 IP,现在服务器将响应来自任一路由器的流量。
还有其他事情需要考虑,例如 DNS。您需要一个智能 DNS 解决方案,可以识别 ISP 1(路由器 1)已关闭,并只向最终用户提供 ISP 2(路由器 2)的 IP,直到 ISP 1 恢复在线。
实现 DNS 部分的最简单方法是使用特殊的 ISP 负载平衡器,例如 barracuda 或 www.elfiq.com 以及许多其他 ISP 负载平衡器。
答案2
您确实需要在两个网关路由器之间使用一些基于网络的故障转移解决方案(第一跳冗余协议),如 HSRP/VRRP/GLBP。如果您的网关是 Cisco 路由器,您可以使用“track”命令确保网关后的路径有效,然后路由器才会成为活动转发器。
否则,您可以在 Web 服务器上使用静态路由,只需将 0.0.0.0 0.0.0.0 路由到每个网关,您应该具有某种基本的出站负载平衡,但您将缺少任何类型的路径故障检测。
答案3
如果您可以灵活地更改路由器,最简单的方法是将它们放在不同的子网上。然后,您可以对 NIC 进行多网络配置,一切都会正常工作。
如果两个路由器连接到不同的外部网络,您可以通过路由器 2 添加静态路由 - 没有理由不在同一个 LAN 上设置两个网关,它们只是必须通向不同的地方。您只能有一个默认网关,但可以有任意数量的显式网关。
如果您不能做到这一点并且您的服务器是 Linux,您可以通过在两个方向上重写路由器 2 地址来伪造它,以便 IP 堆栈认为它是两个独立的网络。
我怀疑第二个 NIC 无法工作,因为路由表仍然默认将所有响应发送到路由器 1。
答案4
最简单的解决方案是也为服务器分配两个私有 IP 地址。让每个路由器转发到不同的私有 IP 地址。然后,您可以在回复数据包上使用基于策略的路由,根据本地源 IP 地址确定下一跳。
例如,您可以为服务器分配 192.168.1.101 和 192.168.1.102(在同一个物理接口上)。让 192.168.1.1 路由器转发到 192.168.1.101,让 192.168.1.2 路由器转发到 192.168.1.102。然后,您可以根据本地源 IP 确定如何路由回复数据包 - 如果是 192.168.1.101,则下一跳是 192.168.1.1 - 如果是 192.168.1.102,则下一跳是 192.168.1.2。