sábado, 20 de marzo de 2010

Configurar bonding de tarjetas de red

Muchas personas no saben que existe este tipo de configuracion en la que se puede aumentar el rendimiento y seguridad en las interfaces de red en nuestros servidores linux bueno eso hace bonding por nosotros y muchas cosas mas bien manos a la obra.

Instalamos los paquetes necesarios

aptitude install ifenslave

Antes de empesar a configurar o acer algo es importante saber los tipos de bonding que existe y sus funciones.

- (modo 0) balance-rr: se emplea un algoritmo round robin entre la cola virtual y las de los esclavos. Es algo así como: un paquetillo para un esclavo, otro para otro esclavo, un paquetillo para un esclavo, otro para el otro... etc. Es el algoritmo que se usa por defecto.

- (modo 1) active backup: realmente no balancea la carga, usa sólo un esclavo y en caso de fallar, usa el siguiente disponible.

- (modo 2) balance-xor: emplea una formulita para decidir por qué interfaz sale: (source-MAC xor dest-MAC) mod n-slaves.

- (modo 3) broadcast: se transmite todo por todas las interfaces. Este método no balancea tampoco, pero provee tolerancia a fallos.

- (modo 4) 802.3ad: emplea algoritmos definidos en el estándar IEEE 802.3ad.

- (modo 5) balace-tbl: balancea la carga de transmisión entre los esclavos dependiendo de la velocidad de estos y de la carga total. El tráfico es recibido por un esclavo, en caso de fallar otro esclavo toma su MAC y continúa recibiendo tráfico.

- (modo 6) balance-alb: realiza el balanceo anterior además de un balanceo también en la recepción. Este método debe modificar las MAC de los esclavos estando las tarjetas activas, esto debe estar soportado por el driver para poder usar este método.

Aunque todo esto parezca muy bonito, hay que tener en cuenta una cosa: algunos métodos necesitan ciertas configuraciones/capacidades en el switch al que estés conectados los esclavos. Ah! se me olvidaba: si el switch tiene un único link de salida a la red y va a la misma velocidad que nuestros esclavos, el balanceo se hace inútil ya que se produce un cuello de botella en el link de salida del switch.

Tipos de bonding que necesitan configuraciones especiales de los switch

Los modos 1, 5 y 6 no requiere ninguna configuración especial en el switch, ideales si no tenemos acceso a la configuración del equipamiento de red .

El modo 4 requiere que el switch tenga los puertos donde conectamos los esclavos en modo 802.3ad aggregation. Esto depende de cada switch, por ejemplo, en los switch's de Cisco esta capacidad se llama EtherChannel y debe estar en modo lacp.

Por último, los modos 0, 2 y 3 generalmente requiere poder agrupar puertos. Las nomenclaturas de estos grupos dependen del fabricante del switch, como hemos dicho antes, Cisco llama a estas agrupaciones EtherChannel, también se usa trunk group.

Ya con esto podemos empesar a configurar nuestro bonding.

En este ejemplo utilizaremos las interfaces eth0, eth1.

Editamos el archivo /etc/network/interfaces y agregamos lo siguiente

iface bond0 inet static
address 10.0.1.5
netmask 255.255.255.0
network 10.0.1.0
gateway 10.0.1.254
bond_mode 802.3.ad
bond_miimon 100
bond_downdelay 200
bond_updelay 200
slaves eth0 eth1

mode: modo de funcionamiento elegido.
miimon: tiempo en mseg entre chequeos de las interfaces.
downdelay: tiempo para considerar caído una interfaz.
updelay: tiempo para considerar levantada una interfaz.

Otra manera de configurar el bondig en debian es la siguiente

Editamos el archivo /etc/modprobe.d/aliases y le agregamos lo siguiente

alias eth0 e100
alias eth1 e100
alias bond0 bonding
options bonding mode=5 miimon=100

Y configuramos en /etc/network/interfaces

auto bond0
iface bond0 inet static
address 172.31.0.3
netmask 255.255.252.0
broadcast 172.31.3.255
gateway 172.31.0.1
slaves eth0 eth1

Ya con esto tenemos el bonding configurado en nuestro servidor pero como se habran dado cuenta en el ejeplo pongo bonding 4 el cual necesita configurar el switch de manera especial aqui les dejo como se configura el switch.

switch(config)#interface range fastethernet 0/1 - 3
switch(config-if-range)#channel-protocol lacp
switch(config-if-range)#channel-group 1 mode active
switch(config)#port-channel load-balance src-dst-mac

Ya con esto tenemos nuestro switch y servidor configurado para usar bonding solo resta reiniciar el servidor y listo.

OpenVPN en debian Lenny

