informatica, Networking, planet

Network Shaping con debian squeeze (oldstable) mastershaper 0.44 con soporte vlan Cisco

Bueno regreso a hacer proyectos frikis, esta ves un equipo de red usando GNU/Debian ya que no tengo $3000 para comprar un packeteer o algo parecido que haga network shaping, qos y data rate limit.

Proyecto

Mi escenario es el siguiente:

Si, este es mi esquema de red, internet es una nube oscura y tenebrosa

Si, este es mi esquema de red, internet es una nube oscura y tenebrosa

Bueno el router solo tiene una interfáz de entrada y una de salida, la interfáz de salida esta en modo trunk para comunicarse con el switch, el shaper que está ubicado entre ambos equipos es un bridge, osea completamente transparente para ambos, pero debe ser capáz de ver la vlan que vamos a manipular, lo que necesitamos:

1- router cisco o de cualquier otra marca que soporte encapsulación dotq1
2- Switch administrable con soporte de encapsulación dotq1 (para las vlan)
3- Una pc con dos tarjetas de red (generalmente una viene incluida en la motherboard) FastEthernet
4- Un patchcord cruzado RJ45 y uno recto, el cruzado para conectar con el router y el otro hacia el switch.

El router y el switch los pueden configurar como quieran, aqui esta el ejemplo de como están los puertos relevantes en equipos cisco con ios 12.x:

Router:

interface GigabitEthernet0/0
ip address -IP WAN- 255.255.255.248
ip nat outside
ip virtual-reassembly
duplex auto
speed auto
media-type rj45
!
interface GigabitEthernet0/1
no ip address
duplex auto
speed auto
media-type rj45
!
interface GigabitEthernet0/1.2
description vlan internet
encapsulation dot1Q 2
ip address -IP LAN- 255.255.255.0
ip nat inside
ip virtual-reassembly

Switch:

interface FastEthernet3/1
 switchport
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface FastEthernet3/2
 switchport
 switchport access vlan 2
 switchport mode access
!
interface FastEthernet3/3
 switchport
 switchport access vlan 2
 switchport mode access

Construcción del equipo shaper

A- Fuentes y compilación de kernel, IPtables, agregar soporte para protocolos capa 7 y filtrado intermedio en iptables

Instalamos debian squeeze como siempre, luego cuando ya tengamos acceso a la línea de comando descargamos las herramientas de compilación:

aptitude install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential patch time checkinstall

Luego el fuente del kernel:

cd /usr/src 
apt-get source linux-image-2.6.32-5-amd64
ln -s /usr/src/linux-2.6-2.6.32 /usr/src/linux

Parcheamos el kernel para que soporte capa 7 en netfilter:

cd /usr/src/linux 
wget --no-check-certificate  https://dev.openwrt.org/export/18900/trunk/target/linux/generic-2.6/patches-2.6.32/100-netfilter_layer7_2.21.patch 
patch -p1 < 100-netfilter_layer7_2.21.patch

Si vamos a filtrar usando iptables necesitamos también el parche para imq (intermediate queuein):

cd /usr/src/linux
wget http://www.linuximq.net/patches/linux-2.6.32-imq-test2.diff
patch  -p1 < linux-2.6.32-imq-test2.diff

Configuración del kernel antes de iniciar la compilación:

cd /usr/src/linux 
cp /boot/config-2.6.32-5-amd64 .config
perl -pi -e 's/CONFIG_VT6656=m/CONFIG_VT6656=n/g' .config # Este driver da problemas
make menuconfig

Activamos imq:

Device Drivers  ---> 
 -*- Network device support  ---> 
      IMQ (intermediate queueing device) support 
     IMQ behavior (PRE/POSTROUTING) (IMQ AB)  ---> 
       (X) IMQ AB 
     (16)    Number of IMQ devices

Y layer 7:

-*- Networking support  ---> 
     Networking options  ---> 
     [*] Network packet filtering framework (Netfilter)  ---> 
       Core Netfilter Configuration  ---> 
        Netfilter connection tracking support 
        "layer7" match support

