
Estou configurando o host de virtualização KVM com roteamento baseado em políticas (rede de gerenciamento 192.168.1.0/24 para tráfego relacionado ao host, como atualizações, ssh etc., rede DMZ 192.168.2.0/24 roteada para VMs)
A configuração fica assim (por ^^^ quero dizercomo acimapara representar a estrutura da árvore)
#external connectivity
eth0 -> vlan110 -> brhost (192.168.1.9)
^^^ -> vlan120 -> brguest (192.168.2.4)
#internal connectivity
brguestA (10.0.1.1) -> tapA0
^^^ -> tapA1
^^^ -> tapA2
brguestB (10.0.2.1) -> tapB0
^^^ -> tapB1
# ... and so on for each VM group subnet
máquinas An estão em um "switch", Bn no segundo etc. O host se comporta como um roteador e possui o iptables instalado. O IP de origem é validado por ponte no nível iptables.
Em geral, tudo "normal" funciona, mas quando estou executando algumas operações de fronteira, ele ainda se comporta como deveria, mas os registros sugerem que é mais uma coincidência do que um funcionamento adequado. Por exemplo:
conectar-se a 192.168.1.3 da VM (host diferente na rede de gerenciamento) que está com operação bloqueada no nível iptables (tcp-reset) fornece
(iptables reject log) IN=brguestA OUT=brguest SRC=10.0.1.2 DST=192.168.1.3 ... IPv4: martian source 10.0.1.2 from 192.168.1.3 on dev brhost
observe que OUT
a interface está realmente correta de acordo com o que deveria fazer, considerando a lógica da separação da rede host/convidado e mesmo que tais pacotes fossem encaminhados pelo host, eles seriam descartados no firewall de qualquer maneira. No entanto, o host iptables não pode ser rejeitado corretamente com tcp-reset, portanto, essas conexões ficam suspensas na VM e não recebem redefinição
conectar-se a 192.168.1.9 da VM fornece
IPv4: martian source 192.168.1.9 from 10.0.1.2 on dev brguestA
e nada mais. Trocar os lugares de 10.0.1.xe 192.168.1.x nesses logs me deixa muito confuso e eu realmente não entendo o significado deles (quais são src ip e qual é dst ip). Eu realmente não sei o que o host está tentando fazer e por que falha. Aqui está o resultado do meu ip rule
e ip route
:
ip rule
0: from all lookup local
32763: from 10.0.0.0/16 lookup guest
32764: from 192.168.2.0/24 lookup guest
32765: from all iif lo lookup host
32766: from all lookup main
32767: from all lookup default
ip route show table host
default via 192.168.1.1 dev brhost proto static
192.168.1.0/24 dev brhost proto static
ip route show table guest
default via 192.168.2.1 dev brguest proto static
10.0.0.0/24 dev brguestA proto static
10.0.1.0/24 dev brguestB proto static
# ... so on for other networks
ip route show table main
192.168.1.0/24 dev brhost proto static
10.0.0.0/24 dev brguestA proto static
10.0.1.0/24 dev brguestB proto static
# ...
Estou usando systemd-networkd
para gerenciamento de rede. EUpensamentoisso está acontecendo porque o host sempre tenta responder usando brhost
o dispositivo como o OUTPUT
tipo de pacote definido iif
para lo
ser capturado pela from iif lookup host
regra. No entanto, não parece ser o caso, pois a conexão 192.168.2.4
é rejeitada corretamente, por isso nem sempre é escolhida brhost
como fonte de saída.