Múltiplas rotas e gateways com NAT

Múltiplas rotas e gateways com NAT

Minha configuração é um host VM com duas interfaces de rede onde quero usar uma como privada/interna e a outra como pública (que obterá um endereço público no host), onde acontecerá toda a mágica do NAT para as máquinas convidadas.

Duas interfaces significam dois gateways (um via eth0, 10.0.0.1e o endereço falso em eth1, 2.0.0.1).

Se entendi o roteamento corretamente, preciso configurar uma tabela de roteamento para a 2.0.0.1rede com seu próprio gateway padrão. Infelizmente, o tráfego do convidado não pode ser roteado, a menos que eu adicione um gateway padrão à tabela padrão no host. Quero que o host seja usado 10.0.0.1como gateway padrão, mas não tenho ideia de como fazer isso.

Detalhes:

Especificamente, gostaria de me livrar default via 2.0.0.1 dev eth1do host, mas se eu removê-lo, tcpdump -i vbr0não parece muito bom (tentando pesquisar serverfault.com de um convidado no exemplo abaixo):

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

Ainda assim, o convidado consegue acessar 192.168.10.1(seu gateway) e 2.0.0.1. Além disso, usar 2.0.0.1para pesquisar um endereço (esse roteador também possui um serviço DNS) do convidado funciona, então o roteamento local parece funcionar, "apenas" a parte do gateway padrão parece estar confusa de alguma forma.

Todo o tráfego de guest (ou vb0) não deveria usar o gateway padrão 2.0.0.1, conforme definido na tabela de roteamento "public"?


Configurar:

# 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

informação relacionada