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:
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.