13.6.虚拟主机

FreeBSD 的一个常见用途是虚拟网站托管,即使得一个服务器在网络上看起来像许多服务器。这可以通过给一个接口分配多个网络地址来实现。

被给定的网络接口有一个“真实”地址,并且可以有任意数量的“别名”(alias)地址。这些别名通常是通过在 /etc/rc.conf 中放置别名条目来添加的,如本例所示:

ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

别名条目必须从 alias0 开始,使用一个连续的数字,如 alias0alias1 等等。配置过程将在第一个缺失的数字处停止。

别名网络掩码的计算很重要。对于一个给定的接口,必须有一个正确代表网络掩码的地址。任何属于这个网络的其他地址必须有一个全部为 1 的网络掩码,表示为 255.255.255.2550xffffffff

例如,考虑 fxp0 接口连接到两个网络的情况: 10.1.1.0,网络掩码为 255.255.255.0202.0.75.16,网络掩码为 255.255.255.240。系统将被配置为在 10.1.1.110.1.1.5202.0.75.17202.0.75.20 地址范围内。在一个给定的网络范围内只有第一个地址应该有一个真正的网络掩码。其余的(10.1.1.210.1.1.5202.0.75.18202.0.75.20)必须配置掩码为 255.255.255.255

下面的 /etc/rc.conf 条目为这种情况正确配置了适配器:

ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"

一个更简单的表达方式是用一个空格分隔的 IP 地址范围列表。第一个地址将被赋予指定的子网掩码,其他地址的子网掩码为 255.255.255.255

ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"