On Fri, 30 Jan 2004 15:58:30 +0200 Nickola Kolev <[EMAIL PROTECTED]> wrote:
> Здрасти, > > On Fri, 30 Jan 2004 14:57:10 +0200 > Valery Dachev <[EMAIL PROTECTED]> 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
