Marca padrão para pacotes usando iptables

3

Estou tentando configurar um script QOS no meu roteador WRT54G habilitado para Tomato . O script faz o básico do que eu preciso (certifique-se de que uma máquina específica na minha rede tenha prioridade mais baixa do que qualquer outra), mas não estou satisfeito com o fato de ter que definir uma regra específica para o tráfego de saída de todas as outras máquinas em vez de usar algum comportamento 'padrão'.

Especificamente, eu gostaria de me livrar das duas linhas que marcam os pacotes com as marcas 11 e 12.

iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10 
iptables -t mangle -A PREROUTING -s 192.168.1.70 -j RETURN
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.2-192.168.1.69 -j MARK --set-mark 11 
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.71-192.168.1.254 -j MARK --set-mark 12 
iptables -t mangle -A PREROUTING -j IMQ --todev 0 

Eu tentei apenas removê-los (adicionando um 'padrão 12') na criação do qdisk, mas a taxa de transferência caiu drasticamente. Eu também tentei marcar todos os pacotes com

iptables -t mangle -A PREROUTING -j MARK --set-mark 12

ou

iptables -t mangle -A PREROUTING -m mark --mark 0 -j MARK --set-mark 12

como a primeira ou a última regra de filtragem, mas isso também não funcionou.

Aqui está o script completo ...

TCA="tc class add dev br0" 
TFA="tc filter add dev br0" 
TQA="tc qdisc add dev br0" 
SFQ="sfq perturb 10" 
tc qdisc del dev br0 root 
tc qdisc add dev br0 root handle 1: htb default 10 
tc class add dev br0 parent 1: classid 1:1 htb rate 2400kbit 
$TCA parent 1:1 classid 1:10 htb rate 2300kbit ceil 2400kbit prio 0 
$TCA parent 1:1 classid 1:11 htb rate   10kbit ceil 2400kbit prio 1 
$TCA parent 1:1 classid 1:12 htb rate   10kbit ceil 2400kbit prio 2 
$TCA parent 1:1 classid 1:13 htb rate   10kbit ceil 2000kbit prio 4 
$TQA parent 1:10 handle 10: $SFQ 
$TQA parent 1:11 handle 11: $SFQ 
$TQA parent 1:12 handle 12: $SFQ 
$TQA parent 1:13 handle 13: $SFQ 
$TFA parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10 
$TFA parent 1:0 prio 1 protocol ip handle 11 fw flowid 1:11 
$TFA parent 1:0 prio 2 protocol ip handle 12 fw flowid 1:12 
$TFA parent 1:0 prio 4 protocol ip handle 13 fw flowid 1:13 
iptables -t mangle -A POSTROUTING -p tcp --sport    80 -j MARK --set-mark 10 
iptables -t mangle -A POSTROUTING -p tcp --sport   443 -j MARK --set-mark 11 
iptables -t mangle -A POSTROUTING -p tcp --sport   995 -j MARK --set-mark 12 
iptables -t mangle -A POSTROUTING -d 192.168.1.70 -j MARK --set-mark 13 


TCAU="tc class add dev imq0" 
TFAU="tc filter add dev imq0" 
TQAU="tc qdisc add dev imq0" 
modprobe imq 
modprobe ipt_IMQ 
ip link set imq0 up 
tc qdisc del dev imq0 root 
tc qdisc add dev imq0 root handle 1: htb
tc class add dev imq0 parent 1: classid 1:1 htb rate 700kbit 
$TCAU parent 1:1 classid 1:10 htb rate 7kbit ceil 500kbit prio 4 
$TCAU parent 1:1 classid 1:11 htb rate 30kbit ceil 700kbit prio 2 
$TCAU parent 1:1 classid 1:12 htb rate 663kbit ceil 700kbit prio 2 
$TQAU parent 1:10 handle 10: $SFQ 
$TQAU parent 1:11 handle 11: $SFQ 
$TQAU parent 1:12 handle 12: $SFQ 
$TFAU parent 1:0 prio 4 protocol ip handle 10 fw flowid 1:10 
$TFAU parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11 
$TFAU parent 1:0 prio 2 protocol ip handle 12 fw flowid 1:12 

iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10 

#
# What should I do to avoid these two lines and mark everything else as '12'?
#
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.2-192.168.1.69 -j MARK --set-mark 11 
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.71-192.168.1.254 -j MARK --set-mark 12 
iptables -t mangle -A PREROUTING -j IMQ --todev 0 
    
por Xavier Nodet 20.09.2010 / 10:13

1 resposta

1

Consegui declarar uma 'ação padrão' adicionando uma primeira regra que corresponde a cada pacote. Parece que a tabela 'mangle' não age como as outras e tenta corresponder a todas as regras em vez de parar na primeira regra de correspondência. Isto faz sentido porque se pode querer fazer várias modificações no mesmo pacote ...

# Everything goes into the default queue, except if another rule matches...
iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j MARK --set-mark 12
iptables -t mangle -A PREROUTING -s 192.168.1.70   -j MARK --set-mark 10 
iptables -t mangle -A PREROUTING -j IMQ --todev 0
    
por 20.09.2010 / 18:33

Tags