Tenia mucho tiempo que no publicaba algo y aqui estoy de nuevo un tuto de como configurar una vpn con openvpn punto a punto.

OpenVPN es una implementacion de VPN SSL la cual usa las extenciones OSI capa 2 o 3 para asegurar redes la cual usa los protocolos SSL/TLS, soporta diferentes medios de autenticacion como certificados, smart cards, y/o usuarios/contraseñas, y permite politicas de control de acceso para usuarios o grupos usando reglas de firewall aplicadas a las interfaces virtuales de la VPN. OpenVPN 2.0 permite multiples clientes conectar a un solo servidor (proceso) OpenVPN sobre un simple puerto TCP o UDP.

Porque surgen las VPNs

● Intercambio flexible, rápido y seguro de información.
● Sucursales en diferentes ubicaciones.
● Trabajadores remotos.
● Necesidad de altos estándares de seguridad: autenticidad, integridad, y disponibilidad.

Arquitecturas básicas

Acceso Remoto (Roadwarrior):

Usuarios que se conectan de manera remota utilizando Internet como vía de acceso.

Punto a Punto:

Conexión entre diversos puntos de una Organización a través de Internet.

Interna VLAN:

Utiliza la LAN de la organización como vía de acceso. Sirve para aislar zonas y servicios de la red interna.

Instalamos OpenVPN

aptitude install openvpn openssl liblzo1

cp -a /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

cd /etc/openvpn/easy-rsa/2.0/

. ./vars
./clean-all
./build-ca

Con esto lo que hemos echo es:

* Inicializar variables de ambiente para poder trabajar con los siguientes scripts de shell para generar las variables.
* Inicializamos el directorio de las claves (borrando potenciales archivos viejos).
* build-ca: procedemos a generar el certificado CA.

Deberemos ingresar los datos de la Organización reales (para ser prolijos) y teniendo especial atención en el parámetro Common Name el cual deberá ser distinto para el caso de la CA, Servidor y los Clientes.

Generamos las credenciales para el Servidor

./build-key-server servidor

Nuevamamente debemos repetir los datos ingresados anteriormente, recordando utilizar una denominación diferente de la que usamos para la CA (en el paso anterior).

Generamos las credenciales de los Clientes

./build-key cliente1

Esto genera los archivos cliente1.key (llave) y cliente1.crt (certificado).

Creamos los parámetros Diffie-Hellman:

./build-dh

Copiamos las credenciales del Servidor en /etc/openvpn/

cp -R ca.crt ca.key servidor.crt servidor.key dh1024.pem /etc/openvpn/

servidor.crt y servidor.key depende del Common Name que elejimos cuando creamos las credenciales para el servidor.

Pasamos las credenciales a los clientes

Estos archivos son cliente1.crt, cliente1.key y ca.crt, se los podemos pasar vía sftp o scp, pero siempre tratando de que sea seguro.

los archivos cliente1.crt y cliente1.key dependen del Common Name que ingresamos cuando creamos las credenciales de los clientes.

Creamos la configuración del Servidor OpenVPN

vim /etc/openvpn/server.conf

port 1194
proto udp
dev tun
persist-tun
ca ca.crt
cert servidor.crt
key servidor.key
dh dh1024.pem

#Direcciones que se asignaran a los
#clientes, el server es .1
server 10.1.1.0 255.255.255.0

ifconfig-pool-persist ipp.txt

#Ruta para que los clientes alcancen la red local del server (1.0/24)
push “route 192.168.1.0 255.255.255.0″

#Para que los clientes se visualicen entre ellos
#Debe ir junto con la opción routeback en el shorewall
client-to-client

keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 4

Nota: La red local de la VPN es 192.168.1.0/24 y la red de la VPN es 10.1.1.0/24. El usuario remoto, si está detrás de un NAT debe tener una dirección local no perteneciente a la red de la VPN.

Ejecutamos el servicio OpenVPN en el servidor:

/etc/init.d/openvpn restart

Configuramos el cliente

Dentro de la carpeta c:\archivos de programa\openvpn\config creamos un archivo llamado cliente1.ovpn.

tls-client
client
dev tun
proto udp
remote host.dominio.com
float #debido a que la IP de arriba es dinamica
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert cliente1.crt
key cliente1.key
comp-lzo
verb 4

Nota: Copiar dentro de esta misma carpeta donde esta el archivo cliente1.ovpn ojos solo los archivos cliente.crt, cliente.key y ca.crt.

Nos conectamos desde el cliente (Windows)

- Ejecutamos el GUI de OpenVPN
- Clic derecho en el ícono de OpenVPN, elegimos cliente (es el nombre del archivo con extensión .ovpn) y luego connect.