GNU/Linux >> Tutoriales Linux >  >> Panels >> OpenVPN

Configuración de un servidor OpenVPN con Ubuntu y Viscosity

Esta guía lo guiará a través de los pasos necesarios para configurar un servidor OpenVPN en un host de Ubuntu que le permita acceder de manera segura a la red de su hogar/oficina desde una ubicación remota y, opcionalmente, enviar todo el tráfico de su red a través de él para que pueda acceder a Internet. también de forma segura.

Antes de usar esta guía, le recomendamos que lea nuestro artículo Introducción a la ejecución de un servidor OpenVPN.

Preparación

Para esta guía, asumimos:

  • Ya has instalado la última versión de Ubuntu (20.04 en el momento de escribir este artículo)
  • Tienes raíz acceso a esta instalación
  • Esta instalación de Ubuntu es una instalación limpia
  • Conozca el nombre de sus interfaces de red (instrucciones justo debajo)
  • Tienes acceso al servidor a través de Terminal o SSH
  • Puede copiar archivos dentro y fuera del servidor usando SCP o un protocolo similar
  • Ya tiene una copia de Viscosity instalada en su dispositivo cliente

Si necesita descargar e instalar una copia de Ubuntu, puede encontrar información en http://www.ubuntu.com/download. No cubriremos los detalles de la configuración de una instancia de Ubuntu, se pueden encontrar muchas guías en línea. Si está ejecutando una versión diferente de Ubuntu, es muy probable que se apliquen muchos o incluso todos los pasos descritos en esta guía. Si desea configurar un servidor OpenVPN en un sistema operativo diferente, consulte nuestras otras guías.

Si aún no tiene una copia de Viscosity instalada en su cliente, consulte esta guía de configuración para instalar Viscosity (Mac | Windows).

Si es nuevo en SSH o SCP, tenemos algunas instrucciones en nuestra Guía de introducción.

Para obtener el nombre de su interfaz de red principal (acceso WAN), ejecute lo siguiente en su servidor Ubuntu:
ip route | grep default | awk '{print $NF}'

Si tiene una segunda interfaz de red para acceder a las máquinas en su red local, también necesitará el nombre de esta cuando configure el firewall y el enrutamiento.

Soporte

Lamentablemente, no podemos brindar asistencia directa para configurar su propio servidor OpenVPN. Brindamos esta guía como cortesía para ayudarlo a comenzar y aprovechar al máximo su copia de Viscosity. Hemos probado minuciosamente los pasos de esta guía para asegurarnos de que, si sigue las instrucciones que se detallan a continuación, debería estar bien encaminado para disfrutar de los beneficios de ejecutar su propio servidor OpenVPN.

Para obtener más información o ayuda con Ubuntu, hay una variedad de recursos comunitarios disponibles en https://www.ubuntu.com/community

Cómo empezar

Primero, actualice su servidor:

sudo apt-get update
sudo apt-get -y upgrade

Es posible que se le informe que debe reiniciar después de que se completen las actualizaciones del paquete. Si es así, continúe y reinicie, luego vuelva a iniciar sesión y continúe.

Para configurar un servidor OpenVPN, necesitamos instalar OpenVPN. Ejecute los siguientes comandos, esperando a que se complete cada uno, para agregar el repositorio de OpenVPN a apt para que OpenVPN se instale y actualice automáticamente, y luego instale OpenVPN:

sudo wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg | sudo apt-key add -
echo "deb http://build.openvpn.net/debian/openvpn/stable focal main" | sudo tee /etc/apt/sources.list.d/openvpn-aptrepo.list
Nota:si está utilizando una distribución anterior de Ubuntu, sustituya "focal" en el comando anterior por "xenial" si Ubuntu 16.04, o "bionic" si Ubuntu 18.04.

sudo apt-get update
sudo apt-get -y install openvpn


Generando Configuraciones, Certificados y Claves

El siguiente paso es generar sus configuraciones para el servidor y sus clientes, así como los certificados que las acompañan. Puede hacerlo fácilmente siguiendo la Guía de creación de certificados y claves. Puede seguir la sección para Ubuntu y copiar las configuraciones de su cliente fuera del servidor (recomendamos esto), o generar todo en su PC o Mac y copiar el servidor carpeta que se genera en su servidor Ubuntu.

