Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: justme в Dec 12, 2005, 13:13



Титла: iptables и DSCP
Публикувано от: justme в Dec 12, 2005, 13:13
Здравейте,

опитвам се да "маркирам" трафика като локален+peer,
български и международен. след известно "мъдрене"
стигнах до следният вариант, който не работи много
адекватно (машината се товари много яко):

Примерен код

#!/bin/bash

LOC="0x00"
BUL="0x02"
INT="0x04"

CAT=/usr/bin/cat
IPT=/usr/local/sbin/iptables

BGPEERLST="/etc/bg.lst"
VNPEERLST="/etc/peer.lst"
VNPEERLSTADD="/etc/peer.lst.add"

CHN="DSCPMARK"

$IPT -t mangle -F $CHN &> /dev/null
$IPT -t mangle -X $CHN &> /dev/null
$IPT -t mangle -N $CHN &> /dev/null

$IPT -t mangle -A $CHN -s 192.168.0.0/16 -d 192.168.0.0/16 -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -s 192.168.0.0/16 -d 192.168.0.0/16 -j RETURN
$IPT -t mangle -A $CHN -s 192.168.0.0/16 -d XX.XX.XX.0/24 -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -s 192.168.0.0/16 -d XX.XX.XX.0/24 -j RETURN
$IPT -t mangle -A $CHN -d 192.168.0.0/16 -s XX.XX.XX.0/24 -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -d 192.168.0.0/16 -s XX.XX.XX.0/24 -j RETURN
$IPT -t mangle -A $CHN -s XX.XX.XX.0/24 -d XX.XX.XX.0/24 -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -s XX.XX.XX.0/24 -d XX.XX.XX.0/24 -j RETURN

$IPT -t mangle -A $CHN -i ppp+ -o ppp+ -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -i ppp+ -o ppp+ -j RETURN
$IPT -t mangle -A $CHN -i ppp+ -o ethX -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -i ppp+ -o ethX -j RETURN
$IPT -t mangle -A $CHN -o ppp+ -i ethX -j DSCP --set-dscp $LOC
$IPT -t mangle -A $CHN -o ppp+ -i ethX -j RETURN

for IP in `$CAT $VNPEERLSTADD | grep -v ^# && $CAT $VNPEERLST`;
 do
  $IPT -t mangle -A $CHN -d $IP -j DSCP --set-dscp $LOC
  $IPT -t mangle -A $CHN -d $IP -j RETURN
  $IPT -t mangle -A $CHN -s $IP -j DSCP --set-dscp $LOC
  $IPT -t mangle -A $CHN -s $IP -j RETURN
 done

for NET in `$CAT $BGPEERLST`;
 do
  $IPT -t mangle -A $CHN -d $NET -j DSCP --set-dscp $BUL
  $IPT -t mangle -A $CHN -d $NET -j RETURN
  $IPT -t mangle -A $CHN -s $NET -j DSCP --set-dscp $BUL
  $IPT -t mangle -A $CHN -s $NET -j RETURN
 done

$IPT -t mangle -A $CHN -j DSCP --set-dscp $INT
$IPT -t mangle -A $CHN -j RETURN


######################################################
$IPT -t mangle -I FORWARD -d XX.XX.XX.0/24 -j DSCPMARK
$IPT -t mangle -I FORWARD -s XX.XX.XX.0/24 -j DSCPMARK
$IPT -t mangle -I FORWARD -d 192.168.0.0/16 -j DSCPMARK
$IPT -t mangle -I FORWARD -s 192.168.0.0/16 -j DSCPMARK


и се питах дали има по-лесен (ефективен) начин
да се направи това ?


Титла: iptables и DSCP
Публикувано от: VladSun в Dec 12, 2005, 16:12
Виж http://www.linux-bg.org/cgi-bin/ib3/ikonboard.cgi?act=ST;f=10;t=11231
за идеи, макар там да е наблегнато повече на маркирането на отделно ИП.

С тоя RETURN дето го правиш при откриване на съвпадение след ВСЯКА проверка обаче се получава, че напр. за 100 БГ мрежи ще има трасиране средно на 100 правила. Ако слагаш RETURN през 20 мрежи например, ще имаш средно трасирани правила около 60 :)


Титла: iptables и DSCP
Публикувано от: justme в Dec 14, 2005, 12:04
ами подсказаха ми за GOTO пач от P-O-M
 ама неще не съм го подкарал още - при него
 вместо -j DSCP и после -j RETURN, се използва
 -g DSCP, т.е. като мине през това правило се
 връща директно в предходната верига, а не в
 тази която го вика...

 ще тест и ще видим.