Instalación y configuración de clientes y servidores OpenVPN en Debian 7


Este artículo detalla cómo obtener conectividad IPv6 en OpenVPN usando Debian Linux. El proceso se ha probado en Debian 7 en un VPS KVM con conectividad IPv6 como servidor y en un escritorio Debian 7. Los comandos deben ejecutarse como root.

OpenVPN es un programa VPN que utiliza SSL/TLS para crear conexiones VPN seguras y cifradas, para enrutar su tráfico de Internet, evitando así el espionaje. Open VPN es muy capaz de atravesar cortafuegos de forma transparente. De hecho, si la situación lo requiere, puede ejecutarlo en el mismo puerto TCP que HTTPS (443), lo que hace que el tráfico sea indistinguible y, por lo tanto, prácticamente imposible de bloquear.

OpenVPN puede utilizar una variedad de métodos, como claves secretas previamente compartidas, certificados o nombres de usuario/contraseñas, para permitir que los clientes se autentiquen en el servidor. OpenVPN utiliza el protocolo OpenSSL e implementa muchas funciones de seguridad y control, como autenticación de respuesta a desafío, capacidad de inicio de sesión único, funciones de equilibrio de carga y conmutación por error y compatibilidad con múltiples demonios.

Piense en comunicaciones seguras, piense en OpenVPN. Si no desea que nadie espíe su tráfico de Internet, use OpenVPN para enrutar todo su tráfico a través de un túnel seguro y altamente encriptado.

Esto es especialmente importante cuando se conecta a redes WIFI públicas en aeropuertos y otros lugares. Nunca puedes estar seguro de quién está fisgoneando en tu tráfico. Puede canalizar su tráfico a través de su propio servidor OpenVPN para evitar espionaje.

Si se encuentra en alguno de los países que monitorean rutinariamente todo su tráfico y bloquean sitios web a voluntad, puede usar OpenVPN sobre el puerto TCP 443, para que sea indistinguible del tráfico HTTPS. Incluso puede combinar OpenVPN con otras estrategias de seguridad, como tunelizar su tráfico OpenVPN a través de un túnel SSL, para superar las técnicas de inspección profunda de paquetes que podrían identificar firmas OpenVPN.

OpenVPN requiere requisitos mínimos para ejecutarse. Un sistema con 64 MB de RAM y 1 GB de espacio en el disco duro es suficiente para ejecutar OpenVPN. OpenVPN se ejecuta en casi todos los sistemas operativos principales.

Instalación y configuración de OpenVPN en Debian 7

Ejecute el siguiente comando para instalar OpenVPN.

# apt-get install openvpn

De forma predeterminada, los scripts easy-rsa se instalan en el directorio "/ usr/share/easy-rsa /". Entonces, necesitamos copiar estos scripts en la ubicación deseada, es decir,/root/easy-rsa.

# mkdir /root/easy-rsa
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/easy-rsa

Abra el archivo "vars" y realice los siguientes cambios, pero antes de realizar cambios, le sugiero que haga una copia de seguridad del archivo original.

# cp vars{,.orig}

Con su editor de texto, configure los valores predeterminados para easy-rsa. Por ejemplo.

KEY_SIZE=4096
KEY_COUNTRY="IN"
KEY_PROVINCE="UP"
KEY_CITY="Noida"
KEY_ORG="Home"
KEY_EMAIL="[email protected]"

Aquí, estoy usando una clave de 4096 bits. Puede utilizar una clave de 1024, 2048, 4096 o 8192 bits según lo desee.

Exporte los valores predeterminados ejecutando el comando.

# source ./vars

Limpie los certificados que se generaron anteriormente.

./clean-all

A continuación, ejecute el siguiente comando para generar un certificado CA y una clave CA.

# ./build-ca

Genere el certificado del servidor ejecutando el comando. Sustituya el "nombre del servidor" por su nombre de servidor.

# ./build-key-server server-name

