假设网卡lnc0当前的IP地址是192.168.0.2,现在你需要为其再绑定一个额外的IP地址——也就是常说的“IP别名”。该如何操作呢?
# ifconfig lnc0 192.168.0.3 netmask 255.255.255.255 alias
这里有一个关键要点:如果别名IP与网卡原始IP位于同一个子网内,就必须将网络掩码设置为全1——即255.255.255.255。如果它们分属不同的子网,则直接使用该子网的标准掩码即可。
从TCP/IP协议栈的角度来看,这种设置究竟意味着什么?
当网络掩码的所有位都设为1时,TCP/IP协议栈会对数据包这样理解:只要数据包的目标地址与掩码完全匹配所有位,就认定它属于本地子网——实际上,这相当于创建了一个仅包含该地址的“微型子网”。这样一来,所有发往该IP地址的数据包,以及由该地址发出的数据包,都会被交给路由器处理,而不会在局域网内部直接交换。
如果多个别名使用了相同的网络掩码,它们的广播地址就会完全一致,这会导致TCP/IP协议栈出现混乱。因此,采用全1掩码是一种有意的“欺骗”手段,让ifconfig允许同一张网卡挂载多个IP地址,而不会引发冲突。
那么,在/etc/rc.conf文件中如何配置这些别名呢?需要使用ifconfig_xxx#_alias#这种形式的变量名,其写法与配置主网卡十分相似:
ifconfig_lnc0="inet 192.168.0.2 netmask 255.255.255.0"
ifconfig_lnc0_alias0="inet 192.168.0.3 netmask 255.255.255.255"
ifconfig_lnc0_alias1="inet 192.168.1.2 netmask 255.255.255.0"
ifconfig_lnc0_alias2="inet 192.168.1.3 netmask 255.255.255.255"
请注意观察这段配置:主网卡使用常规的子网掩码,而第一个别名(与主IP同子网)采用全1掩码,第三个别名(跨子网)则使用标准的子网掩码。这就是别名设置的典型模式——全1掩码仅用于同子网别名,跨子网别名保持常规掩码。理解了这一差异,你就掌握了在多IP场景下让网络协议栈保持清晰的核心技巧。
