Social :  

Bloqueando BPDU’s originados de VM’s

Bom galera no último post (Link) falamos em como o VMware vSwitch age dentro de uma rede com Spanning Tree habilitado.

Naquele ponto comentamos que o vSwitch descarta todos os BPDU’s vindos de um switch físico, ou seja, ele não participa de uma topologia Spanning Tree e consequentemente não participa também da eleição do Switch Root de uma topologia STP, mas naquele ponto já comentamos que apesar dele descartar BPDU’s vindos de Uplinks com Switches Físicos ele ainda transmitiria BPDU’s que fossem originados de uma VM. Vejamos a seguinte imagem:

Imagem 1

Podemos ver na imagem anterior que nesse ponto a eleição do root na topologia STP já foi feita, e nesse caso o SW1 foi eleito como Root,  desta forma todas as suas portas estão em estado de Forward e aparentemente tudo está ocorrendo como deveria, a rede está estável, nenhum recalculo do STP está sendo executado, também é valido comentar que uma das portas (entre SW4 e SW2) foi colocada em estado Block, pois o Sw4 avaliou que entre os dois caminhos até o switch root da rede (SW1), esse seria o pior caminho e portanto para evitar um loop ele bloqueou  essa porta.

Agora, imaginemos que um dos administradores da rede resolveu realizar uma POC (Proof of Concept – Prova de conceito) de um switch em forma de appliance virtual, ou até mesmo que um “desavisado” tenha instalado uma nova VM (virtual machine) com algum software malicioso e que essa VM comece a enviar BPDU’s através do vSwitch, vejamos esse cenário:

Imagem 2

Podemos ver na imagem 2 que agora a VM5 está enviando BPDU com um Bridge ID menor, por exemplo 4096, bem menor que o bridge priority 32768 que é configurado por padrão nos outros Switches (nesse exemplo vamos considerar que o SW1 que antes era o Root já possuía a prioridade menor que 32768, mas maior que os 4096 enviados pela VM5). Nesse caso haverá um recalculo do STP, o que ocasionará lentidão na rede e provavelmente perdas de pacotes, e agora poderemos ter portas que antes não deveriam estar em estado de Blocking, um recalculo do STP em redes pequenas pode até não ser um grande problema, mas em redes maiores de alta disponibilidade sim, ainda mais quando uma porta que não deveria estar sendo bloqueada agora passa a ser.

Para resolver esse cenário existem duas formas incrivelmente simples:

A primeira é a configuração básica de uma porta que interliga um Switch físico e o servidor ESXi, é de bom tom que o administrador de redes configure as portas que serão usadas como Uplinks dos servidores ESXi de forma que elas não participem do Spanning Tree, e que de preferência, ela discarte BPDU’s que possam ser recebidos nessa porta, vejamos um exemplo básico de configuração de uma porta que será “linkado” um servidor ESXi, neste exemplo um switch Cisco rodando IOS:

interface GigabitEthernet 0/1
spanning-tree portfast
spanning-tree bpduguard enable
no shutdown

*Existem vários tipos de configurações diferentes dependendo da marca do switch, inclusive diferenças entre um switch Cisco com IOS e um com NX-OS e podendo até bloquear BPDU’s sem que a porta seja bloqueada (o melhor cenário), recomendo consultar a documentação do fabricante em cada caso.

Nesse exemplo de configuração, no momento que o SW4 recebesse um BPDU, ele automaticamente colocaria esta porta em estado errdisable , por um lado resolveria o problema, mas o resultado possívelmente não será o desejado, já que a porta em estado errdisable não aceitaria tráfego de nenhuma das VM’s, com isso teríamos todas as VM’s desse ambiente incomunicáveis, e mesmo que houvesse outro Uplink com as mesmas configurações de porta, ele também seria bloqueado quando o primeiro BPDU fosse enviado, vejamos esse cenário na imagem a seguir:

Imagem 3

Bom, nesse caso não precisa nem dizer o quanto os usuários estariam chateados com todos os seus sistemas incomunicáveis, não é?

Felizmente a VMware adicionou o recurso de bloquear BPDU’s diretamente no vSwitch (independetemente se é um Standart vSwitch ou Distributed), para configurar basta setar o campo “Net.BlockGuestBPDU” em Advanced Settings nas configurações de cada Host de para 1 :

To enable the BPDU filter from the vSphere Client:

  1. Using the vSphere Client, switch to the Hosts and Clusters view.
  2. Click the desired host from the inventory tree view in the left pane.
  3. Click the Configuration Tab and then Advanced Settings under Software.
  4. Click Net and then locate the Net.BlockGuestBPDU option.
  5. Change the value to 1, which enables BPDU filtering.
  6. Click OK.

To enable BPDU filtering from the vSphere Web Client:

  1. Click the desired host in the inventory.
  2. Click the Manage Tab and then click Settings.
  3. Click Advanced System Settings.
  4. In the Filter field at the top right of the page, type BPDU to filter the results.
  5. A setting called Net.BlockGuestBPDU appears.
  6. Change the value to 1 to enable the BPDU filter.

To enable BPDU filtering from the command line:

  1. Connect to the desired host using SSH or the Direct Console User Interface (DCUI).
  2. Enable the BPDU filter on the host by running the command:

    # esxcli system settings advanced set -o /Net/BlockGuestBPDU --int-value=1

Instruções retiradas do kb : https://kb.vmware.com/s/article/2047822

Até a próxima.

Meu nome é Fernando Teixeira Silva, trabalho a 10 anos com TI, atualmente estudo tecnologias voltadas para ambientes de Data Center, como Redes, Virtualização e Storage. Criei esse blog para compartilhar experiências, problemas no ambiente de TI e novidades que garimpo pela Web.