{"id":129,"date":"2011-01-03T12:43:00","date_gmt":"2011-01-03T12:43:00","guid":{"rendered":"http:\/\/aldarias.es\/wordpress\/?p=129"},"modified":"2011-01-03T12:43:00","modified_gmt":"2011-01-03T12:43:00","slug":"qos-control-ancho-banda-cbq-con-ubuntu-y-colas","status":"publish","type":"post","link":"http:\/\/aldarias.es\/wordpress\/?p=129","title":{"rendered":"QOS: CONTROL ANCHO BANDA CBQ CON UBUNTU Y COLAS"},"content":{"rendered":"<p>INTRODUCCI\u00d3N<\/p>\n<p>El contexto es una conexi\u00f3n de Ono, conectado a un<br \/>router inhalambrico y una red local 192.168.2.0\/24<\/p>\n<p>El objetivo es que el servidor Web no se coma<br \/>todo el ancho de banda de salida. Y la conexi\u00f3n<br \/>remota ssh vaya r\u00e1pida.<\/p>\n<p>Este script en bash permite configurar el ancho de banda por servicio. Tambien permite ver que trafico hay en cada separaci\u00f3n de los servicios. Se va a crear 6 colas asociadas redes o servidios.<\/p>\n<p>EJECUTARLO:<\/p>\n<p>sudo bash cbq.sh start<br \/>[sudo] password for paco: <br \/>=================================================<br \/>|| QOS CON CQB. Por Paco Aldarias. 12.1.09.<br \/>=================================================<br \/>|| CONTROL ANCHO BANDA SALIDA.                  <br \/>=================================================<br \/>|| INTERFACES Y REDES                           <br \/>=================================================<br \/>|| Interface unico &#8230;&#8230;&#8230;&#8230;..: eth0<br \/>|| IP eth0 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.: 192.168.2.2<br \/>|| LAN &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..: 192.168.2.0\/24<br \/>|| Velocidad subida inet &#8230;&#8230;..:300kbit<br \/>|| Velocidad subida lan &#8230;&#8230;&#8230;: 100000kbit<br \/>=================================================<br \/>|| CONFIGURACION     VEL.GARANTIZADA\/MAX(CEIL):  <br \/>=================================================<br \/>|| COLA 10 INET    : 270kbit\/300kbit  33kbytes\/37kbytes <br \/>|| COLA 20 LAN     : 90000kbit\/100000kbit  11250kbytes\/12500kbytes <br \/>|| COLA 30 ICMP    : 216kbit\/300kbit  27kbytes\/37kbytes <br \/>|| COLA 40 SSH,ET  : 189kbit\/270kbit  23kbytes\/33kbytes<br \/>|| COLA 50 DEFAULT : 162kbit\/240kbit  20kbytes\/30kbytes<br \/>|| COLA 60 SERV.WEB: 54kbit\/60kbit  6kbytes\/7kbytes<br \/>=================================================<br \/>|| OTROS             r2q\/quamtum<\/p>\n<p>=================================================<br \/>|| R2QL                     : 1000<br \/>|| R2QLR(Entre 1500-60.000) : 102400<br \/>|| QUANTUML                : 12800<br \/>|| R2QI                     : 200<br \/>|| R2QIR(Entre 1500-60.000) : 1536<br \/>|| QUANTUMI                : 192<br \/>=================================================<\/p>\n<p><span style=\"font-weight: bold;\">EL SCRIPT<\/span><br \/>cat cbq.sh <\/p>\n<p>#http:\/\/www.esdebian.org\/foro\/9949\/mldonkey-paraliza-navegacion<\/p>\n<p>#!\/bin\/bash<\/p>\n<p># Aclaracion:<br \/>#    quantum=rate*1024\/8\/r2q<br \/>#    rate\/r2q &gt;= quantum<br \/>#    QUANTUM debe estar entre 1500 (valor del MTU) y 60000 (valor maximo del leaf QUANTUM)<br \/>#    100mbit = 12.5 mbyte \/ r2q = 1.2 Mbyte &gt; 60.000<br \/># Por Paco Aldarias<\/p>\n<p>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| QOS con CBQ. Por Paco Aldarias. 12.1.09.\u00bb<\/p>\n<p>########################################<br \/># VARIABLES<br \/>########################################<\/p>\n<p># EN kbits<br \/>UPINET=300<br \/>UPLAN=100000<br \/>DEV=eth0<br \/>LAN=\u00bb192.168.2.0\/24&#8243;<br \/>IP=\u00bb192.168.2.2&#8243;<br \/>ALL=\u00bb0.0.0.0\/0&#8243;<\/p>\n<p>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| CONTROL ANCHO BANDA SALIDA.                  \u00ab<br \/>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| INTERFACES Y REDES                           \u00ab<br \/>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| Interface unico &#8230;&#8230;&#8230;&#8230;..: $DEV\u00bb<br \/>echo \u00ab|| IP $DEV &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.: $IP\u00bb<br \/>echo \u00ab|| LAN &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..: $LAN\u00bb<br \/>echo \u00ab|| Velocidad subida inet &#8230;&#8230;..:${UPINET}kbit\u00bb<br \/>echo \u00ab|| Velocidad subida lan &#8230;&#8230;&#8230;: ${UPLAN}kbit\u00bb<\/p>\n<p>#Calculamos un 90 % de nuestra tasa de subida <br \/>RATEUPINET=$[9*$UPINET\/10]<br \/>RATEUPLAN=$[9*$UPLAN\/10]<\/p>\n<p>RATE10=${RATEUPINET}<br \/>RATE20=${RATEUPLAN}<br \/>RATE30=$[8*$RATEUPINET\/10]<br \/>RATE40=$[7*$RATEUPINET\/10]<br \/>RATE50=$[6*$RATEUPINET\/10]<br \/>RATE60=$[2*$RATEUPINET\/10]<\/p>\n<p>CEIL10=${UPINET}<br \/>CEIL20=${UPLAN}<br \/>CEIL30=$[10*$UPINET\/10]<br \/>CEIL40=$[9*$UPINET\/10]<br \/>CEIL50=$[8*$UPINET\/10]<br \/>CEIL60=$[2*$UPINET\/10]<\/p>\n<p># http:\/\/www.ecualug.org\/?q=2006\/12\/14\/comos\/como_segmentar_el_ancho_de_banda_de_una_red_con_htb&amp;page=1<\/p>\n<p># r2q=10  quantum= rate*1024\/8\/r2q<br \/>R2QL=1000<br \/>R2QLR=$[${UPLAN}*1024\/${R2QL}] # Entre 1500 y 6000<br \/>QUANTUML=$[${UPLAN}*1024\/8\/${R2QL}]<\/p>\n<p>R2QI=200<br \/>R2QIR=$[${UPINET}*1024\/${R2QI}] # Entre 1500 y 6000<br \/>QUANTUMI=$[${UPINET}*1024\/8\/${R2QI}]<\/p>\n<p>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| CONFIGURACION     VEL.GARANTIZADA\/MAX(CEIL):  \u00bb <br \/>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| COLA 10 INET    : ${RATE10}kbit\/${CEIL10}kbit  $[$RATE10\/8]kbytes\/$[$CEIL10\/8]kbytes \u00ab<br \/>echo \u00ab|| COLA 20 LAN     : ${RATE20}kbit\/${CEIL20}kbit  $[$RATE20\/8]kbytes\/$[$CEIL20\/8]kbytes \u00ab<br \/>echo \u00ab|| COLA 30 ICMP    : ${RATE30}kbit\/${CEIL30}kbit  $[$RATE30\/8]kbytes\/$[$CEIL30\/8]kbytes \u00ab<br \/>echo \u00ab|| COLA 40 SSH,ET  : ${RATE40}kbit\/${CEIL40}kbit  $[$RATE40\/8]kbytes\/$[$CEIL40\/8]kbytes\u00bb<br \/>echo \u00ab|| COLA 50 DEFAULT : ${RATE50}kbit\/${CEIL50}kbit  $[$RATE50\/8]kbytes\/$[$CEIL50\/8]kbytes\u00bb<br \/>echo \u00ab|| COLA 60 SERV.WEB: ${RATE60}kbit\/${CEIL60}kbit  $[$RATE60\/8]kbytes\/$[$CEIL60\/8]kbytes\u00bb<\/p>\n<p>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| OTROS             r2q\/quamtum<br \/>\u00ab<br \/>echo \u00ab=================================================\u00bb<br \/>echo \u00ab|| R2QL                     : ${R2QL}\u00bb<br \/>echo \u00ab|| R2QLR(Entre 1500-60.000) : ${R2QLR}\u00bb<br \/>echo \u00ab|| QUANTUML                : ${QUANTUML}\u00bb<br \/>echo \u00ab|| R2QI                     : ${R2QI}\u00bb<br \/>echo \u00ab|| R2QIR(Entre 1500-60.000) : ${R2QIR}\u00bb<br \/>echo \u00ab|| QUANTUMI                : ${QUANTUMI}\u00bb<br \/>echo \u00ab=================================================\u00bb<\/p>\n<p>########################################<br \/># STATUS<br \/>########################################<\/p>\n<p>if [ \u00ab$1\u00bb = \u00abstatus\u00bb ]<br \/>then<br \/>exit<br \/>fi<\/p>\n<p>########################################<br \/># STATUS1<br \/>########################################<\/p>\n<p>if [ \u00ab$1\u00bb = \u00abstatus1\u00bb ]<br \/>then<br \/>echo \u00ab=======================================\u00bb<br \/>echo \u00ab|| qdisc\u00bb<br \/>echo \u00ab=======================================\u00bb<\/p>\n<p>tc -s qdisc show dev $DEV<\/p>\n<p>echo \u00ab=======================================\u00bb<br \/>echo \u00ab|| class\u00bb<br \/>echo \u00ab=======================================\u00bb<\/p>\n<p>tc -s class show dev $DEV<\/p>\n<p>echo \u00ab=======================================\u00bb<br \/>echo \u00ab|| iptables\u00bb<br \/>echo \u00ab=======================================\u00bb<\/p>\n<p>iptables -t mangle  -L MYSHAPER-OUT -n -v<br \/>exit<br \/>fi<\/p>\n<p>########################################<br \/># STATUS2<br \/>########################################<\/p>\n<p>if [ \u00ab$1\u00bb = \u00abstatus2\u00bb ]<br \/>then<br \/>watch tc -s qdisc<br \/>exit<br \/>fi<\/p>\n<p>########################################<br \/># STOP<br \/>########################################<\/p>\n<p># Reset everything to a known state (cleared)<br \/>tc qdisc del dev $DEV root    2&gt; \/dev\/null &gt; \/dev\/null<\/p>\n<p>iptables -t mangle -D POSTROUTING -o $DEV -j MYSHAPER-OUT 2&gt; \/dev\/null &gt; \/dev\/null<br \/>iptables -t mangle -F MYSHAPER-OUT 2&gt; \/dev\/null &gt; \/dev\/null<br \/>iptables -t mangle -X MYSHAPER-OUT 2&gt; \/dev\/null &gt; \/dev\/null<\/p>\n<p>if [ \u00ab$1\u00bb = \u00abstop\u00bb ] <br \/>then <br \/>echo \u00abShaping removed on $DEV.\u00bb<br \/>exit<br \/>fi<\/p>\n<p>########################################<br \/># CONFIGURANDO COLAS<br \/>#######################<br \/>#################<\/p>\n<p># Cola padre htb<br \/>tc qdisc add dev $DEV root handle 1: htb default 10 r2q $R2QL<\/p>\n<p>#Limitamos el trafico <br \/>tc class add dev $DEV parent 1: classid 1:10 htb rate ${RATEUPINET}Kbit ceil ${CEIL10}Kbit burst 6k prio 1  quantum $QUANTUMI #inet<br \/>tc class add dev $DEV parent 1: classid 1:20 htb rate ${RATEUPLAN}Kbit  ceil ${CEIL20}Kbit  burst 6k prio 2 quantum $QUANTUML #lan<\/p>\n<p># Repartimos el sobrante de ancho de banda equitativamente<br \/>tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10 <br \/>tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10<\/p>\n<p>#Iniciamos iptables<br \/>iptables -t mangle -N MYSHAPER-OUT<br \/>iptables -t mangle -I POSTROUTING -o $DEV -j MYSHAPER-OUT<\/p>\n<p>###########################<br \/># Marca de paquetes<br \/>##########################<\/p>\n<p># COLA 10. INET<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -s $IP ! -d $LAN &#8211;j MARK &#8211;set-mark 1 # inet <br \/>iptables -t mangle -A MYSHAPER-OUT -m mark &#8211;mark 1 -j CLASSIFY &#8211;set-class 1:10<\/p>\n<p># COLA 20. LAN.<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -s $LAN -d $LAN -j MARK &#8211;set-mark 2 # lan<br \/>iptables -t mangle -A MYSHAPER-OUT -o lo -j MARK &#8211;set-mark 2<br \/>iptables -t mangle -A MYSHAPER-OUT -m mark  &#8211;mark 2 -j CLASSIFY &#8211;set-class 1:20<\/p>\n<p># Clasificamos el trafico de inet<\/p>\n<p>tc class add dev $DEV parent 1:10 classid 1:30 htb rate ${RATE30}Kbit ceil  ${CEIL30}Kbit burst 6k prio 3 quantum $QUANTUMI # dns,icmp,router <br \/>tc class add dev $DEV parent 1:10 classid 1:40 htb rate ${RATE40}kbit ceil  ${CEIL40}kbit burst 6k prio 4 quantum $QUANTUMI # ssh<br \/>tc class add dev $DEV parent 1:10 classid 1:50 htb rate ${RATE50}kbit ceil  ${CEIL50}kbit burst 6k prio 5 quantum $QUANTUMI # resto<br \/>tc class add dev $DEV parent 1:10 classid 1:60 htb rate ${RATE60}kbit ceil  ${CEIL60}kbit burst 6k prio 6 quantum $QUANTUMI # www<\/p>\n<p># Repartimos el sobrante de ancho de banda equitativamente<br \/>tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10 <br \/>tc qdisc add dev $DEV parent 1:40 handle 40: sfq perturb 10<br \/>tc qdisc add dev $DEV parent 1:50 handle 50: sfq perturb 10<br \/>tc qdisc add dev $DEV parent 1:60 handle 60: sfq perturb 10<\/p>\n<p># Mldonkey<br \/>tc filter add dev $DEV parent 1:10 protocol ip prio 10 u32 match ip tos 0x08 0xff flowid 1:60<\/p>\n<p>########################################<br \/># MARCANDO DE PAQUETES Y ENCOLANDO<br \/>########################################<\/p>\n<p># COLA 30. MAXIMA PRIORIDAD. MAX VELOCIDAD<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -p tcp -m tcp &#8211;tcp-flags SYN,RST,ACK ACK  -s $LAN ! -d $LAN -j MARK &#8211;set-mark 3 # MAX PRIORIDAD<br \/>iptables -t mangle -A MYSHAPER-OUT -m tos &#8211;tos Minimize-Delay -s $LAN ! -d $LAN -j MARK &#8211;set-mark 3 # tos<br \/>iptables -t mangle -A MYSHAPER-OUT -p icmp -s $LAN ! -d $LAN -j MARK &#8211;set-mark 3 # icmp<br \/>iptables -t mangle -A MYSHAPER-OUT -s $IP -p udp &#8211;sport 27960 -j MARK &#8211;set-mark 3 # enemy<br \/>iptables -t mangle -A MYSHAPER-OUT -p udp -s $IP  &#8211;dport 53 -j MARK &#8211;set-mark 3   # dns<br \/>iptables -t mangle -A MYSHAPER-OUT -m mark &#8211;mark 3 -j CLASSIFY &#8211;set-class 1:30<\/p>\n<p># COLA 40<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -p tcp -s $IP  ! -d $LAN &#8211;sport ssh -j MARK &#8211;set-mark 4    # ssh<br \/>iptables -t mangle -A MYSHAPER-OUT -p tcp -m length &#8211;length :64 -j MARK &#8211;set-mark 4 # small packets (probably just ACKs)<br \/>iptables -t mangle -A MYSHAPER-OUT -m mark &#8211;mark 4 -j CLASSIFY &#8211;set-class 1:40<\/p>\n<p># COLA 50<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -p tcp  -s $IP ! -d $LAN  -j MARK &#8211;set-mark 5 # Resto<br \/>iptables -t mangle -A MYSHAPER-OUT -m mark  &#8211;mark 5 -j CLASSIFY &#8211;set-class 1:50<\/p>\n<p># COLA 60. MINIMA PRIORIDAD. MIN. VELOCIDAD<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -p tcp -s $IP ! -d $LAN  -j MARK &#8211;sport http &#8211;set-mark 6 # www<\/p>\n<p>#f=\u00bbmltcpdump.txt\u00bb<br \/>#f=\u00bbml-port.txt\u00bb<br \/>#for i in $(cat $f);do<br \/>#if [ $i -gt 1024 ];then<br \/># echo \u00abMarcando $i\u00bb<br \/># iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $i &#8211;set-mark 6 # p2p<br \/># iptables -t mangle -A MYSHAPER-OUT -p udp  -j MARK &#8211;dport $i &#8211;set-mark 6 # p2p<br \/>#fi<br \/>#done<\/p>\n<p>EDONKEY_PORT=4662<br \/>KAD_PORT=8443<br \/>OVERNET_PORT=5865<br \/>BITTORRENT_PORT=6882<br \/>OPENNAP_PORT=9999<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $EDONKEY_PORT &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p udp  -j MARK &#8211;dport $(($EDONKEY_PORT + 4)) &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $KAD_PORT &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p udp  -j MARK &#8211;dport $KAD_PORT &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $OVERNET_PORT &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p udp  -j MARK &#8211;dport $OVERNET_PORT &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $(($EDONKEY_PORT &#8211; 1)) &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $BITTORRENT_PORT &#8211;set-mark 6 # p2p<br \/>iptables -t mangle -A MYSHAPER-OUT -p tcp  -j MARK &#8211;dport $OPENNAP_PORT &#8211;set-mark 6 # p2p<\/p>\n<p>iptables -t mangle -A MYSHAPER-OUT -m mark  &#8211;mark 6 -j CLASSIFY &#8211;set-class 1:60<\/p>\n","protected":false},"excerpt":{"rendered":"<p>INTRODUCCI\u00d3N El contexto es una conexi\u00f3n de Ono, conectado a unrouter inhalambrico y una red local 192.168.2.0\/24 El objetivo es que el servidor Web no se comatodo el ancho de banda de salida. Y la conexi\u00f3nremota ssh vaya r\u00e1pida. Este &hellip; <a href=\"http:\/\/aldarias.es\/wordpress\/?p=129\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","footnotes":""},"categories":[184,16,185,40],"tags":[],"class_list":["post-129","post","type-post","status-publish","format-standard","hentry","category-cbq","category-linux","category-qos","category-redes"],"_links":{"self":[{"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=129"}],"version-history":[{"count":0,"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/129\/revisions"}],"wp:attachment":[{"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/aldarias.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}