Marcando pacotes com iptables com um NAT

3

Eu tenho que escrever scripts bash para um roteador para controlar a limitação de largura de banda para um determinado usuário em um determinado nome de domínio.

Para isso, estou usando o iptables para marcar os pacotes recebidos de um domínio restrito para um endereço IP do usuário na rede privada. Com cada par user_ip / domain_ip eu tenho uma única chave com a qual eu posso marcar o pacote.

Eu adiciono essas regras na tabela mangle assim:

$iptables -t mangle -A PREROUTING -p tcp -d $userIp -s $restrictedDom -j MARK --set-mark $id 
$iptables -t mangle -A PREROUTING -p tcp -d $userIp -s $restrictedDom -j RETURN

Minha configuração de NAT na tabela nat (eth0 é minha interface de internet e usei tap0 para a interface Lan) é

$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

O pacote para meu usuário Lan deve corresponder a uma regra na tabela mangle, mas não é válido.

Exemplo: (table mangle na PREROUTING CHAIN) Isto é, por exemplo, para marcar pacotes provenientes do slashdot.org para o usuário 192.168.0.2 na rede Lan.

Chain PREROUTING (policy ACCEPT 14858 packets, 7215129 bytes)
pkts      bytes target     prot opt in     out     source               destination      
 0        0 MARK       tcp  --  *      *       216.34.181.45        192.168.0.2         MARK xset 0x9/0xffffffff 
 0        0 RETURN     tcp  --  *      *       216.34.181.45        192.168.0.2         

No entanto, se eu tentar marcar pacotes vindos do slashdot.org na interface de internet do roteador, os pacotes são pegos, e se um computador no Lan também consultar o slashdot.org, a mesma regra os marcará também.

Então, acho que há um problema por causa da tradução do NAT e não sei exatamente quando e em qual ordem aplicar as regras.

Em um primeiro momento, minhas configurações de NAT são boas ou incompletas no iptables? Eu perdi uma coisa importante sobre o conceito de regras ou iptables?

Obrigado antecipadamente.

    
por Mulot 21.10.2009 / 09:23

1 resposta

6

Acho que você deve usar a tabela POSTROUTING mangle, pois está marcando os pacotes no PREROUTING antes do mecanismo NAT.

Veja a cadeia do IPTABLE:

    
por 21.10.2009 / 10:24