Bridge IPv6 con OpenVPN, primera parte
Tras tener olvidado durante un tiempo IPv6 ayer volví a conectar las estaciones y portátiles que tenemos en el trabajo con este protocolo a través del servicio de go6. La necesidad de usar IPv6 es para empezar a experimentar en el funcionamiento de la señalización SIP y transporte RTP para sesiones de audio y video. Una de las premisas fundamentales era que siempre se dispusiera de la misma dirección IPv(4|6) independientemente de que uno se encontrara en la LAN o en la VPN. Lo que viene a continuación es una guía básica de como ponerlo en funcionamiento sin entrar en detalle de como funciona y las diferentes opciones de las que disponemos.
Bien, lo primero que deberíamos tener funcionando es un concentrador con OpenVPN que se dedique a repartir direccionamiento fijo o dinámico a cualquier usuario que disponga de las claves y certificados correspondientes. Los scripts de ejemplo que acompañan al paquete y los documentos disponibles en openvpn.org son bastante claros y no debería suponer mayor problema para cualquiera que sepa algo de redes en entornos UNIX/Linux.
Una vez tenemos lo anterior funcionando es hora de montar el bridge así que a continuación pego la configuración básica del servidor OpenVPN en el que habrá un bridge con dos interfaces, una la pata de la LAN y otra la pata de la VPN:
apardo@debaser:/etc/openvpn$ cat server.conf port 1194 proto udp dev tap0 tls-auth keys/ta.key 0 dh keys/dh1024.pem ca keys/ca.crt cert keys/server.crt key keys/server.key server-bridge 192.168.23.30 255.255.255.224 192.168.23.2 192.168.23.29 ifconfig-pool-persist ipp.txt # Inyectamos rutas a los clientes push "route 192.168.23.32 255.255.255.224" keepalive 10 120 comp-lzo user nobody group nogroup persist-tun persist-key verb 3
Lo siguiente que necesitamos es crear el bridge antes de levantar el demonio de OpenVPN y destruirlo cuando lo matamos. La solución más sencilla es incluir las dos llamadas a los shell scripts desde las funciones start_vpn() y stop_vpn() del script /etc/init.d/openvpn. Por ejemplo
start_vpn () {
# Iniciar el bridge
/usr/local/bin/bridge-start 2> /dev/null
if grep -q '^[ ]*daemon' $CONFIG_DIR/$NAME.conf ; then
# daemon already given in config file
DAEMONARG=
else
...
stop_vpn () {
kill `cat $PIDFILE` || true
rm $PIDFILE
rm -f /var/run/openvpn.$NAME.status 2> /dev/null
# Parar el bridge
/usr/local/bin/bridge-stop 2> /dev/null
}
Los scripts para el bridge son muy sencillos, es necesario tener instaladas las bridge-utils.
apardo@debaser:~$ cat /usr/local/bin/bridge-start #!/bin/sh br="br0" tap="tap0" eth="eth0" eth_ip="192.168.230.30/27" for t in $tap; do openvpn --mktun --dev $t done brctl addbr $br brctl addif $br $eth for t in $tap; do brctl addif $br $t done for t in $tap; do ip link set $t up promisc on done ip link set $eth up promisc on ip addr add $eth_ip dev $br
apardo@debaser:~$ cat /usr/local/bin/bridge-stop #!/bin/sh br="br0" tap="tap0" ip link set $br down brctl delbr $br for t in $tap; do openvpn --rmtun --dev $t done
En este punto ya tenemos configurado el servidor de túneles que fusiona el direccionamiento de la LAN con el de la VPN. Mañana veremos como configurar los clientes y como añadir el soporte para IPv6 el protocolo que parece que nunca llegará, si no vas a por él claro…
August 31st, 2007 at 8:10
[…] Como hoy me encuentro inspirando, y Saúl me recordó el otro día que tenía algo pendiente, vamos a completar la historia que iniciamos el otro día. […]