摘自 FreeBSD 手册中关于虚拟主机:
对于给定接口,必须有一个地址正确表示网络的子网掩码。属于此网络的任何其他地址必须具有全 1 的子网掩码(表示为 255.255.255.255 或 0xffffffff)。
有人能解释为什么会这样吗?
答案1
这页包含一个很好的解释我认为:
由于别名在某种意义上是重复的标记,因此系统需要知道标记所代表的子网是否是新的,而这由网络掩码指示。使用“正常”网络掩码,系统会被告知这是一个新子网,然后它可以正确设置内部表。如果子网不是新的,并且网络掩码是“正常”,则表将设置不正确。
由于网络掩码为 255.255.255.255,系统知道这是现有子网的重复,因此将分配该地址,就像它被分配给环回接口一样,具有“点对点”掩码。
在大多数情况下,分配网络掩码 255.255.255.0 似乎可以正常工作。但是,内部表将无法正确设置,如果删除别名,则可能会出现问题。这可以通过在添加别名时添加适当的主机路由并在删除别名时删除路由来解决。但是,系统使用“点对点”网络掩码可以正常工作,并且维护更容易。
答案2
事实上您可以设置您认为有用的网络掩码。
但是,如果如果您将网络掩码从 /32 更改为其他值,则还需要设置路由。如果您遵循建议,则可以省略设置路由。
答案3
FreeBSD 上有关 ifconfig 的手册页没有什么帮助:
如果该地址与此接口的第一个网络地址位于同一子网,则必须指定不冲突的网络掩码。通常 0xffffffff 最合适。
但上面的意思是 /32 掩码使其成为特定网络(最简单的网络,即单个主机,由 /32 掩码描述)。使用与物理接口相同的网络掩码不会造成任何损害,因为它们是同一网络上的两个接口。
现在想象一下别名的掩码描述的是物理接口的超集网络,例如物理为 192.168.0.1/25,别名为 192.168.0.2/24。网络上是否有 192.168.0.200?这对您的别名接口意味着什么?