Antes de compilar el kernel descargamos el source de iptables, ya que la versión incluida en debian squeeze no soporta los parches de imq, descargamos la versión 1.4.10 (squeeze trae 1.4.8)

cd /usr/src
wget -c ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.10.tar.bz2
tar -xvf iptables-1.4.10.tar.bz2
ln -s  iptables-1.4.10 iptables

Parcheamos iptables para soportar imq

cd /usr/src/iptables
wget http://www.linuximq.net/patches/iptables-1.4.10-imq.patch
patch -p1 < iptables-1.4.10-imq.patch

Ahora descargamos el parche para layer 7 en iptables

wget http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz
tar -zxvf netfilter-layer7-v2.22.tar.gz

Ahora a copiar las extensiones

cp /tmp/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* /usr/src/iptables/extensions/

Y copiar el archivo parcheado del kernel para iptables

cp /usr/src/linux/include/linux/netfilter/xt_layer7.h /usr/src/iptables/extensions/

Ahora con las fuentes ya preparadas podemos compilar, el kernel se compila primero:

cd /usr/src/linux
fakeroot time make-kpkg --initrd --append_to_version=-layer7-imq-amd64 linux-image

Una ves terminado instalamos con dpkg los paquetes creados por make-kpkg

cd /usr/src
dpkg -i *.deb  #asumiendo que solo los paquetes del kernel se encuentren ahi

Ahora compilamos iptables:

cd /usr/src/iptables
./configure --with-ksource=/usr/src/linux --prefix=/usr --with-xtlibdir=/lib/xtables --libdir=/lib --enable-libipq --enable-devel
make
checkinstall

Descargamos los protocolos para layer 7

cd /tmp
wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2009-05-28.tar.gz
tar -zxvf l7-protocols-2009-05-28.tar.gz 
mv l7-protocols-2009-05-28 /etc/l7-protocols

Ahora instalamos las extensiones xtables de squeeze

apt-get install xtables-addons-common

Luego de todo esto reiniciamos la computadora y probamos que los módulos estén instalados y funcionando:

modprobe imq
iptables  -m layer7 --help
iptables -m ipp2p --help

B-Stack Lamp e instalación de mastershaper

Ahora que todo ha funcionado es tiempo de instalar mastershaper, primero instalamos el stack LAMP.

aptitude install php5 php5-mysql libapache2-mod-php5 apache2 mysql-server mysql-client phpmyadmin

Seguimos los pasos de la instalación e introducimos la contraseña del root de mysql, ahora descargamos mastershaper propiamente dicho:

cd /tmp
wget -c http://www.mastershaper.org/files/mastershaper_0.44.tar.bz2
mkdir shaper
cd shaper
tar -xvf ../mastershaper_0.44.tar.bz2

Creamos una base de datos para mastershaper y un usuario en mysql, con phpmyadmin o con comando:

CREATE DATABASE shaper_db;
USE shaper_db;
GRANT ALL ON shaper_db.* to shaperuser@localhost IDENTIFIED BY 'inserte contraseña aqui';

Instalar mastershaper en el document root de apache (normalmente /var/www)

cd /tmp
cp -r shaper /var/www/

Ahora podemos acceder desde el navegador al shaper con http://ip-del-shaper/shaper o http://localhost/shaper si entramos desde la misma pc.

Instalamos los módulos ip de php-pear para que mastershaper pueda manejar los comandos de red.

pear install DB Net_IPv4

Descargamos jpgraph para obtener estadísticas de red (en el menu monitoring de mastershaper)

cd /var/www/shaper/
wget -c http://jpgraph.net/download/download.php?p=5
mv download.php?p=5 jpgraph.tar.gz
tar -xvf jpgraph.tar.gz
mv jpgraph-version/ jpgraph/

Descargamos también phplayersmenu de la misma forma:

