
Estoy configurando un host de virtualización KVM con enrutamiento basado en políticas (red de administración 192.168.1.0/24 para tráfico relacionado con el host como actualizaciones, ssh, etc., red DMZ 192.168.2.0/24 enrutada a máquinas virtuales)
La configuración se ve así (por ^^^ quiero decircomo arribapara representar la estructura del árbol)
#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
Las máquinas An están en un "interruptor", Bn en el segundo, etc. El host se comporta como un enrutador y tiene iptables instalado. La IP de origen se valida por puente en el nivel de iptables.
En general, todo lo "normal" funciona, pero cuando realizo algunas operaciones de casos fronterizos todavía se comporta como debería, pero los registros sugieren que es más una coincidencia que un funcionamiento adecuado real. Por ejemplo:
conectarse a 192.168.1.3 desde VM (host diferente en la red de administración) que está bloqueada la operación en el nivel de iptables (tcp-reset) proporciona
(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
tenga en cuenta que OUT
la interfaz es realmente correcta de acuerdo con lo que debería hacer considerando la lógica de separación de la red host/invitado e incluso si dichos paquetes fueran reenviados por el host, de todos modos se colocarían en el firewall. Sin embargo, las iptables del host no pueden rechazarse correctamente con tcp-reset, por lo que dichas conexiones simplemente se bloquean en la VM y no se restablecen.
conectarse a 192.168.1.9 desde VM proporciona
IPv4: martian source 192.168.1.9 from 10.0.1.2 on dev brguestA
y nada más. Intercambiar lugares de 10.0.1.x y 192.168.1.x en esos registros me confunde mucho y realmente no entiendo qué significan (cuáles son src ip y cuál es dst ip). Realmente no sé qué intenta hacer el host y por qué falla. Aquí está el resultado de mi ip rule
y 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
# ...
Lo estoy usando systemd-networkd
para la gestión de red. IpensamientoEsto sucede porque el host siempre intenta responder utilizando brhost
el dispositivo como el OUTPUT
tipo de paquete que ha iif
configurado lo
para que quede atrapado por from iif lookup host
la regla. Sin embargo, no parece ser el caso, ya que la conexión 192.168.2.4
se rechaza correctamente, por lo que no siempre se selecciona brhost
como fuente de salida.