As máquinas conseguem pingar umas nas outras pela interface externa? Você por acaso tem outro vhid 1 em sua rede externa?
Eu tenho duas máquinas, cada uma configurada de forma idêntica como um firewall / balanceador de carga para um site ocupado. Eu os configurei com CARP e pfsync nas interfaces internas e externas. A interface interna está se comportando como esperado (primário listado como MASTER e secundário listado como BACKUP)
Em ambas as máquinas, as interfaces de rede são as seguintes:
Eu reescrevi os endereços IP e os endereços MAC abaixo. As redes são as seguintes:
Aqui está a saída do ifconfig no primário:
em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether [SNIP]
inet 10.0.1.10 netmask 0xffffff00 broadcast 10.0.1.255
media: Ethernet 100baseTX <full-duplex>
status: active
bge0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether [SNIP]
inet 10.0.2.10 netmask 0xffffff00 broadcast 10.0.2.255
media: Ethernet 1000baseT <full-duplex>
status: active
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether [SNIP]
inet 10.0.3.10 netmask 0xffffff00 broadcast 10.0.3.255
media: Ethernet 1000baseT <full-duplex>
status: active
lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33152
pfsync0: flags=0<> metric 0 mtu 1460
pfsync: syncdev: bge1 syncpeer: 10.0.3.11 maxupd: 128
carp0: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
inet 10.0.1.5 netmask 0xffffff00
carp: MASTER vhid 1 advbase 1 advskew 0
carp1: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
inet 10.0.2.5 netmask 0xffffff00
carp: MASTER vhid 2 advbase 1 advskew 0
E aqui está o trecho do /etc/rc.conf do primário:
defaultrouter="10.0.1.1"
network_interfaces="em0 bge0 bge1 lo0 pfsync0"
cloned_interfaces="carp0 carp1"
ifconfig_em0="inet 10.0.1.10 netmask 255.255.255.0 media 100BaseTX mediaopt full-duplex"
ifconfig_bge0="inet 10.0.2.10 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_bge1="inet 10.0.3.10 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_carp0="vhid 1 pass [SNIP] 10.0.1.5/24"
ifconfig_carp1="vhid 2 pass [SNIP] 10.0.2.5/24"
pfsync_enable="YES"
pfsync_syncdev="bge1"
pfsync_syncpeer="10.0.3.11"
E aqui está a saída no secundário:
em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether [SNIP]
inet 10.0.1.11 netmask 0xffffff00 broadcast 10.0.1.255
media: Ethernet 100baseTX <full-duplex>
status: active
bge0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether [SNIP]
inet 10.0.2.11 netmask 0xffffff00 broadcast 10.0.2.255
media: Ethernet 1000baseT <full-duplex>
status: active
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether [SNIP]
inet 10.0.3.11 netmask 0xffffff00 broadcast 10.0.3.255
media: Ethernet 1000baseT <full-duplex>
status: active
lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33152
pfsync0: flags=0<> metric 0 mtu 1460
pfsync: syncdev: bge1 syncpeer: 10.0.3.10 maxupd: 128
carp0: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
inet 10.0.1.5 netmask 0xffffff00
carp: MASTER vhid 1 advbase 1 advskew 20
carp1: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
inet 10.0.2.5 netmask 0xffffff00
carp: BACKUP vhid 2 advbase 1 advskew 20
E aqui está o trecho do /etc/rc.conf do secundário:
defaultrouter="10.0.1.1"
network_interfaces="em0 bge0 bge1 lo0 pfsync0"
cloned_interfaces="carp0 carp1"
ifconfig_em0="inet 10.0.1.11 netmask 255.255.255.0 media 100BaseTX mediaopt full-duplex"
ifconfig_bge0="inet 10.0.2.11 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_bge1="inet 10.0.3.11 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_carp0="vhid 1 pass [SNIP] advskew 20 10.0.1.5/24"
ifconfig_carp1="vhid 2 pass [SNIP] advskew 20 10.0.2.5/24"
pfsync_enable="YES"
pfsync_syncdev="bge1"
pfsync_syncpeer="10.0.3.10"
O que eu não entendo é que o status de carpa em carp0 é MASTER em ambas as máquinas quando o status em carp1 é como deveria ser (MASTER no primário e BACKUP no secundário). o que estou perdendo? Onde devo procurar por pistas?
Parece que o advskew no principal está dizendo que (0 | primário) deve ser MASTER versus (20 | secundário) deve ser BACKUP. Implicando (?) A falta de comunicação entre as duas interfaces carp0.
Você já deve ter verificado estes, mas alguns procedimentos gerais de diagnóstico no OpenBSD.
Como parece que você está usando o FreeBSD (ou seja, não usando o OpenBSD ), espero que minha resposta esteja clara o suficiente para você ajustar e tornar útil.
-
Você tem configurações de net.inet.carp semelhantes às abaixo?
Arquivo: /etc/sysctl.conf
net.inet.carp.allow=1 net.inet.carp.preempt=1 net.inet.carp.log=1
Uma interface CARP funciona, enquanto a outra não parece indicar que as configurações corretas do sistema foram feitas. Não faz mal confirmar, às vezes fazemos as alterações com uma configuração de linha de comando e esquecemos de definir nas configurações do sistema.
Os pacotes de carpa precisam ser recebidos para que o firewall decida se precisa se tornar MASTER / BACKUP
Revisite sua configuração de firewall para garantir que proto carp
seja passado e expirado nas duas interfaces físicas da carpa.
Por exemplo:
pass quick on { em0 bge0 } proto carp keep state (no-sync)
Você pode confirmar adicionando o block log no início do seu conjunto de regras do firewall, e então usando o tcpdump na interface pflog0 para confirmar se os pacotes de carpas estão sendo permitidos ou não.
Uma verificação adicional, que os pacotes pfsync são permitidos através dos firewalls, para garantir que os estados do firewall sejam compartilhados entre os dois hosts.
pass quick on bge1 proto pfsync keep state (no-sync)