Existe uma interface administrativa ou de diagnóstico subjacente ao driver de ligação do Linux para determinar o que está acontecendo internamente?
Eu usei agregação de links entre caixas Linux e switches Cisco por muitos anos. Periodicamente eu me deparo com um beco sem saída quando configuro novas caixas onde o lado do Linux simplesmente não responde aos pacotes Cisco LACP. Eu meticulosamente sigo um conjunto rigoroso de instruções para cada servidor, mas os resultados parecem variar.
Se a ligação contém um escravo ou oito, o tcpdump mostra pacotes LACP vindos do switch em todas as interfaces ligadas e nenhum pacote é transmitido de volta. De fato, nenhum pacote é transmitido no período. rx_packets
para a interface mostra tráfego considerável, mas tx_packets
é zero. Não há nada de interessante nos logs em relação a MII ou ligação. Não há erros.
Atualmente, estou lidando com uma caixa que tem apenas dois nics. Por enquanto, só tenho eth1 no vínculo. Obviamente, esta é uma configuração degenerada. A situação não muda com eth0 e eth1 no vínculo; Isso só torna mais difícil trabalhar com a máquina quando a pilha da rede está completamente inativa. Eu posso reconfigurá-lo para ambos os nics, se necessário, e passar por uma interface administrativa (DRAC), mas não consigo copiar e colar da caixa dessa maneira.
Algumas preliminares:
- Eu testei os nics, portas e cabos. Tudo funciona como esperado quando as interfaces não estão ligadas.
- Reiniciei e confirmei que os módulos estão sendo carregados corretamente.
- Eu tentei isso com e sem o entroncamento vlan; não importa, pois a agregação de link ocorre abaixo desse ponto na pilha.
- O switch tem grupos de canais troncalizados funcionando para outras caixas Linux. As configurações são mais ou menos idênticas, embora as distros, os núcleos e o hardware das caixas do Linux não sejam.
Este é debian 8.6 baixado hoje.
Linux box 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2
(2016-10-19) x86_64 GNU/Linux
Uma configuração abreviada:
iface eth1 inet manual
auto bond0
iface bond0 inet manual
slaves eth1
address 10.10.10.10
netmask 255.255.255.0
bond_mode 4
bond_miimon 100
bond_downdelay 200
bond_updelay 200
bond_xmit_hash_policy layer2+3
bond_lacp_rate slow
Algum estado:
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)
MII Status: down
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200
802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
bond bond0 has no active aggregator
Slave Interface: eth1
MII Status: down
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 78:2b:cb:5a:2b:3e
Aggregator ID: N/A
Slave queue ID: 0
Um registro tcpdump de entrada na eth1 do switch:
22:18:47.333928 M 44:ad:d9:6c:8d:8f ethertype Slow Protocols (0x8809),
length 126: LACPv1, length 110
Actor Information TLV (0x01), length 20
System 44:ad:d9:6c:8d:80, System Priority 32768, Key 12,
Port 272, Port Priority 32768
State Flags [Activity, Aggregation, Synchronization,
Collecting, Distributing, Default]
Partner Information TLV (0x02), length 20
System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0,
Port Priority 0
State Flags [none]
Collector Information TLV (0x03), length 16
Max Delay 32768
Terminator TLV (0x00), length 0
O lado cisco:
interface GigabitEthernet1/0/15
switchport trunk allowed vlan 100,101,102
switchport mode trunk
channel-group 12 mode active
end
interface Port-channel12
switchport trunk allowed vlan 100,101,102
switchport mode trunk
end
Eventualmente, o switch desiste e a interface entra no modo "autônomo". Se houver duas interfaces no grupo de canais, elas ambas entrarão no modo independente.
#show etherchannel 12 sum
Flags: I - stand-alone
Group Port-channel Protocol Ports
------+-------------+-----------+-----------
12 Po12(SD) LACP Gi1/0/15(I)
Eu acumulei meu cérebro nisso o dia todo. Eu rasguei e reconstruí a configuração da Cisco várias vezes. Se não fosse pelo tcpdump mostrando os pacotes LACPv1 que chegam na interface do Linux, eu estaria olhando para o lado da Cisco. Infelizmente, o kernel do Linux parece estar ignorando completamente os pacotes. Minha próxima parada é o código-fonte do kernel e, no pior dos casos, o kernel personalizado para diagnósticos. Espero que alguém tenha alguma visão sobre o driver de ligação e o que o faz funcionar corretamente.