Inicio   defunct.gatopelao.org(Terminales / Xen / freeNX / etc)
agenda(2)  barrufet(5)  debian(1)  linux(1)  network(2)  rediris(3)  statusnet(3)  storage(2)  xen(4)  xmpp(1)  
weblog gatopelao

Mon, 18 Jan 2010

Hardware viejo, router nuevo

Desde el año 2003 tengo un router pentium II, 128MB, corriendo floppyfw http://www.zelow.no/floppyfw/
El hardware era un viejo HP Vectra que destripé y monté en una bandeja para poder enrackarlo.
Ha funcionado estos 7 años 24/7 sin darme problema ninguna. Ha llegado a tener una configuración bastante compleja (para mi), enrutando entre varias redes, sub redes, tunel ipip,  enrutamiento por parametros de origen, NAT, etc.

Ahora doy de baja el sistema operativo floppyfw por instalarlo un Debian en un compact flash para así poder añadirle más software y facilitarme la gestión.
iptraf, iftop, sshd, dnsmasq, postfix, etc, son herramientas muy útiles.
Sobre todo lo hago para poder incluir este router en la esquema de fwbuilder http://www.fwbuilder.org/ que empleo para gestionar los demás routers que administro.

Para poder usar un compact flash, he comprado un adaptador CF a IDE y hago un debian netinst normal sin instalarle nada demás.
La instalación ocupa:
/dev/hda2             3.3G  343M  2.8G  11% /
/dev/hda1             185M   17M  160M  10% /boot

Seguramente un RAID1 hubiera sido una buena opción, pero no pensé en ello y solo compré un adaptador de un slot cuando podía haberme comprado un adaptador de dos slots para así tener dos CFs (master y slave).

Pero ya está comprado.. y ahora, por si un día falle el CF, he hecho una copia del sistema operativo en un segundo CF más o menos así.

Boto el router desde un live CD (sin las X).  http://rip.7bf.de/current/

mount un_nfs_server:/un_dir /tmp/remote
sfdisk -d /dev/hda > /tmp/remote/hda.sfdisk
mount /dev/hda1 /tmp/local
cp -r /tmp/local /tmp/remote/

Apago el router, cambio el CF por la unidad de respaldo, y boto de nuevo desde el live CD.
mount un_nfs_server:/un_dir /tmp/remote
sfdisk /dev/hda < /tmp/remote/hda.sfdisk
partprobe
mkfs.ext3 /dev/hda1
mount /dev/hda1 /tmp/local
cp -r /tmp/remote/* /tmp/local/

Y despues hacerlo botable con grub.
echo ′(hd0) /dev/hda1′ > /tmp/local/boot/grub/device.map
grub
grub> find /boot/grub/stage1
grub> root (hd0,0)
grub> setup (hd0)

Supongo que un dd hubiera sido más elegante.

Y bueno, ahora toca crear las reglas con fwbuilder. :)

[/network] permanent link


Tue, 13 Oct 2009

shaping outgoing traffic

http://linux-ip.net/articles/Traffic-Control-HOWTO/
http://lartc.org/howto/lartc.qdisc.classful.html
http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm

La situación.
Tengo dos sedes conectados por ADSL. Cada sede tiene 4000 kilobits/s de bajada y 512 kilobits/s de subida. En una sede hay un servidor CUPS y en el otro está una impresora. Trabajos de impresión que se inician desde el servidor CUPS se apoderan de todo el ancho de banda (512kbits/s) de la ADSL dejando a los demás servicios casi inoperativos.

Cada sede tiene un router del ISP y no tengo posibilidad de configurarlos pero el servidor CUPS está detrás de una cortafuegos que administro.

Quiero que las conexiones puerto 9100 que salen por la ADSL solo ocuparán la mitad(256kbits/s = 32kilobytes/s) del caudal disponible de la ADSL. Y que todo lo demás tiene disponible el máximo que da la intefáz de mi cortafuegos (100megabit/s = 12800kilobytes/s).

Bit Byte Calculator

tc, qdisc, htb, y sfq

Egress es el trafico que sale de la interfaz.
Ingress es el trafico que entra en la interfaz.
qdisc: Queueing Discipline. Disciplina de cola.
kbps significa kilobytes
kbit significa kilobits

En HTB, rate significa el ancho de banda garantizado disponible a una clase y ceil significa techo, lo cual indica el ancho de banda máximo que una clase puede consumir. Cualquier ancho de banda usado entre rate y ceil se presta de la clase madre.

Fichero de configuración.

#asignar la packet scheduler HTB al eth0 con la etiqueta 1.
#tráfico por omisión irá a la hija clase 1:10
tc qdisc add dev eth0 root handle 1: htb default 10

#creamos la clase root bajo el qdisc 1:.
tc class add dev eth0 parent 1: classid 1:1 htb rate 12800kbps ceil 12800kbps

#clases hijas prestarán y compartirán caudal entre ellas (funcionalidad de la clase 1:1 HTB).
#son dos clases hijas. 1:10 por omisión, 1:11 cuadal limitado.
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 12700kbps ceil 12800kbps
#aunque la mitad de la subida de la ADSL son 32kbps, lo bajo aún más.
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 20kbps ceil 20kbps

tc qdisc add dev eth0 parent 1:10 sfq
tc qdisc add dev eth0 parent 1:11 sfq

tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 7 fw flowid 1:11
iptables -t mangle -A POSTROUTING -p tcp --dport 9100 -j MARK --set-mark 7

Pruebas
En mi PC detrás del firewall, en la misma red del servidor CUPS pruebo subiendo un fichero de 4gb por el puerto 22 a un servidor(10.100.10.10) al otro lado del firewall.
Asi que marco los paquetes del puerto 22.
iptables -t mangle -A POSTROUTING -p tcp --dport 22 -j MARK --set-mark 7

Creo un fichero en mi PC y lo subo.
# dd if=/dev/zero of=/tmp/foo.4gb bs=1024k count=4000
# scp /tmp/foo.4gb 10.100.10.10:/tmp
foo4.gb      0%   816KB  24KB/s  46:26:03 ETA
Funciona!

Ahora para comprobar, entro en el 10.100.10.10 y cambio la config de ssh para que esucha por el puerto 22022 y pruebo de nuevo.
# scp -P 22022 /tmp/foo.4gb 10.100.10.10:/tmp
foo4.gb      0%   9216KB  3.0MB/s  21:50 ETA
Tráfico que no sea del puerto 22, no está limitado.

[/network] permanent link


June.2010(2)   May.2010(2)   March.2010(1)   January.2010(1)   December.2009(3)   November.2009(4)   October.2009(11)  
Blog software: Blosxom.com The unofficial Blosxum user group
RSS Feed rss feed