FreeBSD 10 中的 CARP 变化

FreeBSD 10 中的 CARP 变化

我在 FreeBSD 10-RELEASE 中配置 carp 接口时遇到了麻烦。

下面的配置有效。

#/boot/loader.conf
carp_load="YES"


#/etc/rc.conf
ifconfig_em1="inet 192.168.1.10 netmask 255.255.255.0"
ifconfig_em2="inet 192.168.2.10 netmask 255.255.255.0"

ifconfig_em1_alias0="vhid 11 advskew 210 pass PASSWORD 192.168.1.11/32"
ifconfig_em1_alias1="vhid 12 advskew 210 pass PASSWORD 192.168.1.12/32"
ifconfig_em1_alias2="vhid 13 advskew 210 pass PASSWORD 192.168.1.13/32"

ifconfig_em2_alias0="vhid 20 advskew 210 pass PASSWORD 192.168.2.20/32"
ifconfig_em2_alias1="vhid 21 advskew 210 pass PASSWORD 192.168.2.21/32"
ifconfig_em2_alias2="vhid 22 advskew 210 pass PASSWORD 192.168.2.22/32"

我对别名感到困扰。

似乎每个接口的每个别名都必须从 0 开始编号。此外,每个别名编号似乎必须是连续的,跳过数字将导致无法创建接口。

例如,如果我注释掉ifconfig_em1_alias0所有内容,其余部分都会失败。

有人知道这是否是预期的实现吗?

答案1

首先,如果要将同一子网中的多个地址分配给同一接口,则次要地址应具有子网掩码 /32,并以单词 alias 为前缀:

ifconfig_em1="inet 38.111.159.78 网络掩码 192.168.1.10" ifconfig_em2="inet 38.111.159.78 网络掩码 192.168.2.10"

ifconfig_em1_alias0="vhid 11 advskew 210 传递密码别名 192.168.1.11/32" ifconfig_em1_alias1="vhid 12 advskew 210 传递密码别名 192.168.1.12/32" ifconfig_em1_alias2="vhid 13 advskew 210 传递密码别名 192.168.1.13/32"

ifconfig_em2_alias0="vhid 20 advskew 210 传递密码别名 192.168.2.20/32" ifconfig_em2_alias1="vhid 21 advskew 210 传递密码别名 192.168.2.21/32" ifconfig_em2_alias2="vhid 22 advskew 210 传递密码别名 192.168.2.22/32"

注意:在一般配置中,您只想绑定 IP 地址并跳过 _alias0 _alias1 内容,您可以使用:

ipv4_addrs_em1="192.168.2.20-22/24"

但是当您需要为每个 IP 地址指示一个 vhid 时,这不起作用。

答案2

好的,根据rc.conf手册页这是预期的行为。

在 network_interfaces 部分下,它读取。

For each ifconfig_<interface>_alias<n> entry with an address 
family keyword, its contents are passed to ifconfig(8).  
Execution stops at the first unsuccessful access, 
so if something like this is present:

ifconfig_ed0_alias0="inet 127.0.0.251 netmask 0xffffffff"
ifconfig_ed0_alias1="inet 127.0.0.252 netmask 0xffffffff"
ifconfig_ed0_alias2="inet 127.0.0.253 netmask 0xffffffff"
ifconfig_ed0_alias4="inet 127.0.0.254 netmask 0xffffffff"

Then note that alias4 would not be added since the search
would stop with the missing ``alias3'' entry. Because of
this difficult to manage behavior, there is ifconfig_<interface>_aliases variable, 
which has the same functionality as ifconfig_<interface>_alias<n>   

答案3

您不必使用 aliasN 来定义附加 IP,尽管我不确定它对 carp 接口的效果如何,但还有另一种语法,如 rc.conf 手册页所列:...由于这种难以管理的行为,因此存在 ifconfig_别名变量,具有与 ifconfig 相同的功能_alias 并且可以将所有条目放在一个变量中,如下所示:

             ifconfig_ed0_aliases="\
                     inet 127.0.0.251 netmask 0xffffffff \
                     inet 127.0.0.252 netmask 0xffffffff \
                     inet 127.0.0.253 netmask 0xffffffff \
                     inet 127.0.0.254 netmask 0xffffffff"

此方法可以避免意外跳过接口,因为您不需要确保 aliasN 递增 1

相关内容