×
Em

Contexto de Atuação: Fui acionado neste projeto para atuar de forma independente no papel de auditoria técnica e malha de segurança. Minha missão primária era acompanhar a janela de mudança executada por uma equipe terceira de integração, garantindo que a ativação do novo Pod não causasse qualquer impacto no Pod 1, que já operava em produção crítica. No entanto, quando a implementação falhou e o troubleshooting pela interface gráfica se esgotou, precisei intervir com uma análise de baixo nível no sistema operacional do controlador para diagnosticar a causa raiz e destravar o projeto.

Cenário: Ativação de um novo Pod (Pod 2) em uma arquitetura Cisco ACI Multi-Pod utilizando topologia Back-to-Back (Spine-to-Spine, sem switches IPN intermediários).

Problema Reportado: Durante o processo de bring-up, os Spines do Pod 2 ([SERIAL-SPINE-01] e [SERIAL-SPINE-02]), devidamente registrados no Fabric Membership com os Node IDs XX1 e XX2, permaneciam travados no status discovering com IP 0.0.0.0. O tráfego de Control Plane não evoluía para a formação da adjacência OSPF/BGP.

Fase 1: Validação do Trânsito (DHCP Relay) no Underlay

A primeira hipótese em falhas de Multi-Pod geralmente recai sobre o Data Plane da rede inter-pod (ISN). Para isolar problemas físicos e de roteamento da VRF overlay-1, a investigação foi direcionada imediatamente para os logs do daemon de DHCP no APIC do Pod 1.

Comando executado no APIC:

Bash

cat /var/log/dme/log/dhcpd.bin.log | grep DHCPDISCOVER

Evidência (Log):

Plaintext

5385||2026-06-11T11:55:25.426087299||dhcp||INFO||||ISC dhcpd: DHCPDISCOVER from [MAC-OMITIDO] via 10.X.X.9||../svc/dhcpd/src/gen/ifc/beh/imp/./DhcpdSvc.cc||70

Análise: O pacote DHCP Discover originado no Pod 2 estava cruzando com sucesso os links Back-to-Back. O DHCP Relay configurado na sub-interface do Spine 1 estava operacional, encapsulando e entregando a requisição ao APIC. Isso descartou qualquer falha física ou de L3Out de trânsito no Pod 1.

Fase 2: O Bloqueio na Alocação de IP (Falha na Política de Extensão)

Se o pacote chegava, o APIC estava ativamente descartando a requisição. A análise do log revelou o motivo exato da recusa.

Evidência (Log):

Plaintext

5392||...||dhcp||DBG4||...||Ignoring dhcpClient as Node Id is not assigned..[SERIAL-SPINE-01]
5385||...||dhcp||ERR||...||network ifabric: no free leases

Análise: O erro no free leases indicava que o daemon de DHCP (ifabric) não possuía um Pool de IPs válido vinculado ao Pod 2 para distribuir via Relay.

Para validar como o TEP Pool do Pod 2 havia sido instanciado, a base de dados de objetos (MIT) foi consultada via CLI.

Comandos executados:

Bash

apic1# moquery -c fabricSetupP | egrep "podId|tepPool"
# Retornou o TEP Pool 10.X.0.0/16 associado ao Pod 2 como um Pod local padrão.

apic1# moquery -c fabricExtSetupP
No Mos found

Causa Raiz 1: A configuração inicial do Multi-Pod havia sido interrompida (o summary do wizard de configuração ficou em branco e não compilou). Como resultado, o bloco IP foi injetado na base genérica (fabricSetupP), mas a política de extensão L3 (fabricExtSetupP) nunca foi criada. Sem essa classe, o APIC não autoriza o repasse de IPs para sub-redes remotas via Relay.

Resolução: O Pod Fabric Setup Policy foi recriado corretamente via GUI, vinculando o TEP Pool de extensão ao Pod 2. O Node XX1 assumiu o IP e subiu para o status Active.

Fase 3: O Paradoxo do Node Zumbi (Loop de DHCP no Spine 2)

Após a correção da base, os Leafs e o Spine 1 subiram, mas o Spine 2 (Node XX2) entrou em um loop infinito de DHCP, recebendo a oferta (DHCPOFFER), mas falhando na consolidação do lease.

Evidência (Log):

Plaintext

5392||2026-06-11T11:55:36.430636755||ifc_dhcpd||DBG4||...||Ignoring the dhcpLease.dhcpClient id=[SERIAL-SPINE-02]-eth1/30 doen't exist.

