我在 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