cd /var/www/shaper/
wget -c  http://downloads.sourceforge.net/project/phplayersmenu/phplayersmenu-devel/3.2.0-rc/phplayersmenu-3.2.0-rc.tar.gz
tar -xvf phplayersmenu-3.2.0-rc.tar.gz
mv phplayersmenu-3.2.0-rc/ phplayersmenu/

C- Configuración

Ingresamos a http://localhost/shaper (o a remotamente en http://dirección-del-shaper/shaper) y llenamos los campos de configuración, agrego el screenshot de la configuración para que se den una idea:

Esta es la ventana de configuración central, denle click a la imagen por que el blog aun no soporta telescopio

Esta es la ventana de configuración central, denle click a la imagen por que el blog aun no soporta telescopio

Si queremos soporte para IMQ entonces debemos generar las interfaces necesarias para que iptables pueda modificar el tráfico.

ip link set imq0 up
ip link set imq1 up

iptables -t mangle -I PREROUTING -i ${EXT_DEV} -j IMQ --todev 0
iptables -t mangle -I POSTROUTING -o ${EXT_DEV} -j IMQ --todev 1

EXT_DEV es la interfás donde se quiere manipular el tráfico (salida solamente, si se quiere manipular solo ancho de banda o protocolos no es necesario IMQ)

Como mastershaper necesita poder utilizar iptables y tc (comandos solo para root) hay que darle poderes de sudo, pero solo para procesos de shaping y evitar que php pueda acceder a root, en debian y ubuntu existe el comando “visudo” para editar /etc/sudoers (en cualquier otro GNU/Linux se permite editar directamente) y agregamos lo siguiente:

www-data ALL= NOPASSWD: /var/www/shaper/shaper_loader.sh

Asumiendo que el shaper corra con el usuario www-data (lo normal en debian) y que la carpeta del shaper este en /var/www.