Uma consulta profunda ao objeto do Node XX2 revelou uma inconsistência estrutural na base de dados:

Bash

apic1# cat /var/log/dme/log/dhcpd.bin.log | grep node-XX2
<fvNodeDef ... id="XX2" ... podId="0" rn="node-XX2" ...>
<fabricCreatedBy ... creatorDn="uni/tn-infra/out-b2b_l3out/lnodep-b2b_LNodeP/rsnodeL3OutAtt-[topology/pod-2/node-XX2]" .../>

Causa Raiz 2: O objeto apresentava podId="0" (status de placeholder corrompido). Isso ocorreu porque o Node XX2 foi associado manualmente ao Logical Node Profile do L3Out no Tenant infra antes de o equipamento ter concluído o Discovery inicial limpo. Essa dependência circular impediu o banco de dados de instanciar a interface eth1/30 como um cliente DHCP válido, gerando o descarte recursivo do lease.

Resolução: 1. Remoção do Node XX2 do perfil L3Out no Tenant infra. 2. Decommission do nó corrompido no Fabric Membership. 3. O equipamento enviou um novo Discover, recebeu o IP normalmente e atingiu o estado Active. 4. Reassociação do nó à política de roteamento.

Fase 4: Anomalia Isolada em um dos Leafs

Com a infraestrutura de Spines e a maioria dos Leafs online, restou um único Leaf ([SERIAL-LEAF-XX]), que não prosseguia com o registro.

Evidência (Log XML processado pelo APIC):

XML

<dhcpClient ... configIssues="model-empty" ... id="[SERIAL-LEAF-XX]" ip="0.0.0.0" ... nodeRole="unsupported" ... status="deleted" supported="no"/>

Causa Raiz 3: A recusa por model-empty e supported="no" indica uma incompatibilidade severa de firmware. O hardware estava realizando boot no modo NX-OS Standalone (imagem de fábrica) ou possuía uma versão não reconhecida pelo catálogo atual do APIC, impedindo o processamento do header ACI.

Resolução: Acionamento da equipe de Smart Hands local para acesso via cabo console, formatação do bootflash e carregamento da imagem ACI correta via prompt de loader>.

Conclusão e Lições Aprendidas

Este caso reforça o quão determinística é a arquitetura SDN da Cisco. Falhas em processos automatizados de interface gráfica (como a interrupção de um wizard) podem deixar resíduos inconsistentes na Management Information Tree (MIT) que os painéis web nem sempre refletem com clareza.

A resolução eficiente exigiu descer à camada do sistema operacional (Linux/NX-OS), validar contadores do DHCP Relay e auditar a coerência das classes na base de dados (moquery). Respeitar a ordem de provisionamento — garantir que o Control Plane básico e o Discovery ocorram antes de forçar o amarre lógico em políticas de L3Out — é mandatório para evitar loops de dependência na arquitetura.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Autor

edgarrodrigues100@yahoo.com.br

Posts relacionados

Em

War Stories #07: O Mistério do Contrato Liberado: Quando a TCAM diz “Sim” e o Packet-Log diz “Não” (O Efeito QUIC no Cisco ACI)

Imagine a cena: uma tarde tranquila na operação de infraestrutura de rede. Você acabou de implementar ou validar uma regra de acesso...

Leia tudo

War Stories #06: O Bloqueio Fantasma de SSH Pós-Upgrade no Cisco ACI 6.x

A janela de manutenção (Gemud) está na reta final. O cluster APIC atualizou e está cravado como Fully Fit. Os switches Spines...

Leia tudo

War Stories #05: O Assassino Silencioso do Upgrade para o Cisco ACI 6.x

Quem opera Data Centers sabe que uma Gemud de atualização do Cisco ACI nunca é apenas um “Next, Next, Finish”. O Fabric...

Leia tudo

War Stories #04: O Mistério do vMotion Lento e o Spanning Tree no Cisco Nexus

No universo de Data Center, existe uma regra não escrita: quando a rede e a virtualização se encontram, o diabo mora nos...

Leia tudo

War Story #03 | O Túnel SD-WAN Fantasma e a Ilusão da Interface Gráfica

Toca o alerta para entrar numa sala de guerra. O cenário relatado: o Hub SD-WAN (Viptela) precisava alcançar o Firewall de Internet....

Leia tudo

War Stories #02 | O Caso das iLOs “Mudas”: Por que o Hardware Proxy derrubou o acesso?

Na engenharia de redes, o problema mais difícil de resolver não é aquele que “está tudo parado”, mas aquele que “funciona às...

Leia tudo