Planejamos conectar servidores em dois racks uns com os outros. Vamos supor que temos 5 servidores em cada rack conectados a um switch rápido. Cada servidor tem um uplink de Internet de 1 GBit.
O seguinte pode ser muito estúpido, mas a rede não é minha área de especialização, é por isso que preciso da sua ajuda.
Estamos criando várias conexões OpenVPN (veja a imagem anexada, as 'nuvens azuis' são redes VPN), porque queremos usar a conexão completa de 1 GBit entre elas. Mas se um servidor ficar inativo, ainda queremos uma conexão funcional entre os dois racks.
Então, o que fizemos:
1. Configure o OpenVPN entre cada servidor S [1-5] e C [1-5], criando uma rede virtual de 10.0.5x.0 / 24. (Isso já está funcionando)
2. Instale e configure o Quagga com o OSPF para anunciar as rotas. Fizemos isso para cada nó, para que todos possam ser um roteador para outra pessoa (não queremos apenas um único gateway, porque isso limitaria a conexão entre os racks a apenas 1 GBit, certo ?!)
3. Quagga agora anuncia rotas e todos podem pingar todos os outros (também trabalhando)
Agora a peça começa: Nós pegamos C4 e as rotas são atualizadas de acordo (falando de OSPF e quagga). Mas o que acontece agora, se tentarmos fazer o ping do S4 para o C5, é preciso um caminho que o C5 acredite não é o melhor caminho (isso é o meu entendimento da configuração de rede linux do rp_filter para 1). A rota que vemos no tcpdump é S4 - > S3 - > C3 - > C5. Uma rota melhor seria S4 - > S5 - > C5.
Se definirmos rp_filter como 2, o ping funcionará, mas parece errado permitir rotas não ideais? Pensamos que o OSPF está lá para obter o melhor (caminho mais curto) possível? Mas nós achamos que nós configuramos o Quagga / OSPFd errado.
Aqui está a imagem da topologia que temos em mente:
topologia
O ospfd.conf se parece com isso
interface eth0
interface bond0
interface tun0
router ospf
router-id 10.0.1.4
network 10.0.1.0/24 area 0
network 10.0.54.0/24 area 1
redistribute static
zebra.conf:
interface bond0
link-detect
interface tun0
link-detect