Para recriar uma topologia de rede em malha, gosto de conectar vários namespaces de rede. Cada extremidade da conexão é uma interface em tal namespace.
Agora preciso conectar todas as interfaces de ponto final em um namespace em uma. As pontes vêm à mente, mas elas não se comportam da maneira que eu preciso, porque fazem o roteamento por conta própria.
Então eu preciso fazer a ponte funcionar como um hub e bloquear a comunicação entre as interfaces da ponte.
Para configurar a ponte para atuar como um hub:
ip link set "br0" type bridge stp_state 0
ip link set "br0" type bridge ageing_time 0
ip link set "br0" type bridge forward_delay 0
(isso deve fazer com que todos os pacotes sejam inundados para todas as outras interfaces, exceto o remetente)
Mas como faço para bloquear qualquer tráfego entre as interfaces da ponte?
Você pode fazer isso definindo todas as portas da ponte como isoladas, exceto uma: a que não foi isolada para que as portas isoladas ainda possam se comunicar. É um conceito semelhante ao Private VLAN, também conhecido como isolamento de porta , onde a porta não isolada será chamada de uplink .
da ponte do homem :
Esta porta não isolada não pode ser a porta auto-implícita da ponte (pelo menos eu poderia descobrir nos testes). Então você não pode colocar por exemplo diretamente um IP na bridge. Em vez disso, você deixa a ponte em branco e adiciona um novo par veth : um como porta da ponte, o outro com o IP. Este será o "uplink".
Vamos supor que você já escravizou as interfaces veth0 veth1 e veth2 , vinculando outros namespaces, a br0 . Você teria que fazer, depois que eles se tornassem portas de ponte:
Agora essas portas não podem se comunicar entre si, apenas com portas não isoladas.
Adicione a interface de uplink (com um veth com ambas as extremidades permanecendo no mesmo namespace atual) e configure-a: