iptables port forwarding apenas para um determinado intervalo de IP

3

Estou usando contêineres LXC. Cada um dos meus contêineres tem um endereço IP em 10.0.3.0/24. Eu quero que os pacotes que entram em meu host em uma certa porta sejam redirecionados para um contêiner, então eu uso esta regra:

iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000

Isto permite fazer (fora do pacote) # - > HOST: 3000 - > RECIPIENTE: 3000

Funciona muito bem. No entanto, quando estou dentro de um contêiner (não aquele usado nesta regra anterior) e desejo acessar outro host (por exemplo, HOST2) na porta 3000, meu pacote está sendo redirecionado para meu contêiner. Faz:

(dentro do pacote do contêiner) # - > HOST2: 3000 - > HOST: 3000 - > RECIPIENTE: 3000

em vez de (dentro do pacote do contêiner) # - > HOST2: 3000 - > HOST: 3000 - > HOST2: 3000

Eu tentei mudar minha regra acima para

iptables -t nat -A PREROUTING -s 10.0.3.0/24 -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000

para dizer: se o pacote vem de um contêiner, não aplique a regra, mas isso não funciona. Qualquer ajuda seria ótimo, Atenciosamente

Aqui estão minhas regras do iptables:

Chain PREROUTING (policy ACCEPT 154 packets, 29925 bytes)
pkts bytes target     prot opt in     out     source               destination         
4   240 DNAT       tcp  --  *      *       10.0.3.0/24          0.0.0.0/0            tcp      dpt:3000 to:10.0.3.5:3000
3   180 DNAT       tcp  --  *      *       10.0.3.0/24          0.0.0.0/0            tcp   dpt:3001 to:10.0.3.6:3001

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

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

Chain POSTROUTING (policy ACCEPT 29 packets, 2140 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   28  1525 MASQUERADE  all  --  *      *       10.0.3.0/24         !10.0.3.0/24

Por não funcionar, quero dizer que quando eu encurro 3000 todos os hosts de dentro de um contêiner, sou redirecionado para o meu contêiner: 3000

    
por rmonjo 15.11.2013 / 12:20

1 resposta

7

Os -s flags selecionam apenas o tráfego que corresponde ao host ou à rede especificada. Se você quiser corresponder a todo o tráfego exceto , use

! -s 10.0.3.0/24

e não se esqueça de escapar do ! do shell com aspas ou uma barra invertida.

    
por 15.11.2013 / 13:36