Cosas varias, tecnología y familia.... y descargos de la pega

martes, 21 de abril de 2009

Tech: VLAN Bridge Tunneling (VPN) - Linux

Hace poco se me presentó la necesidad de crear una VPN en capa 2 (enlace), es decir una VPN que funcione como bridge, que además pueda pasar jumboframes (VLAN TRUNKING), Es decir una troncal con VLANs.

En un comienzo pensé en hacerlo como un tunnel GRE, sin embargo para que GRE tenga soporte de bridge en linux hay que recompilar un montón de cosas, y estaba buscando simplicidad.

Opté entonces por ocupar el módulo TUN/TAP para el cual TAP funciona como una interface virtual de capa 2, justo lo que andaba buscando.

Aunque quería hacerlo en forma de linea de comando como se hace con los túneles IPIP, GRE y otros, la verdad es que no encontré el como, asi es que ocupé una solución demoníaca externa AKA, un demonio de VPN.

TUN/TAP es ocupado por varios paquetes de soluciones VPN y muchas otras soluciones de virtualización para crear túneles de capa 2 o 3. Entre los paquetes de VPN, con los que ya había trabajado anteriormente, están OpenVpn y VTUN. Ocupé VTUN que es mucho más fácil de trabajar mas simple y mucho mas liviano, y si fuera necesario también encripta y comprime.

De como se hace... siga leyendo

Bueno lo primero es hacerse del paquete, lo pueden encontrar en vtun homepage y muchas distros los traen en sus repos.-

Después de compilar/instalar ->

Carguen el módulo en el kernel (vean la docu de su distro para dejarlo autoiniciado)

modprobe tun

Revisen vía dmesg o vean si aparece en /dev/net/tun.
Como VTUN trabaja en modo cliente/servidor, deben tener cosas similares en ambas máquinas.

En el server, dejen todo lo que viene por defecto y agreguen el siguiente perfil (bueno sería que borraran los otros)

Tunnel {
passwd tu_password; # Password
type ether; # Ethernet tunnel
device tap0; # Device tap0
proto udp; # UDP protocol
# compress lzo:1; # LZO compression level 1
# encrypt yes; # Encryption
stat yes; # Log connection statistic
keepalive yes; # Keep connection alive

up {
# Connection is Up

# Assign IP address
# ifconfig "%% 10.1.0.1 netmask 255.255.255.0";
ifconfig "%% up"
# No es necesario agregar una IP, ya que se va a agregar a un bridge

# Add route to net 10.2.0.0/24
# route "add -net 10.2.0.0 netmask 255.255.255.0 gw 10.1.0.2";
# No es necesario agregar rutas

# Enable masquerading for net 10.2.0.0.0/24
# firewall "-A FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
# y Absolutamente inecesario un firewall
};

down {
# Connection is Down

# Shutdown tap device.
ifconfig "%% down";

# Disable masquerading for net 10.2.0.0.0/24
# firewall "-D FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
};
}

En el Cliente de modo similar agregamos el siguiente perfil

Tunnel {
passwd tu_passwrd; # Password
type ether; # Ethernet tunnel
device tap0; # Device tap0
proto udp; # UDP protocol
# compress lzo:1; # LZO compression level 1
# encrypt yes; # Encryption
stat yes; # Log connection statistic
keepalive yes; # Keep connection alive

up {
# Connection is Up

# Assign IP address
ifconfig "%% up";

# Add route to net 10.2.0.0/24
# route "add -net 10.2.0.0 netmask 255.255.255.0 gw 10.1.0.2";

# Enable masquerading for net 10.2.0.0.0/24
# firewall "-A FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
};

down {
# Connection is Down

# Shutdown tap device.
ifconfig "%% down";

# Disable masquerading for net 10.2.0.0.0/24
# firewall "-D FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
};
}


Al igual que el anterior, se pueden dar direcciones IP y rutas, pero para nuestro caso no es necesario. Los dejé a la vista, pero comentados

Una ves terminadas las configuraciones se debe levantar el tunnel

En el Server (los [...] son opcionales para especificar cual archivo ocupar)

vtund -s [-f /etc/vtund/vtind.conf]

En el cliente

vtund Tunnel

Una ves conectados asegúrense que las interfaces estén UP

Posteriormente en el Server, creamos el bridge

brctl addbr br0
brctl addif br0 eth1 #La Interfaz VLAN TRUNKING
brctl addif br0 tap0 #La interfaz virtual
ifconfig br0 up #Asegúrate que las otras 2 interfaces esten UP

y en el cliente hacemos lo mismo según corresponda(tap0 puede cambiar a tap1 y eth1 puede no ser tu troncal ;) )

Ahora que el bridge está UP podemos crear una interfaz vlan/virtual para revisar estado y administrar inline, y listo, hemos teminado nuestro tunnel bridge con soporte VLAN.

Ciao!!!

Counter