Se eu usar uma configuração manual na linha de comando (seguindo as instruções do kernel ), Eu posso configurar corretamente minha conexão de rede:
# modprobe bonding mode=4 miimon=100
# ifconfig bond0 up
# ip link set eno1 master bond0
# ip link set eno2 master bond0
Para o registro, o switch usado é um Cisco Nexus 2248, e eu não especifico um endereço IP porque há uma camada 802.1q adicional (cuja presença ou ausência no arquivo de configuração não tem impacto sobre o problema).
O problema é que não consigo criar um arquivo /etc/network/interfaces
correto para que isso seja feito automaticamente no momento da inicialização. Há um lote de confusão online entre as diferentes versões do pacote ifenslave, notavelmente sua documentação, e sobre como evitar condições de corrida ao usar o ifup. O que quer que tenha funcionado com as versões anteriores do Ubuntu, não funciona mais. E eu não ficaria surpreso se o systemd estivesse tornando as coisas ainda mais confusas. Basicamente, o que quer que eu tente, meus scripts ficam presos no momento da inicialização e eu tenho que esperar um ou cinco minutos antes do processo de inicialização ser concluído.
Isso é o melhor que consegui:
auto lo
iface lo inet loopback
allow-bond0 eno1
iface eno1 inet manual
bond-master bond0
allow-bond0 eno2
iface eno2 inet manual
bond-master bond0
auto bond0
iface bond0 inet manual
bond-mode 4
bond-slaves eno1 eno2
bond-miimon 100
No momento da inicialização, o bond0 fica parado por um minuto (porque bond0 está esperando que pelo menos um de seus escravos seja criado, isso nunca acontece, então ele expira), mas quando o sistema é inicializado, usando ifup eno1
funciona e bond0 começa a funcionar corretamente.
Se eu especificar auto eno1
, o processo de inicialização será interrompido por cinco minutos, o bond0 nunca será exibido corretamente e tentar usar ifdown eno1
ficará bloqueado porque está aguardando algum bloqueio em /run/network/wherever
(não é possível lembre-se do arquivo exato, e tenha reiniciado esta máquina com bastante frequência já), o que parece indicar que sim, eu corri para uma condição de corrida e ifup ficou preso para sempre com eno1.
Alguém tem uma solução funcional no Ubuntu mais recente?