Genere el certificado PEM de Diffie Hellman.

# ./build-dh

Genere el certificado de cliente. Sustituya el "nombre del cliente" por su nombre de cliente.

# ./build-key client-name

Genere el código HMAC.

# openvpn --genkey --secret /root/easy-rsa/keys/ta.key

Copie los certificados en las máquinas cliente y servidor de la siguiente manera.

  1. Asegúrese de que ca.crt esté presente tanto en el cliente como en el servidor.
  2. La clave ca.key debe estar en el cliente.
  3. El servidor requiere server.crt, dh4096.pem, server.key y ta.key.
  4. client.crt, client.key y ta.key deben estar en el cliente.

Para configurar las claves y los certificados en el servidor, ejecute los comandos.

# mkdir -p /etc/openvpn/certs
# cp -pv /root/easy-rsa/keys/{ca.{crt,key},server-name.{crt,key},ta.key,dh4096.pem} /etc/openvpn/certs/

Ahora necesita configurar el servidor OpenVPN. Abra el archivo "/etc/openvpn/server.conf". Realice los cambios que se describen a continuación.

script security 3 system
port 1194
proto udp
dev tap

ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server-name.crt
key /etc/openvpn/certs/server-name.key
dh /etc/openvpn/certs/dh4096.pem
tls-auth /etc/openvpn/certs/ta.key 0

server 192.168.88.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 1800 4000

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

#log openvpn.log
#status openvpn-status.log
verb 5
mute 20

Habilite el reenvío de IP en el servidor.

# echo 1 > /proc/sys/net/ipv4/ip_forward

Ejecute el siguiente comando para configurar OpenVPN para que se inicie en el arranque.

# update-rc.d -f openvpn defaults

Inicie el servicio OpenVPN.

# service openvpn restart

Ejecute el siguiente comando para instalar OpenVPN en la máquina cliente.

# apt-get install openvpn

Con un editor de texto, configure la configuración del cliente OpenVPN en "/etc/openvpn/client.conf", en el cliente. Una configuración de ejemplo es la siguiente:

script security 3 system
client
remote vpn_server_ip
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client.crt
key /etc/openvpn/certs/client.key
cipher DES-EDE3-CBC
comp-lzo yes
dev tap
proto udp
tls-auth /etc/openvpn/certs/ta.key 1
nobind
auth-nocache
persist-key
persist-tun
user nobody
group nogroup

Ejecute el siguiente comando para configurar OpenVPN para que se inicie en el arranque.

# update-rc.d -f openvpn defaults

Inicie el servicio OpenVPN en el cliente.

# service openvpn restart

Una vez que esté satisfecho de que OpenVPN está funcionando bien en IPv4, aquí se explica cómo hacer que IPv6 funcione en OpenVPN.

Agregue las siguientes líneas al final del archivo de configuración del servidor "/etc/openvpn/server.conf".

client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh

Estos dos scripts construyen/destruyen el túnel IPv6 cada vez que un cliente se conecta/desconecta.

Aquí está el contenido de client-connect.sh.

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
ifconfig $dev up
ifconfig $dev add ${BASERANGE}:1001::1/64
ip -6 neigh add proxy 2a00:dd80:003d:000c:1001::2 dev eth0
exit 0

Mi anfitrión me asigna direcciones IPV6 del bloque 2a00: dd80: 003d: 000c ::/64. Por lo tanto, uso
2a00: dd80: 003d: 000c como BASERANGE. Modifique este valor según lo que su anfitrión le haya asignado.

Cada vez que un cliente se conecta a OpenVPN, este script asigna la dirección 2a00: dd80: 003d: 000c: 1001 :: 1 como la dirección IPV6 de la interfaz tap0 del servidor.

La última línea configura el Descubrimiento de Vecinos para nuestro túnel. He agregado la dirección IPv6 de la conexión tap0 del lado del cliente como la dirección proxy.

Aquí está el contenido de client-disconnect.sh.