Si usa el servidor DNS predeterminado (10.8.0.1), deberá configurar un servidor DNS usted mismo; las instrucciones se encuentran al final de este artículo. Recomendamos en su lugar usar un servidor DNS existente, un servidor DNS disponible públicamente como el de Google (8.8.8.8 y 8.8.4.4) es el más fácil.

Una vez que haya generado sus configuraciones, deberá transferir la configuración del servidor a su servidor o transferir las configuraciones de su cliente fuera de su servidor. Si tiene acceso local, una unidad USB es la más fácil. Si no, tenemos ayuda sobre cómo transferir archivos con SCP en nuestra Guía de introducción.

Reenvío de IP

Para reenviar nuestras solicitudes a través de la VPN, queremos que el servidor OpenVPN actúe como un enrutador. Como tal, necesitamos habilitar el reenvío de IP. En la terminal, podemos habilitar el reenvío de IP en el servidor Ubuntu ingresando:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Sin embargo, cada vez que reiniciemos el servidor, este comando se deshará. Para asegurarnos de que eso no suceda, debemos modificar el archivo sysctl.conf usando nano. Introduzca:

sudo nano /etc/sysctl.conf

Desplácese hacia abajo hasta la sección:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

Elimine el carácter '#' al comienzo de la línea para que ahora se convierta en:

net.ipv4.ip_forward=1

Cuando termines, presiona ctrl + x para salir de nano. Guarde los cambios cuando se le solicite.

Para asegurarnos de que los hosts en la red doméstica/de la oficina puedan encontrar el servidor VPN, debemos hacer que el servidor responda a cualquier solicitud ARP:

echo 1 | sudo tee /proc/sys/net/ipv4/conf/ens33/proxy_arp

donde ens33 es la interfaz de red de la red doméstica/de la oficina si tiene dos interfaces de red, o su interfaz de red principal (WAN) de lo contrario (consulte la sección Preparación para obtener más información).

Reglas de cortafuegos

Usaremos el cortafuegos sin complicaciones (ufw) que está instalado de forma predeterminada en Ubuntu para controlar cómo pasa el tráfico a través del servidor OpenVPN. Si su servidor Ubuntu es accesible externamente (tiene una conexión directa a Internet con su propia dirección IP, sin un enrutador), entonces debe usar ufw para permitir el puerto OpenVPN que configuramos anteriormente (1194). De lo contrario, configuraremos ufw para permitir todo el tráfico y configurar los ajustes para el enrutamiento.

Si su servidor Ubuntu NO necesita ufw para protegerlo (es decir, está detrás de un enrutador o tiene una configuración de firewall diferente), debe configurar la regla de entrada predeterminada para permitir que todo el tráfico pase a través de ufw de forma predeterminada. Para hacerlo, necesitamos modificar el archivo de configuración.

  1. Abra este archivo en nano:
    sudo nano /etc/default/ufw
  2. Desplácese hacia abajo hasta la sección:
    # Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if
    # you change this you will most likely want to adjust your rules.
    DEFAULT_INPUT_POLICY="DROP"
  3. Dado que nuestro servidor no usará este firewall para protección, cambie esto de "DROP" a "ACCEPT"
  4. Desplácese hacia abajo hasta la sección:
    # Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
    # if you change this you will most likely want to adjust your rules
    DEFAULT_FORWARD_POLICY="DROP"
  5. Cambie la política de reenvío de "DROP" a "ACCEPT"
  6. Presiona ctrl + x para salir de nano. Guarde los cambios cuando se le solicite.

Si su servidor Ubuntu SÍ necesita ufw para protegerlo , debe indicarle qué puertos permitir, ya que tiene las políticas predeterminadas de entrada y reenvío de DROP. Si está ejecutando el servidor OpenVPN desde una ubicación remota, deberá ingresar a SSH para cambiar cualquier configuración. Como tal, debemos decirle al firewall que permita el tráfico SSH.

  1. Introduciendo lo siguiente en la terminal:
    sudo ufw allow ssh
  2. El tráfico VPN que enviaremos al servidor OpenVPN será sobre UDP en el puerto 1194, así que ingrese en la terminal:
    sudo ufw allow 1194/udp

Si tiene otros servicios ejecutándose en su servidor Ubuntu, debe asegurarse de permitir su tráfico también a través de ufw. Asegúrese de agregar cualquier regla de permiso para cualquier otro puerto en el que esté escuchando su servidor Ubuntu (como un servidor de medios Plex o tal vez su propio servidor de correo electrónico).

