Eu configurei uma rede local segmentada, onde cada segmento é VLAN e o switch na raiz de todas as VLANs também atua como roteador entre todos os segmentos IP/VLAN (o switch é o Dell S4810 executando DNOS 9.14). gateway para a Internet e o endereço IP local do gateway da Internet é o endereço IP do gateway padrão do S4810. Antes de encaminhar pacotes para o exterior, aplica-se SNAT (masquerade) para que o pacote encaminhado para a Internet tenha como endereço de origem o endereço público do roteador padrão. Nada sofisticado aqui. Quase tudo parece funcionar conforme o esperado: um nó em qualquer segmento pode entrar em contato com outros nós em outros segmentos, todos eles podem acessar a Internet e obter uma resposta, e os nós fora desta LAN veem o endereço IP de origem mascarado correto.
As coisas ficam complicadas quando a máquina de gateway da Internet (NÃO o S4810) também executa VMs com Proxmox. Esta máquina executa o Debian 12.5 e é configurada com interfaces VLAN sobre a física que vai para o S4810, e as próprias interfaces VLAN são agrupadas em pontes, uma por VLAN. A interface para a internet também está envolvida em sua própria ponte. Eu uso pontes para que o Proxmox VM possa usá-las para conectar-se a qualquer uma das redes. Quando uma VM rodando nesta máquina com uma interface virtual na ponte da Internet, ela pode acessar a Internet corretamente, mas com um endereço IP de origem que não precisa de SNAT e não é SNAT.
Quando outra VM com uma interface virtual em uma das interfaces/pontes da VLAN, ela pode alcançar outras máquinas na VLAN correspondente. Além disso, qualquer máquina em segmentos VLAN consegue acessar a Internet usando o S4810 como gateway padrão sem problemas, incluindo VM, desde que não sejam executadas no gateway de Internet/hipervisor Proxmox, mas em qualquer outra máquina hipervisor Proxmox. No entanto, quando uma VM em execução no gateway de Internet/hipervisor Proxmox deseja acessar a Internet por meio de uma das VLANs, ela não consegue. Assim como outras máquinas que funcionam conforme esperado, a VM está configurada para usar o S4810 como gateway padrão. O S4810 redireciona para o gateway de Internet/hipervisor Proxmox qualquer um dos pacotes destinados à Internet que dele recebe, e esse gateway deve encaminhar o pacote com mascaramento.
Posso ver os pacotes indo para o S4810, posso ver o S4810 enviando de volta o pacote para o gateway da Internet, posso ver o pacote duas vezes tshark
no gateway da Internet (uma vez com ttl 64
, a segunda vez com ttl 62
, ou seja, após o segundo roteamento ser executada), mas a tabela nftables
de nat postrouting
(prioridade srcnat
) parece capturá-la apenas uma vez, com ttl 64
, ou seja, antes de ser enviada para qualquer lugar e antes que o mascaramento precise ser aplicado. Quando o pacote está de volta e o mascaramento precisa ser aplicado, parece que nftables
não o vê, conforme afirmado com meta nftrace set 1
a regra no topo da tabela e o comando nat
postrouting
correspondente . nft monitor trace
Como resultado, o mascaramento não é aplicado e o nó externo que recebe o pacote o recebe com o endereço de origem não SNAT e não pode enviar uma resposta.
Existe tal recurso nftables
que aceitaria ver um determinado pacote apenas uma vez? Se sim, como posso desativá-lo para aplicar a máscara no momento certo? Ou é algo totalmente diferente que acontece? Ficarei feliz em fornecer qualquer registro ou captura necessária para me ajudar a solucionar o problema.