Múltiples rutas y gateways con NAT

Múltiples rutas y gateways con NAT

Mi configuración es un host de VM con dos interfaces de red donde quiero usar una como privada/interna y la otra como pública (que obtendrá una dirección pública en el host), donde ocurrirá toda la magia NAT en las máquinas invitadas.

Dos interfaces significan dos puertas de enlace (una vía eth0, 10.0.0.1y la dirección falsa en eth1, 2.0.0.1).

Si entendí correctamente el enrutamiento, tengo que configurar una tabla de enrutamiento para la 2.0.0.1red con su propia puerta de enlace predeterminada. Lamentablemente, el tráfico de invitados no se puede enrutar a menos que agregue una puerta de enlace predeterminada a la tabla predeterminada del host. Quiero que el host lo utilice 10.0.0.1como puerta de enlace predeterminada, pero no tengo idea de cómo hacerlo.

Detalles:

Específicamente, me gustaría deshacerme de él default via 2.0.0.1 dev eth1en el host, pero si lo elimino, tcpdump -i vbr0no se ve muy bien (intento buscar serverfault.com desde un invitado en el siguiente ejemplo):

IP 192.168.10.2.32804 > 8.8.4.4.domain: 41116+ A? serverfault.com. (24)
IP 192.168.10.1 > 192.168.10.2: ICMP net 8.8.4.4 unreachable, length 60

Aún así, el huésped puede llegar a 192.168.10.1(su puerta de enlace) y 2.0.0.1. Además, el uso 2.0.0.1para buscar una dirección (ese enrutador también tiene un servicio DNS) del invitado funciona, por lo que el enrutamiento local parece funcionar, "sólo" la parte de la puerta de enlace predeterminada parece estar estropeada de alguna manera.

¿No debería todo el tráfico del invitado (o vb0) utilizar la puerta de enlace predeterminada 2.0.0.1, como se define en la tabla de enrutamiento "pública"?


Configuración:

# ip route
default via 2.0.0.1 dev eth1
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.15
2.0.0.0/24 dev eth1  proto kernel  scope link  src 2.0.0.55
192.168.10.0/24 dev vbr0  proto kernel  scope link  src 192.168.10.1


# ip route show public
default via 2.0.0.1 dev eth1
2.0.0.0/24 dev eth1  scope link  src 2.0.0.55
192.168.10.0/24 dev vbr0  scope link  src 192.168.10.1


# ip rule
0:      from all lookup local
32761:  from 192.168.10.1 lookup public
32762:  from all to 192.168.10.1 lookup public
32763:  from all to 2.0.0.55 lookup public
32765:  from 2.0.0.55 lookup public
32766:  from all lookup main
32767:  from all lookup default


# iptables -vnL
Chain INPUT (policy ACCEPT 1222 packets, 91256 bytes)
 pkts bytes target     prot opt in     out     source               destination
   13   648 REJECT     all  --  *      *       0.0.0.0/0            2.0.0.55          reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 193 packets, 297K bytes)
 pkts bytes target     prot opt in     out     source               destination
  266 51860 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.10.0/24      ctstate NEW,RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 1157 packets, 149K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain LOGDROP (0 references)
 pkts bytes target     prot opt in     out     source               destination


# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 49 packets, 5494 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   360 DNAT       tcp  --  *      *       0.0.0.0/0            2.0.0.55          tcp dpt:80 to:192.168.10.2:80
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            2.0.0.55          tcp dpt:443 to:192.168.10.2:443
    1    60 DNAT       tcp  --  *      *       0.0.0.0/0            2.0.0.55          tcp dpt:22022 to:192.168.10.2:22

Chain INPUT (policy ACCEPT 24 packets, 3414 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 5 packets, 317 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 12 packets, 737 bytes)
 pkts bytes target     prot opt in     out     source               destination
    5   318 SNAT       all  --  *      *       192.168.10.2         0.0.0.0/0            to:2.0.0.55

información relacionada