Luego deben revisar si no pueden descargar desde el navegador el archivo “config.dat” (http://server/shaper/config.dat), en el .tar del shaper debería venir un .htaccess para evitar su lectura y descarga, si apache no reconoce el .htaccess en esa carpeta hay que cambiar la directiva “AllowOverride” en /etc/apache2/sites-available/default.

D – Vlans

Este paso es OPCIONAL para gente que no tenga vlans configuradas en su red, en mi caso necesito hacer shaping en las vlans 2 y 3, como verán mas adelante mastershaper no fue diseñado para ver vlans, solo interfaces físicas y lógicas por lo cual tuve que montar 2 carpetas shaper (localhost/shaper y localhost/shaper2) para poder hacer cambios en ambas, ustedes pueden solventar este problema como mejor les parece (virtualización por ejemplo).
La vlan3 esta deshabilitada en la muestra de cisco y no la agregue en el ejemplo siguiente

Instalación de vlan en GNU/Linux

Como mi shaper se usará en modo bridge (transparente) necesitaremos bridge utils, y el paquete “vlan” para poder usar vlans.

aptitude install vlan bridge-utils

Luego modificamos de esta manera nuestro /etc/network/interfaces

ADVERTENCIA – Si estás configurando el shaper desde un equipo remoto puede que pierdas acceso al shaper, revisa que tengas acceso físico al equipo para realizar este paso –

vi /etc/network/interfaces
# Fisica PCI
auto eth0
iface eth0 inet manual

# Fisica integrada
auto eth1
iface eth1 inet manual

# VLAN2
auto eth0.2
iface eth0.2 inet manual

auto eth1.2
iface eth1.2 inet manual

#Bridge VLAN2
auto br0
iface br0 inet static
        bridge_ports eth0.2 eth1.2
        bridge_stp      off
        bridge_maxwait  0
        bridge_fd       0

        address 192.168.30.3
        broadcast 192.168.30.255
        netmask   255.255.255.0
        gateway 192.168.30.1

Pasare a explicarles este desastre, primero pasamos las interfaces físicas (las tarjetas de red eth0 y eth1) a modo manual sin IP, luego configuramos subinterfaces para cada una en la vlan correspondiente (eth”interfás”.”vlan”) y luego las unimos en una interfáz puente con ip para acceso remoto (los equipos conectados físicamente por el no lo verán como un salto de red).

Una ves se tenga todo listo pasamos a iniciar esta configuración, asegurense de tener una forma de revertirlo en caso de que no funcione por cualquier razón.

ifdown eth0 && ifdown eth1 && ifup br0

Si pudieron pasar por esto y pudieron acceder remotamente a la ip configurada en la interfáz puente entonces la configuración es correcta.

E-Habilitando shaper

Regresamos a la ventana del navegador (ya con la ip de la interfáz puente) y nos vamos al menu de la izquierda, en “settings->Options” se nos preguntara:

  • Ancho de banda de bajada y subida (este es el ancho de banda total disponible) en kbit/s
  • Interfaces de entrada (en mi caso eth0.2) y de salida (eth1.2)
  • Activar IMQ (solo si hemos configurado IMQ y si vamos a hacer shaping de trafico entrante), no necesario si solo se limitara ancho de banda.
  • ACK packets: prioridad para paquetes ACK (respuesta) y otros paquetes pequeños normalmente utilizados por los protocolos de transporte como señalizadores o respuesta de peticiones
  • Disciplina de cola: este es un poco complicado pero lo pondré asi: la mayoría de las personas usarán HTB (Hierarchical Token Bucket) que trabaja dandole prioridad (definida en la configuración de “Service Levels” del shaper) y distintos valores de ancho de banda dinamico dependiendo del estado de saturación del enlace. Si tenemos un servidor que requiere tráfico en tiempo real, como por ejemplo streaming de video/audio, VoIP/Videoconferencia es mejor utilizar HFSC (Hierarchical Fair Service Curve) que define prioridades de servicio en tiempo real, y CBQ (Class Based queueing) que es parecido a HTB pero con limites duros sin variación en los anchos de banda, es como el abuelo del qos en GNU/Linux.
  • Filtro de tráfico, esto es dependiendo de que quieren hacer, si solo se quiere limitar ancho de banda o hacer qos basado en IP, tc-filter bastara (gasta menos recursos), si necesitan hacer qos mas avanzado basado en protocolos o en mac entonces necesitarán Iptables.
  • Modo: El shaper puede ser un router (actuar como gateway) o bridge (transparente sin ser un salto de red), en mi caso lo hice bridge ya que el routing lo estamos haciendo en el equipo cisco y no queremos que sea accesible fuera de la vlan.
  • Autenticación: para manejar usuarios y contraseñas y añadir seguridad al shaper, esto es necesario para que si algún usuario logra acceder al shaper no pueda cambiar el ancho de banda o jugar con la configuración Advertencia Debes crear cuentas de usuario ANTES de activar la autenticación.

Luego de todas estas desiciones guardamos los cambios y comenzamos a manejar nuestro ancho de banda.

La documentación sobre mastershaper esta en este sitio:

Sitio mastershaper
Howtos y ejemplos para usar mastershaper

Y como cuando escribí esto el sitio estaba caido subo mi copia de la documentación:
MasterShaper_documentation

Espero que les haya servido, este proyecto me llevó mucho tiempo pero ya está en producción, puede que iptables no funcione como debería, pero los parches funcionan aún, wheezy trae el kernel 3.2 el cual ya no es soportado por mastershaper 0.44, se está desarrollando la versión 0.66 pero no he logrado conseguirla (no dan links de git o tar para descargar) esta nueva implementación funciona en kernel 3.x y sin necesidad de parchear iptables (segun los comentarios del foro) así que cuando logre conseguir una nueva versión o un sustituto para mastershaper (claro también libre) escribiré otro howto.

Fuentes

mensaje 2741 foro de mastershaper en inglés
Documentación de mastershaper y los ejemplos del sitio (links al final de la sección E)

Anuncios
Estándar
informatica, planet

Xterm, La terminal “minima”??

Xterm es la terminal por defecto incluída en la mayoría de distribuciones y la terminal de Xorg, la conocemos como una “pantallita negra con una fuente diminuta”, para ejemplo les pongo la xterm por defecto:

xterm cruda

xterm cruda

Como pueden ver es una terminal con letra pequeñisima (miniatura, si la estas viendo en una netbook necesitas una lupa o al hubble), se puede cambiar en el momento con el menu de control+click derecho.

Para configurar esta terminal tan pequeña es necesario escribir en un archivo llamado ~/.Xresources, que aunque no es exclusivo del xterm es la mejor forma de configurarlo.

Primero creamos el archivo con una terminal o lo abrimos con gedit  o tu editor de texto por defecto:

editor .Xresources

y ponemos un par de líneas de ejemplo:

XTerm*Background: Black
XTerm*Foreground: White

Esto lo que hace es (obviamente) definir el color de background y de foreground de xterm (fondo y color de letra). Si las fuentes miniatura son un problema entonces puedes agregar esto a tu .Xresources:

XTerm*faceName: DejaVu Sans Mono:pixelsize=12

Si tienen instalada la tipografía DejaVu (si usas una distribucion linux es muy posible que ya la tengas), ahora te preguntaras ¿puedo usar fuentes XFT en  xterm?

Si, si puedes, solo tienes que especificarlo.

Xterm no incluye la funcion de pestañas que si tienen otras terminales, mas que todo por que fue diseñada como aplicacion Unix (hacer una cosa y hacerla bien), pero podemos tener pestañas si combinamos xterm con otra herramienta Unix, GNU-screen.

Primero instalen screen:

apt-get install screen

Luego creamos un archivo .screenrc para que screen nos permita visualizar mejor como funciona:

vbell off                             # Que suene en lugar de mostrar aviso visual
startup_message off          # Que no muestre la pantalla de bienvenida
hardstatus alwayslastline
attrcolor b ".I"                   # Permitir colores intensos (bold)
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' # AB=background, AF=foreground
defbce "on"
term screen-256color         #permitir 256 colores aprovechable por vim y mutt
maptimeout 0
defc1 off

Luego guardamos el archivo y para iniciarlo podemos hacerlo con xterm -e screen o scribir screen dentro de la xterm ya abierta.
el resultado es este:

xterm con modificaciones

xterm con modificaciones

Micro man de screen

Ctrl+a c “Control y a al mismo tiempo y luego c”: crear nueva pestaña
Ctrl+a A : Cambiar nombre de pestaña
Ctrl+Space o barra de espacio: pasar a la pestaña siguiente
Ctrl+bkspc: Retroceder a la pestaña de la izquierda (si es la primera pasa a la ultima)

Para cerrar pestañas solo das el comando exit en la que desees cerrar

Para cargar los cambios al .Xresources sin reiniciar la sesion damos este comando y listo:

xrdb -merge .Xresources

#fin

Estándar
#slave, /me, informatica, laptop, planet

Awesome WM (Window Manager)

Awesome window manager es el que uso actualmente para trabajar y para no-trabajar :p, es un tiling window manager o gestor de ventanas en mosaico, lo que permite tener automaticamente ordenadas las ventanas (clientes) en la pantalla ademas de aprovechar el espacio real de esta.

mi propio screenshot :p

mi propio screenshot :p


Awesome esta disponible en debian lenny en su version 2.1 y en debian unstable en su version 3.2-rc1, tiene las siguientes caracteristicas y no-caracteristicas:

-Ligero, es uno de los window manager mas pequeños en disco y memoria
-Rápido, usa las librerias XCB en lugar de las Xlibs por lo que es mas veloz que otros
-Estable, no se “truena” con el uso diario

-Soporte de Systray, las aplicaciones que usan esta caracteristica pueden anclarse (pidgin, liferea)
-Capacidad de ampliacion con widgets
-Puede usarse sin intervencion del mouse.

Para instalar:

#apt-get install awesome

Opcionales:

-rxvt-unicode : Terminal ligera con soporte de transparencia
-moc : Music on console un reproductor de musica desde terminal
-alsamixer: para manejar el volumen
-htop: Para medir la actividad del sistema
-pcmanfm: Gestor de archivos
-rox-filler: Otro gestor de archivos mas pequeño que pcmanfm

Uso:
Los atajos de teclado basicos son:
(Mod4 es la infame banderita en la mayoría de los casos [notese que los usuarios de awesome la usamos aun mas que los propios usuarios de win2 :p, ademas contribuimos a desteñirla de la tecla])

Mod4+F1(awesome 3, en la version 2 es F2): abre el runner escribimos parte de un comando y lo ejecuta, mucho mas veloz que un menu para abrir las aplicaciones, solo debemos saber el comando, (maneja un interprete de bash asi que cosas como export OOO_FORCE_DESKTOP=Gnome && oocalc son ejecutadas)

Mod4+Enter: Abre una terminal (update-alternatives –config x-terminal-emulator para elegir cual, default=xterm)

Mod4+Flecha ‘->’ nos movemos al siguiente tag

Mod4+Barra_espaciadora: cambia el layout (forma en que las ventanas estan ordenadas);

para mas info usen ‘man awesome’

configuracion:

Awesome en su estado default solo trae la estatus bar y un fondo de escritorio gris, todo esto puede ser
configurado desde el archivo ~/.config/awesome/rc.lua el cual al principio no existe pero pueden copiar directamente de /etc/xdg/awesome/rc.lua.

Pueden iniciar con las configuraciones mostradas aqui:

Awesome en esDebian

Estándar
informatica, laptop, planet

Canon PIXMA IP1800 en debian lenny (32 bits)

Bueno, aparezco para revivir el blog luego de una gran ausencia (me tuvieron que recordar que tenia blog XD) y vengo a poner una guia de como instalar la canon pixma IP1800 en debian, he visto muchos otros tutos que hay en internet, pero se aplican a ubuntu (versiones antiguas) y ya no aplican a debian, aqui esta lo que se necesita para hacerla funcionar:

1-Ingredientes:
apt-get install lo siguiente:
-cups
-foomatic-db
-gutenprint
-un navegador web.
-alien

####Edicion 12-02-09 #######
Las dependencias de los paquetes ya convertidos son estas:
apt-get install libc6 libcupsys2 libgtk1.2

2- Paso 1: bajarse el driver de la pagina de canon (rpm)
cnjbfilter-1800series.rpm
cnjbfilter-common.rpm

3- Instalar drivers
Primero generamos los debs para poder instalar con dpkg

alien -kc cnijfilter-common-2.70-1.i386.rpm
alien -kc cnijfilter-ip1800series-2.70-1.i386.rpm

luego instalamos los debs resultantes:

dpkg -i *.deb

4-Instalar la impresora:
Ahora entramos en la configuracion de cups, conectamos nuestra impresora al port de usb y luego vamos al navegador web y ponemos esta direccion:

http://localhost:631/

Esa es la direccion del servidor cups con el cual instalaremos la impresora, (esta forma es independiente del entorno de escritorio y del window manager).

Damos click al boton de “añadir impresora” y luego se nos preguntara el nombre, lugar y descripcion de la impresora (pueden poner lo que quieran aqui).

Luego nos preguntara cual es el tipo de impresora, veran (si se instalo correctamente el driver) que ya sale una etiqueta con el nombre de la impresora, la seleccionamos y vamos al fabricante “canon”, luego al driver “Canon IP1800” y luego de esto nos pedira el user y contraseña “root y la pass de root” luego si todo funciono dira que la impresora ha sido agregada y podran probar imprimiendo la pagina de prueba.

Por el momento no hay un driver para amd64, y este servidor no ha intentado instalarla de ese modo (:p) asi que por momento esta impresora solo puede funcionar en 32 bits (si alguien ya la ha instalado en amd64 favor deje su comentario).

Estándar