#!/bin/bash
BASERANGE="2a00:dd80:003d:000c"
/sbin/ip -6 addr del ${BASERANGE}::1/64 dev $dev
exit 0

Esto simplemente elimina la dirección del túnel IPv6 del servidor, cuando el cliente se desconecta. Modifique el valor de BASERANGE según corresponda.

Haga que los scripts sean ejecutables.

# chmod 700 /etc/openvpn/client-connect.sh
# chmod 700 /etc/openvpn/client-disconnect.sh

Agregue las siguientes entradas a "/etc/rc.local" (también puede modificar los sysctls apropiados en /etc/sysctl.conf).

echo 1 >/proc/sys/net/ipv6/conf/all/proxy_ndp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
/etc/init.d/firewall stop && /etc/init.d/firewall start

Estas entradas activan el descubrimiento y el reenvío de vecinos. También agregué un firewall.

Cree "/etc/init.d/firewall" y coloque el siguiente contenido.

#!/bin/sh
# description: Firewall
IPT=/sbin/iptables
IPT6=/sbin/ip6tables
case "$1" in
start)
$IPT -F INPUT
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
$IPT -A INPUT -i tap+ -j ACCEPT
$IPT -A FORWARD -i tap+ -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -F POSTROUTING
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -A INPUT -i eth0 -j DROP
$IPT6 -F INPUT
$IPT6 -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT6 -A INPUT -i eth0 -p icmpv6 -j ACCEPT
$IPT6 -A FORWARD -s 2a00:dd80:003d:000c::/64 -i tap0 -o eth0 -j ACCEPT
$IPT6 -A INPUT -i eth0 -j DROP
exit 0
;;
stop)
$IPT -F
$IPT6 -F
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac

Ejecute "/etc/rc.local" e inicie el cortafuegos.

# sh /etc/rc.local

Esto completa las modificaciones del lado del servidor.

Agregue lo siguiente como las últimas líneas del archivo de configuración de su cliente "/etc/openvpn/client.conf".

# create the ipv6 tunnel
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
# need this so when the client disconnects it tells the server
explicit-exit-notify

Los scripts ascendentes y descendentes crean/destruyen los puntos finales del cliente IPV6 de la conexión tap0 del cliente cada vez que un cliente se conecta/desconecta hacia o desde el servidor OpenVPN.

Aquí está el contenido de up.sh.

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
ifconfig $dev up
ifconfig $dev add ${IPV6BASE}:1001::2/64
ip -6 route add default via ${IPV6BASE}:1001::1
exit 0

El script asigna la dirección IPV6 2a00: dd80: 3d: c: 1001 :: 2 como la dirección IPV6 del cliente y establece la ruta IPV6 predeterminada a través del servidor.

Modifique IPV6BASE para que sea igual que BASERANGE en la configuración del servidor.

Aquí está el contenido de down.sh.

#!/bin/bash
IPV6BASE="2a00:dd80:3d:c"
/sbin/ip -6 addr del ${IPV6BASE}::2/64 dev $dev
/sbin/ip link set dev $dev down
/sbin/ip route del ::/0 via ${IPV6BASE}::1
exit 0

Esto simplemente elimina la dirección IPV6 del cliente y elimina la ruta IPV6 cuando el cliente se desconecta del servidor.

Modifique IPV6BASE para que sea igual que BASERANGE en la configuración del servidor y haga que el script sea ejecutable.

# chmod 700 /etc/openvpn/up.sh
# chmod 700 /etc/openvpn/down.sh

Opcionalmente, modifique "/etc/resolv.conf" y agregue los servidores de nombres IPV6 de Google para la resolución de DNS.

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

Reinicie openvpn en el servidor y luego conéctese desde el cliente. Deberías estar conectado. Visite test-ipv6.com para ver si su conectividad IPV6 a través de OpenVPN está funcionando.

Enlaces de referencia

Página de inicio de OpenVPN