Estou tentando gerenciar uma configuração de "failover" para a rede privada NAT-ed com duas conexões WAN (LTE / 3g) não muito estáveis.
A topologia é bem típica: os hosts de dentro da rede interna se conectam à interface interna [int_if] da caixa do OpenBSD, então o tráfego é editado com PF para uma das duas interfaces externas [ext_if1 e ext_if2] .
LAN---->[int_if]--NAT--[ext_if1 or ext_if2]---->WAN1 or WAN2 (depending on kernel decision).
Eu uso IPs estáticos em ambas as interfaces de saída, cada uma em uma sub-rede diferente e com rotas padrão de vários caminhos para as caixas do roteador LTE / 3g do ISP, conforme descrito em OpenBSD Faq para balanceamento de carga de custo igual.
Infelizmente, sofro com esse comportamento irritante:
As rotas de múltiplos caminhos não funcionam se definidas a partir do arquivo hostname.interface . Nesse caso, ambas as rotas padrão estão presentes na tabela de roteamento, mas sem sinalizadores "P". Contanto que eu não libere as rotas e as configure de volta manualmente, todo o tráfego é encaminhado através de apenas um dos dois gateways, escolhidos como eu suponho, dependendo da ordem alfabética do nome da interface. Parece como se fosse apenas um gateway padrão "padrão", sem multipath contratado ( net.inet.ip.multipath
é naturalmente definido como 1
).
Embora as rotas padrão de multipath configuradas "à mão" pareçam funcionar bem - a sinalização "P" aparece na tabela de roteamento e neststat -r mostra o tráfego crescente nas duas rotas, bem como a sequência de comandos traceroute.
ping-eu one_of_ext_if's_ip some.internet.host funciona eu diria ... aleatoriamente, não dependendo do estado real da conexão ISP. Às vezes, usar o endereço IP em vez do nome ajuda em uma interface, enquanto o outro "prefere" o nome. Os pings são aleatoriamente cancelados, enquanto o tráfego http da LAN é balanceado com custo igual sem atrasos. Eu não bloqueio nenhum tráfego de saída com PF, então esse não é o ponto, desabilitando pf em nada muda nada (exceto cortar a LAN do mundo). Configurando tudo de volta para a configuração padrão do gateway padrão único corrige o problema - eu posso alternar entre as duas rotas padrão manualmente e os pings são bons se o ISP estiver ativo.
Passei duas noites no Google e testei para descobrir o que estou fazendo de errado e ainda não tenho idéia de por que essa configuração funciona tão estranha. E, claro, não faço ideia de como eu poderia monitorar conexões para failover com ifstated quando o pinging world não funciona mesmo se meus ISPs ainda estiverem ativos. E quando eles realmente morreram por um tempo, o loadbalancing enviou solicitações de LAN para anular a conexão inativa não detectada.
Gostaria de detectar esse evento e alterar a rota para o único gateway padrão na conexão em funcionamento até que o outro ISP comece a responder novamente. Sem pings de trabalho, estou preso a um cenário inútil, em segundo plano.
Agradeço qualquer ajuda ...
Tags networking routing failover