Re: lug-bg: Traffic Shapers & iptables
- Subject: Re: lug-bg: Traffic Shapers & iptables
- From: Valery Dachev <valery@xxxxxxxxxx>
- Date: Sat, 31 Jan 2004 09:12:19 +0200
On Fri, 30 Jan 2004 15:58:30 +0200
Nickola Kolev <nikky@xxxxxxx> wrote:
> Здрасти,
>
> On Fri, 30 Jan 2004 14:57:10 +0200
> Valery Dachev <valery@xxxxxxxxxx> wrote:
>
> [ кръц ]
> : ===
> : iptables -A peering_in -m mark --set-mark 1
> : iptables -A peering_in -s <mreja1> --set-mark 2
> : ... ... ... ...
> : iptables -A peering_in -s <mrejaN> --set-mark 2
> : iptables -A peering_in -m mark --mark 1
> : iptables -A peering_in -m mark --mark 2
> : ===
>
> Ако са ти точно такива правилата за маркиране с fwmark, не мога
> да разбера защо са тия --set-mark 1, от които няма никакъв смисъл,
> защото накрая, без оглед на това какъв е изходния адрес/префикс,
> всичко ще бъде белязано с марка 2.
Не е така. Забележи, че последните две правила на вършат нищо реално. Те
са accounting правила, а при всяко от по-предните не се излиза от
въпросната верига, а се продължава нататък. Т.е. наистина се маркират само
локалните и международните пакети поотделно. Сборът на двата брояча
накрая дава число близо до акаунтинг правило в началото на таблицата, т.е.
всички пакети стигат до края със съответната маркировка. Пробвал съм да
проверявам маркировката и във filter таблицата и резултатът е същият.
> [ кръц ]
> : Добре, да речем, че ограничителят не работи. Това не е нормален
> трафик...: Още повече, че сборът въобще не дава 60те кб/с отчитани
> пак с MRTG по: същия този интерфейс. А във въпросните таблици влиза
> само трафик от/към: този интерфейс.
> :
> : Имам чувството, че пакетите, които са минали веднъж и са задържани
> заради: ограничението, минават по-късно пак през правилата. Така ли е
> ? А някаква: идея как да си реша проблема, така че и двете неща да
> работят ?
>
> Хм, пакетите не се задържат, а се дропят, което значи, че няма как
> да минат през тия правила по два пъти.
Дропят ?! Силно се съмнявам. Ако се дропят, ще има загуба на данни по пътя,
а въобще не е това идеята на кое да е ограничение. Още повече, че не става
дума за рутер, ами просто за някаква си машина.
> Според мен проблемът е, че (макар да не съм видял целия скрипт) не
> маркираш в таблицата mangle, която е единственото легално място за
> маркиране. Това, разбира се, е само предположение.
Маркирането става, именно там. Другаде за destination не можеш да сложиш
MARK, доколкото знам.
> Може ли да пуснеш част от истинския скрипт, а също и вече генерираните
> правила на cbq.init?
Прикачвам го. Ето как се компилират и правилата:
===
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
tc class change dev eth0 root cbq weight 10Mbit allot 1514
tc class add dev eth0 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 64Kbit weight 8Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 isolated
tc qdisc add dev eth0 parent 1:2 handle 2 tbf rate 64Kbit buffer 10Kb/8 limit 15Kb mtu 1500
tc filter add dev eth0 parent 1:0 protocol ip prio 200 handle 1 fw classid 1:2
===
Благодаря отново,
Валери.
#!/bin/bash
FILE='/usr/local/etc/peering.txt'
CHAIN_OUT='peering_out'
CHAIN_IN='peering_in'
umask 077
iptables -t mangle -F $CHAIN_IN
iptables -t mangle -N $CHAIN_IN
iptables -t mangle -F $CHAIN_OUT
iptables -t mangle -N $CHAIN_OUT
for CHAIN in INPUT OUTPUT $CHAIN_IN $CHAIN_OUT; do
iptables -t mangle -Z $CHAIN
done
# SET INTERNATIONAL NETWORKS FLAG
iptables -t mangle -A $CHAIN_IN -j MARK --set-mark 1
iptables -t mangle -A $CHAIN_OUT -j MARK --set-mark 1
# SET PEERING NETWORKS FLAG
for NETWORK in `egrep -v '^#' $FILE`; do
iptables -t mangle -A $CHAIN_IN -s $NETWORK -j MARK --set-mark 2
iptables -t mangle -A $CHAIN_OUT -d $NETWORK -j MARK --set-mark 2
done
# INTERNATIONAL
iptables -t mangle -A $CHAIN_IN -m mark --mark 1
iptables -t mangle -A $CHAIN_OUT -m mark --mark 1
# PEERING
iptables -t mangle -A $CHAIN_IN -m mark --mark 2
iptables -t mangle -A $CHAIN_OUT -m mark --mark 2
|