Como definir a marca no pacote quando encaminhá-lo na tabela de pré-detalhamento nat?

2

Eu tenho algumas regras de encaminhamento de porta como esta

iptables -t nat -A PREROUTING -p tcp --dport 46000 -j DNAT --to-destination 172.16.8.2:46000
iptables -A FORWARD -p tcp -d 172.16.8.2 --dport 46000 -j ACCEPT

Gostaria de saber se existe uma maneira de adicionar novas regras de encaminhamento em uma linha, em vez de duas, para que eu não precise inserir os mesmos dados duas vezes. Quero dizer regras como esta:

  1. Em nativo PREROUTING encaminha o pacote ao destino e marque-o
  2. No filtro FORWARD, permitir todos os pacotes que foram marcados usando a regra 1

É possível?

    
por Poma 07.06.2013 / 15:45

1 resposta

2

Não é possível fazer isso com apenas um comando por DNAT - a menos que ... veja abaixo. Mas é possível inserir os dados apenas uma vez.

Vamos definir o intervalo de marcas 1024-2047 para as conexões que recebem DNAT e encaminhadas.

Uma linha com cada condição de correspondência DNAT no mangle:

iptables -t mangle -A PREROUTING -p tcp --dport 46000 -j MARK --set-mark 0x400
iptables -t mangle -A PREROUTING -p tcp --dport 46001 -j MARK --set-mark 0x401
iptables -t mangle -A PREROUTING -p tcp --dport 46002 -j MARK --set-mark 0x402

Um comando para cada in nat:

iptables -t nat -A PREROUTING -m mark --mark 0x400 -j DNAT \
  --to-destination 172.16.8.2:46000
iptables -t nat -A PREROUTING -m mark --mark 0x401 -j DNAT \
  --to-destination 172.16.8.2:46001
iptables -t nat -A PREROUTING -m mark --mark 0x402 -j DNAT \
  --to-destination 172.16.8.2:46002

Um comando para todos no filtro:

iptables -A FORWARD -m mark --mark 0x400/0x400 -j ACCEPT

BTW: Não há necessidade de fornecer a porta de destino para -j DNAT , se não for alterada.

Editar 1:

Você pode fazer isso sem ter permitido as conexões explicitamente, se você está bem em permitir tudo o que foi DNATted. Nesse caso, você iria ficar com o seu

iptables -t nat -A PREROUTING -p tcp --dport 46000 -j DNAT --to-destination 172.16.8.2:46000

mas tem apenas uma regra FORWARD para todos:

iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
    
por 07.06.2013 / 16:53