Есть файл содержащий адреса и маски Латвии (http://www.nic.lv/local.net)
Поскольку ранее используемый мной способ разделения трафика с помощью
расширеня возможностей iptables-geoip не работает с ядром 2.6.18.1
пришлось реализовывать его самому,
так взяв за оправную точку пример: http://www.uinc.ru/articles/37/
написал скрипт который маркирует пакеты с учетом зарубежного и
местного трафика, маркировка затем используется для управления
трафиком с помощью HTB
#!/bin/bash
cd /ISP-serv/
DEV_LAN=eth0
DEV_WAN=eth1
#########################################################################
# create chain: LV_ACCEPT
#########################################################################
LV='test-server/conf-files/mark-foreign/latvia.network'
./ipt -t mangle -N LV_ACCEPT
# ACCEPT Latvia networks trafic *********************
for nw in $(cut -d: -f1 $LV)
do
# mark trafic from WAN-->LAN
./ipt -t mangle -A LV_ACCEPT -o $DEV_LAN -p tcp -s $nw -j ACCEPT
# mark trafic from WAN<--LAN
./ipt -t mangle -A LV_ACCEPT -o $DEV_WAN -p tcp -d $nw -j ACCEPT
done
#########################################################################
# create chain: HANDSHAKE
#########################################################################
./ipt -t mangle -N HANDSHAKE
./ipt -t mangle -A HANDSHAKE -j MARK --set-mark 10
./ipt -t mangle -A HANDSHAKE -j LV_ACCEPT
./ipt -t mangle -A HANDSHAKE -j MARK --set-mark 100
./ipt -t mangle -A HANDSHAKE -j ACCEPT
#########################################################################
# create chain: HTTP_TRANSFER
#########################################################################
./ipt -t mangle -N HTTP_TRANSFER
./ipt -t mangle -A HTTP_TRANSFER -j MARK --set-mark 30
./ipt -t mangle -A HTTP_TRANSFER -j LV_ACCEPT
./ipt -t mangle -A HTTP_TRANSFER -j MARK --set-mark 300
./ipt -t mangle -A HTTP_TRANSFER -j ACCEPT
#########################################################################
# create chain: HTTP
#########################################################################
./ipt -t mangle -N HTTP
./ipt -t mangle -A HTTP -m connbytes --connbytes 1048576: --connbytes-dir both --connbytes-mode bytes -j HTTP_TRANSFER
./ipt -t mangle -A HTTP -j MARK --set-mark 20
./ipt -t mangle -A HTTP -j LV_ACCEPT
./ipt -t mangle -A HTTP -j MARK --set-mark 200
./ipt -t mangle -A HTTP -j ACCEPT
#########################################################################
# JUMPING to chains
#########################################################################
# check HTTP
./ipt -t mangle -A POSTROUTING -m layer7 --l7proto http -j HTTP
# check HANDSHAKE
./ipt -t mangle -A POSTROUTING -p tcp -m tcp --tcp-flags ! SYN,RST,ACK ACK -j HANDSHAKE
./ipt -t mangle -A POSTROUTING -p tcp -m length --length 0:128 -j HANDSHAKE
./ipt -t mangle -A POSTROUTING -m layer7 --l7proto dns -j HANDSHAKE
# mark the rest as OTHERS traffic
./ipt -t mangle -A POSTROUTING -j MARK --set-mark 40
./ipt -t mangle -A POSTROUTING -j LV_ACCEPT
./ipt -t mangle -A POSTROUTING -j MARK --set-mark 400
./ipt -t mangle -A POSTROUTING -j ACCEPT
Много времени задумывать над скриптом не нашлось,
поэтому в этих строках как мне кажется есть нерациональность,
связанная с тем что пакеты для зарубежного трафика маркируются
дважды (пермаркируются)
Хочется узнать насколько эффективнее (меньше задержка для
интерактивного трафика в том числе) будет подход при
котором для местного трафика создать отдельное виртуальное
сетевое устройство типа IMQ и туда направлять пакеты и на
IMQ навесить управление трафиком HTB.
Или постараться разобраться с realm?