Rota tráfego de saída da rede privada (lxdbr0)

0

eu configurei o lxd no meu sistema host com a ponte lxdbr0. Agora meus contêineres obtêm seus endereços IP via dhcp de lxdbr0 (no intervalo de 10.204.x.x).

Também tenho 2 endereços IP públicos. Um para o host (x.x.x.x) e outro para o contêiner (b.b.b.b). O contêiner deve usar o segundo ip público para o tráfego de saída e de entrada. Ambos os endereços IP públicos vão para o sistema host, então meu sistema host recebe todo o tráfego em primeiro lugar.

Eu já realizei para configurar um preroute (no host) do meu ip público para o ip privado para que todo o tráfego de entrada para o ip público vá para um container específico.

MAS eu não consigo descobrir como encaminhar o tráfego de saída do contêiner para o ip público. Eu tentei configurar um preroute como eu fiz com o tráfego de entrada, mas nenhum resultado.

iptables -L mostra

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain /* managed by lxd-bridge */
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain /* managed by lxd-bridge */
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps /* managed by lxd-bridge */
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps /* managed by lxd-bridge */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             /* managed by lxd-bridge */
ACCEPT     all  --  anywhere             anywhere             /* managed by lxd-bridge */

iptables -t nat -L mostra

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       all  --  anywhere             ip-b.ip-b-b-b.eu  to:10.204.119.5
DNAT       all  --  anywhere             10.204.119.5         to:b.b.b.b

b.b.b.b --> second public ip (for the container)
10.204.119.5 --> containers (private) ip in the lxdbr0 bridge

O tráfego de entrada no ip público é roteado para o contêiner, mas o tráfego de saída do contêiner não.

Também defino LXD_IPV4_NAT="false" na configuração da ponte lxd, pois isso permitiu que os contêineres usassem o endereço IP de meus hosts para o tráfego de saída (o que eu não quero)

EDIT # 1: rota -n mostra

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.x.1         0.0.0.0         UG    0      0        0 ens3
10.204.119.0    0.0.0.0         255.255.255.0   U     0      0        0 lxdbr0
x.x.x.1         0.0.0.0         255.255.255.255 UH    0      0        0 ens3

x.x.x.1 --> gateway of my hosts ip (x.x.x.x)

EDIT # 2: Exemplo

- pIP1 = public ip 1, should be used for host
- pIP2 = "      "  2, should be used for the container

the container runs on the host system.

container = 10.204.119.5 (device lxdbr0)
host      = pIP1 (device ens3) and pIP2 (device ens3:0)

Outgoing packets from the container come with the source ip 10.204.119.5. 
Now these packets should change the source ip to pIP2 and then sent to the 
gateway (so it appears to the router, that the packet from the container 
comes from the pIP2)
    
por SEUH 20.01.2017 / 19:51

1 resposta

0

Tudo o que você precisa fazer é NAT o tráfego proveniente do IP privado do contêiner para a interface do host para o IP público do contêiner ($ publicIP2):

iptables -t nat -A POSTROUTING -s 10.204.119.5/32 -j SNAT --to-source $publicIP2
    
por 20.01.2017 / 21:32