Siguiente, independientemente de la configuración de su red , debe configurar las reglas de enrutamiento para ufw.

  1. Abra el archivo de configuración de ufw en nano:
    sudo nano /etc/ufw/before.rules
  2. Mueva el cursor debajo de la sección:
    #
    # rules.before
    #
    # Rules that should be run before the ufw command line added rules. Custom
    # rules should be added to one of these chains:
    # ufw-before-input
    # ufw-before-output
    # ufw-before-forward
  3. Pegue lo siguiente:
    # START OPENVPN RULES
    # NAT table rules
    *nat
    :POSTROUTING ACCEPT [0:0]

    # Uncomment the next POSTROUTING line and replace ens33 with the name
    # of your Local Network Interface if you have a second network interface
    # for accessing machines on your local network
    # Allow OpenVPN client to communicate with local home network
    #-A POSTROUTING -s 10.8.0.0/24 -d 192.168.0.0/24 -o ens32 -j MASQUERADE

    # Allow traffic from OpenVPN client to your WAN and/or LAN via ens33
    -A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE
    COMMIT
    # END OPENVPN RULES
    • Reemplazar ens33 con el nombre de su interfaz de red principal si es diferente (consulte la sección Preparación para obtener más información)
  4. Mueva el cursor debajo de la sección:
    # Don't delete these required lines, otherwise there will be errors
    *filter
    :ufw-before-input - [0:0]
    :ufw-before-output - [0:0]
    :ufw-before-forward - [0:0]
    :ufw-not-local - [0:0]
    # End required lines
  5. Pegue lo siguiente:
    #Accept all traffic to and from VPN
    -A ufw-before-input -i tun+ -j ACCEPT
    -A ufw-before-output -i tun+ -j ACCEPT

    # Forward traffic to and from the VPN
    -A ufw-before-forward -s 10.8.0.0/24 -j ACCEPT
    -A ufw-before-forward -d 10.8.0.0/24 -j ACCEPT
  6. Presiona ctrl + x para salir de nano. Guarde los cambios cuando se le solicite.

Ufw ahora está listo para ser activado.

  1. En la terminal, escriba:
    sudo ufw enable
  2. Si tiene SSH en esta instancia de Ubuntu, se mostrará el mensaje:
    Command may disrupt existing ssh connections. Proceed with operation (y|n)?
    A lo que debe responder con y .

Luego se mostrará el siguiente resultado (independientemente de SSH o no)

Firewall is active and enabled on system startup

Iniciar el servidor OpenVPN

En este punto, los conceptos básicos están completos. La configuración y los archivos de su servidor deben estar en su servidor, ya sea generados en el servidor o copiados desde donde los generó.

Primero, copie los archivos de configuración del servidor al directorio de OpenVPN:

