我曾经为同一台服务器上的不同服务分配不同的 IPv6 地址,这样我就可以过滤从哪里可以访问什么,从而提高网络安全性。
我刚刚意识到我可能做错的唯一一件事就是我从相同的 /64 前缀中选择了这些地址。在网关上过滤来自外部世界的连接不是问题,但服务器进程之间的隔离可能很差。
如果我理解正确的话,/64 是建议分配的最小前缀。如果我想禁止(使用服务器上的数据包过滤器)服务相互通信,那么它们不应该位于同一子网中,因此我必须从不同的 /64 前缀分配地址。
我说得对吗?
或者使用多个 /120 前缀没有问题,例如避免不必要地浪费 IP 范围?
它应该有效吗按照标准,或者该行为是特定于实现的?
先感谢您!
答案1
里面我想,从技术上讲,您可以做任何您想做的事情。如果您真的想,您可以分配 /120。但您不应该这样做。
但你真的想在这里解决一个问题吗?将同一个 /64 中的多个 IPv6 地址分配给单个服务器应该没有任何问题。事实上,你可以分配一个全部的/64或者如果您愿意的话可以更大(并且有理由这样做)。
现在,说了这么多,你似乎最关心的是服务器内部通信。但问题是——即使你分配来自不同网络的 IP 地址,服务器内部通信仍然有效。因为服务器只有在没有到目标的路由时才会路由到默认网关(从而通过网络级防火墙)——但就你的情况而言,它有一个直接的路由到目标,因为 IP 地址都在同一台机器上。
其次,解决网络通信问题只是其中的一小部分。如果您关心深度安全性,那么如何阻止攻击者(或恶意应用程序)直接读取和写入其他应用程序的内存空间?或磁盘?
实施这种隔离的最常见方式是通过虚拟机。或者容器/监狱。
答案2
IPv6 是建立在 /64(或更大)子网假设的基础上的。如果您将子网设置得比这个小,您需要认真研究一下可能会破坏哪些功能。一些制造商已将 IPv6 实现编码为以 /64 为基本大小。
我还想补充一点,您不需要分配子网来进行 IP 过滤。您说得对,子网间通信会触发通过网关路由的流量,但如果您的所有服务都在同一台机器上,您可以研究在该机器上执行 iptables 规则或类似操作来过滤服务间通信。这可以基于 /128 或每个主机完成。
最后要考虑的是,这些服务是否需要隔离,它们可能应该放在单独的机器、虚拟机或(Docker)容器上。这可能是我的建议,但它与你的要求相差甚远。