我们在同一接口上的同一子网内拥有不同的 IP 集,用于不同的目的:
192.168.1.201..230 用于服务器(所有 Linux)
192.168.1.1..199 用于在这些服务器上运行的服务
因此,每台服务器在同一个物理接口上都有多个 IP(可能两个甚至更多)。这样做的目的是能够轻松地将服务从一台服务器转移到另一台服务器。
有些服务(例如 ssh)不绑定到特定 IP,但所有“生产性”服务(代理、DNS、NTP 等)都绑定到一个特定 IP(和 DNS 名称),如果服务被移动,该 IP 也会被移动至另一台服务器。
现在,这种设置可能不被认为是“最佳实践”,但到目前为止,我们还没有遇到任何由此引起的麻烦。然而,我与之交谈的许多人都说“在这样的设置下,发生非常糟糕的事情只是时间问题”——但无法明确说明可能是什么。现在我们正在讨论从长远来看是否应该改变这种设置,这将需要大量的努力。基本上,我正在寻找支持和反对改变这一点的论据。
所以问题是:在这样的设置下可能会出现哪些“坏事”?是否总能通过做或不做某些事情来避免?是否存在一些可以“触发”的问题,以便展示问题并表明需要更改设置?
答案1
正如其他人所补充的那样,只要所有服务都绑定到 OP 地址,并且您不会从这些需要从特定地址看到的服务器发出请求,那么这将正常工作。
根据服务的性质,您可能还需要考虑网络设置的安全/防火墙影响,特别是所需防火墙的复杂性增加以及攻击/入侵横向传播的风险增加。
它不会解决您的问题(但可以减少您的问题) - 您提供了似乎是任意的 IP 范围 - 相反,为什么不将这些范围安排在不同的网络块中 - 如果空间不是问题,也许是 /23 边界上的连续 C 类,或者如果空间是一个问题,那么 1-190 和 193-254 ?
答案2
只要你能将所有东西(或者至少是所有重要的东西)绑定到一个特定的地址就可以了。
问题始于无法绑定到特定地址的应用程序:它们会从接口上的众多 IP 中选择一个作为源地址,而这种选择可能不是特别一致。这可能会破坏另一端的事物。
这也适用于内核因为某种原因发出的数据包;它们也会选择众多源地址中的一些。
如果您开始使用 iptables 或 tc 进行更复杂的网络工作,这也很重要。
如果这些都不适用于您的服务器,那就没问题了。如果其中任何一个开始实现,您可以随时添加网络命名空间(无论是针对您的所有服务,还是针对无法绑定并应保证使用服务器的单个“主”地址的东西)。
答案3
在服务器上拥有多个 IP 地址并没有什么不妥,我偶尔也会这样做。对于更高级的设置,我会将其与 BGP 结合使用,这样就可以运行具有冗余性的多个服务实例。
在这样的设置中,只有三件事困扰着我,其中一件事与这个问题不太相关,因为它与 BGP 更相关。
- 始终绑定地址,尤其是对于 UDP(如 DNS)。监听
0.0.0.0
或*
可能会引起意外。如果您想监听多个地址,通常最好使用多个Listen
指令(许多软件都支持这一点) - 使用 BGP 时,请注意不要意外创建任播服务(如果这不是您的意图)。只要确保每个 IP 地址仅由一个服务器声明,就不会发生这种情况。
- 在服务器之间切换地址时,如果地址的前所有者仍在回答该问题,则重复地址检测可能会阻止服务器配置地址。我问了一个关于此问题的问题在 Unix 堆栈交换上。