Назад | Перейти на главную страницу

Изменения CARP в FreeBSD 10

У меня проблемы с настройкой интерфейсов carp в FreeBSD 10-RELEASE.

Следующая конфигурация работает.

#/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 все остальное потерпит неудачу.

Кто-нибудь знает, предполагаемая ли это реализация?

Во-первых, если вы назначаете несколько адресов в одной подсети одному и тому же интерфейсу, вторичные адреса должны иметь маску подсети / 32 и иметь префикс со словом alias:

ifconfig_em1 = "inet 38.111.159.78 netmask 192.168.1.10" ifconfig_em2 = "inet 38.111.159.78 netmask 192.168.2.10"

если

если

Примечание: в общей конфигурации, где вы просто хотите привязать IP-адреса и пропустить материал _alias0 _alias1, вы можете использовать:

ipv4_addrs_em1 = "192.168.2.20-22 / 24"

Но это не работает, когда вам нужно указать vhid для каждого IP-адреса.

Хорошо согласно rc.conf man-страница это предполагаемое поведение.

В разделе 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>   

Вам не нужно использовать aliasN для определения дополнительных IP-адресов, хотя я не уверен, насколько хорошо он будет работать для интерфейсов carp, есть другой синтаксис, как указано на странице руководства rc.conf: ... Из-за этого трудно управлять поведение, есть ifconfig_переменная aliases, которая имеет ту же функциональность, что и 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