OpenVPN
Contents
Configuración incluida en Obelisco
La siguiente configuración experimental se encuentra incluida en Obelisco, con el objetivo de crear túneles a través de Internet entre los AP/Nodos que se encuentren aislados o sin posibilidad de enlazar de forma inalámbrica con alguno, de forma temporal hasta que puedan lograr un enlace.
Si bien no se encuentra habilitado el servicio por defecto, se desalienta la utilización del mismo en entornos productivos porque dado que las configuraciones detalladas a continuación no cuentan con restricciones de seguridad (como autenticación, encriptación, etc) suficientes y necesarias para utilizar estos ejemplos fuera de la experimentación en BuenosAiresLibre.
Características
Configuración simple de OpenVPN, basada en la información obtenida de la documentación del proyecto: http://openvpn.net/.
Esta configuración genera un túnel entre un equipo denominado server y otro cliente.
- Se asume que el extremo server está directamente conectado a Internet.
- Para evitar que esta configuración interfiera con otras, como la que se describe en esta página, no utiliza el puerto por defecto de OpenVPN, y en cambio utiliza el puerto 1195, UDP.
- Utiliza las interfaces tap, que permiten el intercambio de broadcasts entre ambos extremos. Útil para el correcto funcionamiento de OLSR.
- No utiliza cifrado, lo que implica que cualquier que conozca la configuración, se puede conectar.
Para los enlaces punto a punto (túneles VPN incluidos), se debe utilizar una subred de enlaces (172.16.x.x). Ver [SubredesAsignadas].
Configuración
- Mediante BALConfig se puede configurar el servicio, tanto del servidor como del cliente, de todos los parámetros necesarios para iniciar OpenVPN y abrir el firewall según corresponda.
- A continuación se detallan los archivos de configuración, útil para reproducirlos en otro equipo.
Servidor
- Archivo de configuración /etc/openvpn/server.conf
# # OpenVPN Server # # 20060628 - HernanRossetto # mode p2p proto udp verb 3 mute 5 comp-lzo keepalive 10 60 ping-timer-rem persist-tun user nobody group nogroup daemon status /var/run/openvpn-status.log
Cliente
- Archivo de configuración /etc/openvpn/client.conf
# # OpenVPN Client # # 20060628 - HernanRossetto # mode p2p proto udp nobind verb 3 mute 5 comp-lzo keepalive 10 60 ping-timer-rem persist-tun user nobody group nogroup daemon resolv-retry infinite mute-replay-warnings float
Scripts de inicio
- Mediante BALConfig se puede configurar el servicio, tanto del servidor como del cliente, de todos los parámetros necesarios para iniciar OpenVPN y abrir el firewall según corresponda.
- A continuación se detalla la forma de iniciar los servicios, útil para reproducirlo en otro equipo.
Servidor
- Básicamente, el server se debe iniciar como:
openvpn --config /etc/openvpn/server.conf --dev tap0 --port 1195 --ifconfig ${VPN0_ipaddr} ${VPN0_netmask}- Donde ${VPN0_ipaddr} se debe reemplazar por la dirección IP a utilizar en este extremo del túnel. Ejemplo: 172.16.166.33
- Luego, ${VPN0_netmask} se debe reemplazar por la máscara de red apropiada, en este ejemplo sería: 255.255.255.240.
- Resultando:
openvpn --config /etc/openvpn/server.conf --dev tap0 --port 1195 --ifconfig 172.16.166.33 255.255.255.240
Cliente
- El cliente se debe iniciar como:
openvpn --config /etc/openvpn/client.conf --dev tap1 --port 1195 --ifconfig ${VPN1_ipaddr} ${VPN1_netmask} --remote ${VPN1_remote}- Donde ${VPN0_ipaddr} se debe reemplazar por la dirección IP a utilizar en este extremo del túnel, y que como regla práctica debería ser la siguiente a la asignada del lado server. Ejemplo: 172.16.166.34
- Luego, ${VPN0_netmask} se debe reemplazar por la máscara de red apropiada, en este ejemplo sería: 255.255.255.240.
- Finalmente, ${VPN1_remote} se debe reemplazar por la dirección IP pública en Internet del extremo server. Ejemplo ficticio: 254.254.254.254
- Resultando:
openvpn --config /etc/openvpn/client.conf --dev tap1 --port 1195 --ifconfig 172.16.166.34 255.255.255.240 --remote 254.254.254.254
Probando el túnel
- Iniciar el servicio en el server.
- Verificar en syslog si levanta bien. Se verán mensajes de inicialización del servicio.
Debería crearse una nueva interfaz de red tap0, con IP 172.16.166.33.
- Iniciar el servicio del lado cliente.
- Verificar el syslog.
Debería crearse una nueva interfaz de red tap1, con IP 172.16.166.34.
- Probar el vínculo con ping a la IP del extremo server. Ejemplo:
ping 172.16.166.33
- Luego probar el vínculo con ping a alguna IP de las subredes disponibles en el extremo server. Ejemplo:
ping 10.4.1.1
- El túnel debería estar funcionando correctamente.
Configuración simple, punto a punto, cifrada
La siguiente configuración es un ejemplo que puede ser utilizado para usos personales, donde se desee crear un túnel a través de Internet entre el router que tiene instalado Obelisco y otro remoto.
Características
Configuración simple de OpenVPN, basada en OpenVPN Static Key Mini-HOWTO.
Esta configuración genera un túnel entre un equipo denominado server y otro cliente.
- Se asume que el extremo server está directamente conectado a Internet y es accesible con SSH.
- Se asume que no hay otras configuraciones de OpenVPN existentes en los dos extremos. De lo contrario esta configuración puede interferir con otra existente.
- Esta configuración utiliza el puerto por defecto de OpenVPN (1194, UDP), que tiene que estar abierto en el firewall del server.
- Utiliza las interfaces tun.
Para los enlaces punto a punto (túneles VPN incluidos), se debe utilizar una subred de enlaces (172.16.x.x). Ver [SubredesAsignadas].
- En caso de que un extremo sea Debian/Ubuntu, se puede modificar /etc/default/openvpn para que inicie automáticamente el servicio de openvpn para la configuración creada.
En tal caso modificar la línea que indica AUTOSTART, indicando allí el nombre de la configuración a iniciar, ejemplo: AUTOSTART="server-ptp1".
Configuración del Servidor
Tiene que estar activo (1) el ip forwarding en el server, para lo que el siguiente comando debe responder simplemente 1:
cat /proc/sys/net/ipv4/ip_forward
- Generar la clave estática en el servidor:
openvpn --genkey --secret server-ptp1.key
- Mover la clave a /etc/openvpn/, como root:
mv server-ptp1.key /etc/openvpn/
- Crear la configuración en el server en /etc/openvpn/server-ptp1.conf:
# Configuración OpenVPN # Extremo server para crear un túnel entre dos puntos. # # ptp1 # dev tun ifconfig 172.16.166.1 172.16.166.2 secret /etc/openvpn/server-ptp1.key comp-lzo keepalive 10 60 ping-timer-rem persist-tun persist-key user nobody group nogroup daemon
- Si no existe, crear en el server un script ejecutable para que levante el servicio en cada inicio del sistema:
echo "openvpn /etc/openvpn/server-ptp1.conf" > /etc/init.d/openvpn chmod +x /etc/init.d/openvpn
Configuración del Cliente
A continuación se mencionará IP-DEL-SERVER, que corresponderá a la IP pública (de Internet) del extremo server.
- Copiar la clave, previamente generada, al cliente. Desde el equipo cliente realizar, como root:
scp root@IP-DEL-SERVER:/etc/openvpn/server-ptp1.key /etc/openvpn/ptp1.key
- Crear la configuración en el cliente en /etc/openvpn/ptp1.conf:
# Configuración OpenVPN # Extremo cliente para crear un túnel entre dos puntos. # # ptp1 # remote IP-DEL-SERVER dev tun ifconfig 172.16.166.2 172.16.166.1 secret /etc/openvpn/ptp1.key comp-lzo keepalive 10 60 ping-timer-rem persist-tun persist-key user nobody group nogroup daemon # Agregar rutas a subredes remotas: #route 10.4.1.0 255.255.255.224
- Si no existe, crear en el cliente un script ejecutable para que levante el servicio en cada inicio del sistema:
echo "openvpn /etc/openvpn/ptp1.conf" > /etc/init.d/openvpn chmod +x /etc/init.d/openvpn
Probando el túnel
- Iniciar el servicio en el server, como root:
/etc/init.d/openvpn
- Verificar en syslog si levanta bien. Se verán mensajes de inicialización del servicio.
Debería crearse una nueva interfaz de red tun0, con IP 172.16.166.1.
- Iniciar el servicio del lado cliente:
/etc/init.d/openvpn
- Verificar el syslog.
Debería crearse una nueva interfaz de red tun0, con IP 172.16.166.2.
- Probar el vínculo con ping a la IP del extremo server. Ejemplo:
ping 172.16.166.1
- Luego probar el vínculo con ping a alguna IP de las subredes disponibles en el extremo server. Ejemplo:
ping 10.4.1.1
- El túnel debería estar funcionando correctamente.