sudo cp /path/to/configs/server/* /etc/openvpn/

Ahora inicie su servidor y habilítelo para que también se inicie después de un reinicio.

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

Para verificar el estado del servidor, ingrese:

sudo systemctl status [email protected]

A lo que debe responder con:

Active: active (running) since Thu 2017-06-01 17:06:29 PDT; 4s ago

Si el servidor no aparece como activo (en ejecución), debería ver un resultado de registro que muestra lo que salió mal.

Su servidor OpenVPN ya está funcionando y listo para que se conecte a él.

Configuración del enrutador

Si su servidor Ubuntu es directamente accesible , entonces puedes saltarte esta sección . No hay enrutador para configurar.

Sin embargo, si su servidor Ubuntu está detrás de un enrutador (como en el WiFi de su hogar), deberá configurar su enrutador para permitir el tráfico VPN. Consulte nuestro artículo Introducción a la ejecución de un servidor OpenVPN para obtener más información.

Configuración de la viscosidad

El último paso es configurar la Viscosidad. Gracias a openvpn-generate, esto es tan fácil como importar y conectarse.

Importando

Copie su archivo *.visz que creó con openvpn-generate a su máquina Mac o Windows con Viscosity instalado y haga doble clic en el archivo. Debería ver un aviso de que la configuración se importó correctamente.

Conectando y usando su conexión VPN

Ahora está listo para conectarse. Haga clic en el ícono Viscosity en la barra de menú de macOS o en la bandeja del sistema de Windows para abrir el menú Viscosity, seleccione la conexión que importó y Viscosity se conectará.

Para verificar que la VPN esté funcionando, puede abrir la ventana Detalles desde el menú Viscosidad. Esto le permitirá ver los detalles de la conexión, el tráfico y el registro de OpenVPN.



Eso es todo, ha configurado su propio servidor OpenVPN. ¡Felicitaciones, ahora puede disfrutar de los beneficios de operar su propio servidor OpenVPN!

Servidor DNS básico

Si elige ejecutar su propio servidor DNS para clientes, el siguiente es un ejemplo de configuración para dnsmasq. Instale dnsmasq con el siguiente comando:

sudo apt-get install -y dnsmasq

Primero debe deshabilitar la instancia de dnsmasq proporcionada por NetworkManager de manera predeterminada. Esta instancia predeterminada está restringida y no nos permitirá escuchar solicitudes de DNS a través de la VPN.

  1. Abra la configuración de NetworkManager:
    nano /etc/NetworkManager/NetworkManager.conf
  2. Comente la línea que habilita dnsmasq agregando un carácter '#' al principio de la línea:
    dns=dnsmasq
  3. Presiona ctrl + x para salir de nano. Guarde los cambios cuando se le solicite.

A continuación, debemos modificar parte de la configuración predeterminada.

  1. Cree una copia de seguridad de la configuración original de dnsmasq:
    cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
  2. Configure el servidor DNS para que escuche las solicitudes del servidor Ubuntu (127.0.0.1) y de la VPN (10.8.0.1):
    echo -e "listen-address=127.0.0.1, 10.8.0.1\nbind-interfaces" > /etc/dnsmasq.conf
  3. Evite que nuestras solicitudes DNS inunden los servidores DNS raíz con solicitudes incorrectas:
    echo -e "domain-needed\nbogus-priv" >> /etc/dnsmasq.conf
  4. Use los servidores DNS de Google para resolver las solicitudes (puede usar el servicio de resolución de DNS que prefiera):
    echo -e "server=8.8.8.8\nserver=8.8.4.4" >> /etc/dnsmasq.conf
  5. Reinicie el servicio dnsmasq para activar nuestros cambios:
    service dnsmasq restart

Para verificar que el servidor DNS esté escuchando en las direcciones que solicitamos, escriba:

netstat -anup

Debería ver una lista de direcciones, incluidas 127.0.0.1 y 10.8.0.1:

Proto Recv-Q Send-Q Local Address         Foreign Address       State     PID/Program name
...
udp        0      0 127.0.0.1:53          0.0.0.0:*                       54892/dnsmasq   
udp        0      0 10.8.0.1:53           0.0.0.0:*                       54892/dnsmasq   
...

Por último, debemos asegurarnos de que dnsmasq se inicie después de OpenVPN en el inicio del sistema. De manera predeterminada, dnsmasq se ejecuta antes que OpenVPN, lo que evita que configure el servidor DNS para la VPN, ya que la VPN aún no existe.

  1. Cree una copia de seguridad del archivo original:
    cp /etc/rc.local /etc/rc.local.bak
  2. Escriba:
    echo -e "service dnsmasq restart\nexit 0" >> /etc/rc.local
  3. Haga que este script sea ejecutable:
    chmod +x /etc/rc.local

Ya hemos terminado de configurar el servidor DNS.


OpenVPN
  1. Instalación y configuración de Plex Media Server en Ubuntu

  2. Cómo instalar y configurar un servidor OpenVPN en Ubuntu 22.04

  3. Configuración de Amavis y ClamAV en Ubuntu Mail Server

  4. Configuración de un servidor de ofuscación con Obfsproxy y Viscosity

  5. Instale y configure el servidor OpenVPN en Ubuntu 20.04

Configuración de un servidor OpenVPN con Sophos UTM y Viscosity

Configuración de un servidor OpenVPN con Sophos XG y Viscosity

Configuración de un servidor OpenVPN con Synology y Viscosity

Configuración de un servidor OpenVPN con enrutador Tomato y Viscosity

Configuración de un servidor OpenVPN con Ubiquiti EdgeRouter (EdgeOS) y Viscosity

Configuración de un servidor OpenVPN con VyOS y Viscosity