View previous topic :: View next topic |
Author |
Message |
El_Goretto Moderator


Joined: 29 May 2004 Posts: 3174 Location: Paris
|
Posted: Sat May 10, 2008 9:23 am Post subject: [QoS] Décidément, ça veut pas |
|
|
Bonjour,
Bon, je voulais savoir si d'autres gens avaient déjà joué avec la QoS sous nunux, en particuliers avec une freebox au bout de la ligne.
Parce que, ça fait bizarre de la dire, mais tous les setups que j'ai essayé (HTB pur, PRIO simple, TBF+PRIO simple...) "ça marche pas", à chaque fois que le traffic basse priorité (du bittorrent) est lancé (sans limite de bande passante côté applicatif), le traffic en haute priorité comme l'ICMP est retardé (ping de + de 1000ms).
Hors, ça m'agace d'autant plus que PRIO est sensé être bête comme ses pieds et traiter les paquets hautes priorité tant qu'il y en a avant de traiter les autres.
Bref, le setup TBF (pour limiter le traffic total à un peu moins que la capacité de ma ligne) + PRIO (pour traiter les différentes priorité de flux) aurait du donner des résultats. Mes paquets vont bien dans les files correctes, donc je ne vois pas un problème avec le paramétrage de la QoS, mais un problème bien caché que je n'arrive pas à démasquer.
Bon, là je vous demande juste si vous avez quelques idées, lundi je retourner tripoter un peu le truc, en re-simplifiant à mort mes filtres/classifiers (1 bitto, et le reste du monde).
Autre question: impossible de faire cohabiter HTB et PRIO, les filtres sont inefficaces (les mêmes que j'ai depuis le débuts, et sont normalement indépendants du reste), et tout le traffic passe dans la file root, donc zappe toute QoS. Si vous avez déjà réussi à faire çà... n'hésitez pas à faire partager votre expérience  _________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
 |
Darius4all Tux's lil' helper

Joined: 16 Jun 2003 Posts: 128 Location: France
|
|
Back to top |
|
 |
Leander256 l33t


Joined: 05 Jul 2003 Posts: 910 Location: Singapour
|
Posted: Fri May 16, 2008 4:59 am Post subject: |
|
|
J'ai fait pas mal mumuse avec la QoS il y a deux ans (sur un sagem fast 800), et j'arrivais a avoir des resultats mais ca restait assez bancal. Des que je faisais une configuration un peu complexe, ca ne fonctionnait pas vraiment comme prevu et il m'a fallu utiliser netfilter pour marquer tous les paquets pour pouvoir les filtrer correctement dans la QoS. Donc si tu n'as pas encore essaye ca, je te conseille de passer par netfilter pour marquer les paquets avec du "-j MARK --set-mark n".
<aigri>Et je trouve que les outils en ligne de commande pour manipuler la QoS sont vraiment pourraves</aigri> |
|
Back to top |
|
 |
El_Goretto Moderator


Joined: 29 May 2004 Posts: 3174 Location: Paris
|
Posted: Fri May 16, 2008 7:07 am Post subject: |
|
|
Bon, OK, ce WE je "balance" mon script actuel.
J'utilise déjà iptables pour marquer les paquets parce que c'est le plus simple quand on touche déjà la syntaxe netfilter, puis j'ai récupéré des examples pour mapper avec tc ces marques sur des files QoS.
+ ce WE donc. _________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
 |
El_Goretto Moderator


Joined: 29 May 2004 Posts: 3174 Location: Paris
|
Posted: Sun May 18, 2008 10:00 pm Post subject: |
|
|
Voici la version qui se voulait "basique", pour tester PRIO, uniquement encadré par TBF pour limiter la bande passante totale.
beck est le nom de la passerelle, main_gauche (MG) celui de ma station dans le LAN.
Ne paniquez pas, tout le début n'est que déclaration de variables.
Ici, l'objectif est d'avoir 3 files pour PRIO, 1 haute prio, une pour le traffic par défaut (du fait de la priomap), et une basse prio. Au final, j'ai un marquage fin, mais pour mes tests je ne colle le traffic marqué qu'en haute ou basse prio.
Code: |
!/bin/sh
RATEUP=600
LSMOD="lsmod"
MODPROBE="modprobe"
IPTABLES="iptables"
IPTABLES_RESTORE="iptables-restore"
IP="ip"
GID_P2P="407"
GID_SQUID="31"
NET_LAN="192.169.0.0/24"
IP_BC_NET_LAN="192.169.0.255"
NET_DMZ="192.169.1.0/24"
NET_VPN="10.8.0.0/24"
NET_MCAST="239.0.0.0/8"
IP_MG_LAN="192.169.0.1"
IP_MG_LAN2="192.169.0.10"
IP_BECK_LAN="192.169.0.254"
IP_BECK_WAN=""
#---->IP WAN à modifier
IP_BECK_DMZ="192.169.1.254"
IP_BECK_VPN="10.8.0.1"
IF_DMZ="eth0"
IF_LAN="eth1"
IF_WAN="eth2"
IF_MER2Z="eth3"
IF_VPN="tap0"
## ports des services (quand rien n'est spécifié, les ports sont UDP _et_ TCP)
P_SKYPE="32202"
P_AMSN="6890:6900"
P_SUNRPC="111"
P_NFS="2049"
P_RPC="32765:32768"
P_SSH_TCP="2222,443"
P_TS_ADMIN_TCP="14534"
P_TS_CLIENT_UDP="8767"
P_BT_TCP="6901:6997"
P_HTS_TCP="6998"
P_ED2K_TCP="4600"
P_ED2K_UDP="4601,4603"
P_HUBDC_TCP="1111"
P_DCCLIENT_TCP="6999"
P_VPNLIGHT_UDP="1194"
P_QUAKE3_UDP="27960"
P_DOW_UDP="6112"
P_SINS_TCP="6112"
P_FEAR_UDP="27888"
P_FLATOUT_UDP="23756"
P_DNS="53"
P_DHCP_UDP="67,68"
P_RVOLT_UDP="47624"
P_RVOLT_TCP="47624,2300,2301"
P_CHAOSL_UDP="50426,2234"
P_SWAT4_UDP="10480:10484"
P_WENGO_UDP="5060,10600,10601,11132,44640"
P_FARCRY_UDP="49001"
P_FREE_MPOSTE_UDP="31336"
P_FREESPACE2_TCP="7117"
P_FREESPACE2_UDP="7808"
P_MURMUR="64738"
#P_FREE_MPOSTE_UDP="31336,31337,32808,32809"
## ce qui suit est toujours en TCP (logique...)
P_HTTP="80"
P_HTTPS="443"
P_FTP="21"
P_FTPDATA="20"
P_POP3="110"
P_POP3S="995"
P_SMTP="25"
P_SMTPS="465"
if [ "$1" ] && [ "$1" != "iptables" ] && [ "$1" != "qos" ] && [ "$1" != "status" ] && [ "$1" != "stop" ]
then
echo "erreur, mauvais parametre"
exit 1
fi
if [ "$1" = "status" ]
then
echo "[qdisc]"
tc -s qdisc show dev $IF_WAN
echo "[class]"
tc -s class show dev $IF_WAN
echo "[filter]"
tc -s filter show dev $IF_WAN
echo "[iptables]"
$IPTABLES -t mangle -L MYSHAPER-OUT -v -x 2> /dev/null
exit
fi
$IPTABLES -t mangle -D POSTROUTING -o $IF_WAN -j MYSHAPER-OUT 2> /dev/null > /dev/null
$IPTABLES -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
$IPTABLES -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
tc qdisc del dev $IF_WAN root 2> /dev/null > /dev/null
if [ "$1" = "stop" ] || [ "$1" = "iptables" ]
then
echo "Shaping removed on $IF_WAN."
if [ "$1" = "stop" ]
then
exit
fi
fi
if [ "$1" != "iptables" ]
then
###########################################################
#
# Outbound Shaping (limits total bandwidth to RATEUP)
# set queue size to give latency of about 2 seconds on low-prio packets
# valeur initiale de 30
$IP link set dev $IF_WAN qlen 1000
# changes mtu on the outbound device. Lowering the mtu will result
# in lower latency but will also cause slightly lower throughput due
# to IP and TCP protocol overhead.
#$IP link set dev $IF_WAN mtu 100
tc qdisc add dev $IF_WAN root handle 1: tbf rate ${RATEUP}kbit latency 10000ms burst 154000
tc qdisc add dev $IF_WAN parent 1: handle 10: prio priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
tc qdisc add dev $IF_WAN parent 10:1 handle 100: pfifo
tc qdisc add dev $IF_WAN parent 10:2 handle 200: sfq
tc qdisc add dev $IF_WAN parent 10:3 handle 300: sfq
# filter traffic into classes by fwmark - here we direct traffic into priority class according to
# the fwmark set on the packet (we set fwmark with iptables
# later).
tc filter add dev $IF_WAN parent 10:0 prio 1 protocol ip handle 20 fw flowid 10:1
tc filter add dev $IF_WAN parent 10:0 prio 2 protocol ip handle 21 fw flowid 10:1
tc filter add dev $IF_WAN parent 10:0 prio 3 protocol ip handle 22 fw flowid 10:1
tc filter add dev $IF_WAN parent 10:0 prio 4 protocol ip handle 23 fw flowid 10:3
tc filter add dev $IF_WAN parent 10:0 prio 5 protocol ip handle 24 fw flowid 10:3
tc filter add dev $IF_WAN parent 10:0 prio 6 protocol ip handle 25 fw flowid 10:3
tc filter add dev $IF_WAN parent 10:0 prio 7 protocol ip handle 26 fw flowid 10:3
# add MYSHAPER-OUT chain to the mangle table in iptables - this sets up the table we'll use
# to filter and mark packets.
$IPTABLES -t mangle -N MYSHAPER-OUT
$IPTABLES -t mangle -I POSTROUTING -o $IF_WAN -j MYSHAPER-OUT
# add fwmark entries to classify different types of traffic - Set fwmark from 20-26 according to
# desired class. 20 is highest prio.
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --dport 53 -j MARK --set-mark 20 # DNS name resolution (small packets)
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --dport 53 -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j MARK --set-mark 20 # DNS name resolution (small packets)
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j RETURN
#Pour mettre les paquets SYN et ACK prioritaires
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 20
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags ACK ACK -j MARK --set-mark 20
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags ACK ACK -j RETURN
#alternatives pour les ACKs:
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m length --length 0:64 -j MARK --set-mark 20 # small packets (probably just ACKs)
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m length --length 0:64 -j RETURN
#autre alternatives pour les ACKs (necessite u32):
# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:
#tc filter add dev $IF_WAN parent 1: protocol ip prio 0 u32 \
# match ip protocol 6 0xff \
# match u8 0x05 0x0f at 0 \
# match u16 0x0000 0xffc0 at 2 \
# match u8 0x10 0xff at 33 \
# flowid 1:20
$IPTABLES -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 21 # ICMP (ping) - high prio, impress friends
$IPTABLES -t mangle -A MYSHAPER-OUT -p icmp -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp -m multiport --sports $P_TS_CLIENT_UDP,$P_MURMUR -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp -m multiport --sports $P_TS_CLIENT_UDP,$P_MURMUR -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sports $P_TS_ADMIN_TCP,$P_MURMUR -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sports $P_TS_ADMIN_TCP,$P_MURMUR -j RETURN
#pour le surf qui passe par squid:
#$IPTABLES -t mangle -A MYSHAPER-OUT -m owner --gid-owner $GID_SQUID -j MARK --set-mark 21
#priorise (presque) a fond MG:
$IPTABLES -t mangle -A MYSHAPER-OUT -s $IP_MG_LAN -j MARK --set-mark 22
$IPTABLES -t mangle -A MYSHAPER-OUT -s $IP_MG_LAN -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dports $P_SSH_TCP -j MARK --set-mark 22 # acceder a d'autres ssh
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dports $P_SSH_TCP -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -s $IP_BECK_WAN -m multiport --sports $P_SSH_TCP -j MARK --set-mark 23 # secure shell
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -s $IP_BECK_WAN -m multiport --sports $P_SSH_TCP -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -m owner --gid-owner $GID_P2P -j MARK --set-mark 26
$IPTABLES -t mangle -A MYSHAPER-OUT -m owner --gid-owner $GID_P2P -j RETURN
# Les paquets restants sont marqués selon le TOS (Type of Service)
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Delay -m mark --mark 0 -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0 -j MARK --set-mark 24
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Cost -m mark --mark 0 -j MARK --set-mark 26
$IPTABLES -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 25 # redundant- mark any unmarked packets as 25 (low prio)
# Done with outbound shaping
#
####################################################
echo "Outbound shaping added to $IF_WAN. Rate: ${RATEUP}Kbit/sec."
# uncomment following line if you only want upstream shaping.
# exit
fi
[ensuite ya les règles iptables "classiques"]
|
_________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|