GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Configure OpenConnect VPN Server (ocserv) en Ubuntu 18.04/16.04 con Let's Encrypt

Este tutorial le mostrará cómo instalar el servidor OpenConnect VPN en Ubuntu 16.04/18.04 . Servidor VPN OpenConnect, también conocido como ocserv , es una implementación de código abierto del protocolo Cisco AnyConnect VPN, que es popular entre empresas y universidades. AnyConnect es un protocolo VPN basado en SSL que permite a los usuarios individuales conectarse a una red remota.

Características del servidor OpenConnect VPN:

  • Ligero y rápido. En mi prueba, puedo ver YouTube en 4k con OpenConnect VPN. YouTube está bloqueado en mi país.
  • Compatible con el cliente Cisco AnyConnect
  • Admite autenticación de contraseña y autenticación de certificado
  • Fácil de configurar

Me gusta especialmente el hecho de que, en comparación con otras tecnologías VPN, es muy fácil y conveniente para el usuario final usar OpenConnect VPN. Cada vez que instalo una distribución de Linux basada en Debian en mi computadora y quiero desbloquear sitios web rápidamente u ocultar mi dirección IP, instalo el cliente OpenConnect y me conecto al servidor con solo dos líneas de comandos:

sudo apt install openconnect

sudo openconnect -b vpn.mydomain.com

El gnutls-bin El paquete de software proporciona herramientas para crear su propia CA y certificado de servidor, pero obtendremos e instalaremos el certificado Let's Encrypt. La ventaja de usar el certificado Let's Encrypt es que es gratis, más fácil de configurar y confiable para el software del cliente VPN.

Requisitos

Para seguir este tutorial, necesitará un VPS (servidor privado virtual) que pueda acceder libremente a sitios web bloqueados (fuera de su país o sistema de filtrado de Internet). Recomiendo Kamatera VPS, que incluye:

  • Prueba gratuita de 30 días.
  • Desde $4/mes (1 GB de RAM)
  • VPS basado en KVM de alto rendimiento
  • 9 centros de datos en todo el mundo, incluidos Estados Unidos, Canadá, Reino Unido, Alemania, Países Bajos, Hong Kong e Israel.

Siga el tutorial vinculado a continuación para crear su servidor Linux VPS en Kamatera.

  • Cómo crear un servidor VPS Linux en Kamatera

Una vez que tenga un VPS con Ubuntu 18.04, siga las instrucciones a continuación.

También necesita un nombre de dominio para habilitar HTTPS para OpenConnect VPN. Registré mi nombre de dominio de NameCheap porque el precio es bajo y ofrecen protección de privacidad whois gratis de por vida.

Paso 1:Instalación del servidor VPN de OpenConnect en Ubuntu 16.04/18.04

Inicie sesión en su servidor Ubuntu 16.04/18.04. Luego usa apt para instalar el ocserv paquete, que está incluido en el repositorio de Ubuntu desde 16.04.

sudo apt install ocserv

Una vez instalado, el servidor OpenConnect VPN se inicia automáticamente. Puede comprobar su estado con:

systemctl status ocserv

Salida de muestra:

● ocserv.service - OpenConnect SSL VPN server
   Loaded: loaded (/lib/systemd/system/ocserv.service; enabled; vendor preset: enabled
   Active: active (running) since Thu 2017-11-30 05:45:07 UTC; 11s ago
     Docs: man:ocserv(8)
 Main PID: 19235 (ocserv-main)
   CGroup: /system.slice/ocserv.service
           ├─19235 ocserv-main                                                  
           └─19242 ocserv-secm 

Si no se está ejecutando, puede iniciarlo con:

sudo systemctl start ocserv

De manera predeterminada, el servidor OpenConnect VPN escucha en el puerto TCP y UDP 443. Si lo está utilizando el servidor web, entonces el servidor VPN no se puede iniciar. Más adelante veremos cómo cambiar el puerto en el archivo de configuración de OpenConnect VPN.

Paso 2:Instalación del cliente Let's Encrypt (Certbot) en el servidor Ubuntu 16.04/18.04

Ejecute los siguientes comandos para instalar la última versión de certbot desde el PPA oficial. software-propiedades-comunes es necesario si desea instalar paquetes desde PPA. Es posible que falte en su servidor Ubuntu.

sudo apt install software-properties-common

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install certbot

Para verificar el número de versión, ejecute

certbot --version

Salida de muestra:

certbot 0.31.0

Paso 3:Obtener un certificado TLS de Let's Encrypt

Complemento independiente

Si no hay un servidor web ejecutándose en su servidor Ubuntu 16.04/18.04 y desea que el servidor OpenConnect VPN use el puerto 443, puede usar el complemento independiente para obtener el certificado TLS de Let's Encrypt. Ejecute el siguiente comando. No olvide establecer un registro A para su nombre de dominio.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com

Explicación:

  • certonly :Obtenga un certificado pero no lo instale.
  • --standalone :use el complemento independiente para obtener un certificado
  • --preferred-challenges http :Realice el desafío http-01 para validar nuestro dominio, que usará el puerto 80. De manera predeterminada, el complemento independiente realizará el desafío tls-sni, que usa el puerto 443. Dado que el servidor OpenConnect VPN ya usa el puerto 443, debemos cambiar el comportamiento predeterminado.
  • --agree-tos :Acepte los términos de servicio de Let's Encrypt.
  • --email :la dirección de correo electrónico se utiliza para el registro y la recuperación de la cuenta.
  • -d :Especifique su nombre de dominio.

Como puede ver en la siguiente captura de pantalla, obtuve el certificado con éxito.

Uso del complemento webroot

Si su servidor Ubuntu 16.04/18.04 tiene un servidor web escuchando en los puertos 80 y 443, y desea que el servidor OpenConnect VPN use un puerto diferente, entonces es una buena idea usar el complemento webroot para obtener un certificado porque el complemento webroot funciona con prácticamente todos los servidores web y no necesitamos instalar el certificado en el servidor web.

Primero, debe crear un host virtual para vpn.example.com.

Apache

Si está utilizando Apache, entonces

sudo nano /etc/apache2/sites-available/vpn.example.com.conf

Y pegue las siguientes líneas en el archivo.

<VirtualHost *:80>        
        ServerName vpn.example.com

        DocumentRoot /var/www/vpn.example.com
</VirtualHost>

Guarde y cierre el archivo. Luego cree el directorio raíz web.

sudo mkdir /var/www/vpn.example.com

Establezca www-data (usuario de Apache) como propietario de la raíz web.

sudo chown www-data:www-data /var/www/vpn.example.com -R

Habilite este servidor virtual.

sudo a2ensite vpn.example.com

Vuelva a cargar Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Una vez que se crea y habilita el host virtual, ejecute el siguiente comando para obtener el certificado Let's Encrypt usando el complemento webroot.

sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com

Nginx

Si está utilizando Nginx, entonces

sudo nano /etc/nginx/conf.d/vpn.example.com.conf

Pegue las siguientes líneas en el archivo.

server {
      listen 80;
      server_name vpn.example.com;

      root /var/www/vpn.example.com/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Guarde y cierre el archivo. Luego cree el directorio raíz web.

sudo mkdir -p /var/www/vpn.example.com

Establezca www-data (usuario de Nginx) como propietario de la raíz web.

sudo chown www-data:www-data /var/www/vpn.example.com -R

Vuelva a cargar Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

Una vez que se crea y habilita el host virtual, ejecute el siguiente comando para obtener el certificado Let's Encrypt usando el complemento webroot.

sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com

Paso 4:Edición del archivo de configuración del servidor VPN de OpenConnect

Edite el archivo de configuración de ocserv.

sudo nano /etc/ocserv/ocserv.conf

Primero, configure la autenticación de contraseña. De manera predeterminada, la autenticación de contraseña a través de PAM (Módulos de autenticación conectables) está habilitada, lo que le permite usar cuentas del sistema Ubuntu para iniciar sesión desde clientes VPN. Este comportamiento se puede desactivar comentando la siguiente línea.

auth = "pam[gid-min=1000]"

Si queremos que los usuarios usen cuentas VPN separadas en lugar de cuentas del sistema para iniciar sesión, debemos agregar la siguiente línea para habilitar la autenticación de contraseña con un archivo de contraseña.

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

Después de terminar de editar este archivo de configuración, veremos cómo usar ocpasswd herramienta para generar el /etc/ocserv/ocpasswd archivo, que contiene una lista de nombres de usuario y contraseñas codificadas.

Nota :Ocserv admite la autenticación de certificados de clientes, pero Let's Encrypt no emite certificados de clientes. Debe configurar su propia CA para emitir un certificado de cliente.

A continuación, si no desea que ocserv use el puerto TCP y UDP 443, busque las siguientes dos líneas y cambie el número de puerto. De lo contrario, déjalos en paz.

tcp-port = 443
udp-port = 443

Luego encuentra las siguientes dos líneas. Tenemos que cambiarlos.

server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem
server-key = /etc/ssl/private/ssl-cert-snakeoil.key

Reemplace la configuración predeterminada con la ruta del certificado del servidor Let's Encrypt y el archivo de clave del servidor.

server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem

Luego, establezca el número máximo de clientes. El valor predeterminado es 16. Establecer en cero para ilimitado.

max-clients = 16

Establezca la cantidad de dispositivos desde los que un usuario puede iniciar sesión al mismo tiempo. El valor predeterminado es 2. Establecer en cero para ilimitado.

max-same-clients = 2

A continuación, busque la siguiente línea. Cambiar false a true para habilitar el descubrimiento de MTU, que puede optimizar el rendimiento de VPN.

try-mtu-discovery = false

Después de eso, establezca el dominio predeterminado en vpn.example.com.

default-domain = vpn.example.com

La configuración de la red IPv4 es la siguiente por defecto. Esto causará problemas porque la mayoría de los enrutadores domésticos también establecen el rango de red IPv4 en 192.168.1.0/24 .

ipv4-network = 192.168.1.0
ipv4-netmask = 255.255.255.0

Podemos usar otro rango de direcciones IP privadas (10.10.10.0/24) para evitar la colisión de direcciones IP, así que cambie el valor de ipv4-network a

ipv4-network = 10.10.10.0

Ahora elimine el comentario de la siguiente línea para tunelizar todas las consultas de DNS a través de la VPN.

tunnel-all-dns = true

Cambiar la dirección de resolución de DNS. Puede utilizar el servidor DNS público de Google.

dns = 8.8.8.8

Nota :Es una buena práctica ejecutar su propia resolución de DNS en el mismo servidor, especialmente si es un proveedor de VPN. Si hay una resolución de DNS ejecutándose en el mismo servidor, especifique el DNS como

dns = 10.10.10.1

10.10.10.1 es la dirección IP del servidor VPN OpenConnect en la LAN VPN. Esto acelerará un poco las búsquedas de DNS para los clientes porque se elimina la latencia de la red entre el servidor VPN y la resolución de DNS.

Luego comente todos los parámetros de la ruta (agregue el símbolo # al principio de las siguientes cuatro líneas), lo que configurará el servidor como la puerta de enlace predeterminada para los clientes.

route = 10.10.10.0/255.255.255.0
route = 192.168.0.0/255.255.0.0
route = fef4:db8:1000:1001::/64

no-route = 192.168.5.0/255.255.255.0

Guarde y cierre el archivo. A continuación, reinicie el servidor VPN para que se apliquen los cambios.

sudo systemctl restart ocserv

Paso 5:Corrección de la falla de protocolo de enlace DTLS

En Ubuntu 16.04 y Ubuntu 18.04, ocserv daemon ocserv.socket no respeta el valor "escuchar-host" del archivo de configuración, lo que provocará el siguiente error cuando los clientes se conecten al servidor VPN.

DTLS handshake failed: Resource temporarily unavailable, try again.

Para corregir este error, necesitamos editar el archivo ocserv.service. Primero copiamos el archivo original en /lib/systemd/system/ directorio a /etc/systemd/system/ directorio, luego edítelo, porque no queremos que la nueva versión del paquete ocserv anule nuestras modificaciones. (Para obtener más información sobre los archivos unitarios de systemd, ejecute man systemd.unit .)

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
sudo nano /etc/systemd/system/ocserv.service

Comente las siguientes dos líneas.

Requires=ocserv.socket

Also=ocserv.socket

Guarde y cierre el archivo. Luego recarga systemd

sudo systemctl daemon-reload

Detenga ocserv.socket y desactívelo.

sudo systemctl stop ocserv.socket

sudo systemctl disable ocserv.socket

Reinicie el servicio ocserv.

sudo systemctl restart ocserv.service

El servicio ocserv systemd no generará ningún mensaje si no se reinicia, por lo que debemos verificar el estado para asegurarnos de que realmente se está ejecutando.

systemctl status ocserv

Paso 6:Creación de cuentas VPN

Ahora use la herramienta ocpasswd para generar cuentas VPN.

sudo ocpasswd -c /etc/ocserv/ocpasswd username

Se le pedirá que establezca una contraseña para el usuario y la información se guardará en /etc/ocserv/ocpasswd expediente. Para restablecer la contraseña, simplemente ejecute el comando anterior nuevamente.

Paso 7:habilite el reenvío de IP

Para que el servidor VPN enrute paquetes entre el cliente VPN y el mundo exterior, debemos habilitar el reenvío de IP. Editar sysctl.conf archivo.

sudo nano /etc/sysctl.conf

Agregue la siguiente línea al final de este archivo.

net.ipv4.ip_forward = 1

Guarde y cierre el archivo. Luego aplique los cambios con el siguiente comando. La -p La opción cargará la configuración de sysctl desde /etc/sysctl.conf expediente. Este comando conservará nuestros cambios en los reinicios del sistema.

sudo sysctl -p

Paso 8:Configure el cortafuegos para el enmascaramiento de IP

Necesitamos configurar el enmascaramiento de IP en el firewall del servidor, de modo que el servidor se convierta en un enrutador virtual para clientes VPN. Usaré UFW, que es una parte frontal del firewall de iptables. Instale UFW en Ubuntu con:

sudo apt install ufw

Primero, debe permitir el tráfico SSH.

sudo ufw allow 22/tcp

A continuación, busque el nombre de la interfaz de red principal de su servidor.

ip addr

Como puede ver, se llama ens3 en mi servidor Ubuntu.

Para configurar el enmascaramiento de IP, debemos agregar el comando iptables en un archivo de configuración de UFW.

sudo nano /etc/ufw/before.rules

Por defecto, hay algunas reglas para el filter mesa. Agregue las siguientes líneas al final de este archivo. Reemplazar ens3 con su propio nombre de interfaz de red.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

En el editor de texto Nano, puede ir al final del archivo presionando Ctrl+W , luego presionando Ctrl+V .

Las líneas anteriores agregarán (-A ) una regla al final de POSROUTING cadena de nat mesa. Conectará su red privada virtual con Internet. Y también oculte su red del mundo exterior. Por lo tanto, Internet solo puede ver la IP de su servidor VPN, pero no puede ver la IP de su cliente VPN, al igual que su enrutador doméstico oculta su red doméstica privada.

De forma predeterminada, UFW prohíbe el reenvío de paquetes. Podemos permitir el reenvío para nuestra red privada. Encuentra el ufw-before-forward cadena en este archivo y agregue las siguientes 3 líneas, que aceptarán el reenvío de paquetes si la IP de origen o la IP de destino están en 10.10.10.0/24 rango.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Guarde y cierre el archivo. Luego habilite UFW.

sudo ufw enable

Si ha habilitado UFW anteriormente, puede usar systemctl para reiniciar UFW.

sudo systemctl restart ufw

Ahora, si lista las reglas en la cadena POSTROUTING de la tabla NAT usando el siguiente comando:

sudo iptables -t nat -L POSTROUTING

Puedes ver la regla Masquerade.

Paso 9:Abra el puerto 443 en el cortafuegos

Ejecute el siguiente comando para abrir el puerto TCP y UDP 443. Si configuró un puerto diferente para ocserv, cambie 443 a su puerto configurado.

sudo ufw allow 443/tcp
sudo ufw allow 443/udp

Ahora el servidor OpenConnect VPN está listo para aceptar conexiones de clientes.

Si especificó 10.10.10.1 como servidor DNS para clientes VPN, debe permitir que los clientes VPN se conecten al puerto 53 con la siguiente regla UFW.

sudo ufw insert 1 allow in from 10.10.10.0/24

También debe editar la configuración del servidor BIND DNS para permitir que los clientes VPN envíen consultas de DNS recursivas como se muestra a continuación.

allow-recursion { 127.0.0.1; 10.10.10.0/24; };

Cómo instalar y usar el cliente VPN OpenConnect en el escritorio Ubuntu 16.04/18.04

Ejecute el siguiente comando para instalar el cliente de línea de comandos OpenConnect VPN en el escritorio de Ubuntu.

sudo apt install openconnect

Puede conectarse a VPN desde la línea de comando como se muestra a continuación. -b hará que se ejecute en segundo plano después de que se establezca la conexión.

sudo openconnect -b vpn.example.com:port-number

Se le pedirá que ingrese el nombre de usuario y la contraseña de VPN. Si la conexión se establece con éxito, verá el siguiente mensaje.

Got CONNECT response: HTTP/1.1 200 CONNECTED
CSTP connected. DPD 90, Keepalive 32400
Connected tun0 as 192.168.1.139, using SSL
Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).

Para detener la conexión, ejecute:

sudo pkill openconnect

Para ejecutar el cliente de forma no interactiva, utilice la siguiente sintaxis.

echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin

Si desea utilizar Network Manager para administrar la conexión VPN, también debe instalar estos paquetes.

sudo apt install network-manager-openconnect network-manager-openconnect-gnome

Si se conectó con éxito al servidor VPN, pero su dirección IP pública no cambia, eso se debe a que el reenvío de IP o el enmascaramiento de IP no funcionan. Una vez tuve un error tipográfico en mi comando iptables, lo que provocó que mi computadora no pudiera navegar por Internet.

Conexión automática al iniciar el sistema

Para permitir que el cliente OpenConnect VPN se conecte automáticamente al servidor en el momento del arranque, podemos crear una unidad de servicio systemd.

sudo nano /etc/systemd/system/openconnect.service

Ponga las siguientes líneas en el archivo. Reemplace el texto rojo.

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target systemd-resolved.service
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin'
  ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 && /usr/bin/pkill -SIGINT openconnect && /sbin/ip route flush 12.34.56.78'
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Guarde y cierre el archivo. Luego habilite este servicio para que se inicie en el momento del arranque.

sudo systemctl enable openconnect.service

Explicación del contenido del archivo:

  • After=network-online.target systemd-resolved.service y Wants=network-online.target hacer que este servicio se ejecute después de que la red esté activa. Queremos el openconnect.service comenzar después del systemd-resolved.service porque eso garantizará que la dirección del servidor DNS establecida por OpenConnect no sea anulada por systemd-resolved.service .
  • En realidad, este servicio aún puede ejecutarse antes de que la red esté activa. Agregamos Restart=always y RestartSec=2 para reiniciar este servicio después de 2 segundos si este servicio falla.
  • Systemd no reconoce la redirección de tuberías, por lo que en ExecStart directiva, envolvemos el comando entre comillas simples y lo ejecutamos con el shell Bash.
  • Dado que el cliente OpenConnect VPN se ejecutará como un servicio systemd, que se ejecuta en segundo plano, no es necesario agregar -b marca al openconnect comando.
  • La parada ejecutiva La directiva es para detener la conexión VPN. Primero, usamos resolvconf Comando para revertir la configuración del servidor DNS. tun0 es el nombre predeterminado para el dispositivo TUN, que puede ver con ip link dominio. Luego usamos pkill comando para detener openconenct proceso. Por último, restauramos la tabla de enrutamiento del kernel de Linux con ip route flush dominio. Reemplazar 12.34.56.78 con la dirección IP de su servidor VPN.

Para iniciar este servicio de Systemd inmediatamente, ejecute

sudo systemctl start openconnect

Para detener este servicio de Systemd, ejecute

sudo systemctl stop openconnect

Reinicio automático cuando se cae la conexión VPN

A veces, la conexión VPN se interrumpía por varios motivos. Para que el cliente VPN se reinicie automáticamente, edite el archivo crontab del usuario raíz.

sudo crontab -e

Agregue la siguiente línea al final de este archivo.

* * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect

Este trabajo de Cron se ejecutará cada minuto para verificar si el cliente VPN puede hacer ping a la dirección IP privada del servidor VPN (10.10.10.1). Si el ping no tiene éxito, se ejecutará el comando de la derecha para reiniciar el cliente VPN. || es el operador OR en Bash. Ejecuta el comando de la derecha solo si el comando de la izquierda devolvió un error.

Guarde y cierre el archivo.

Cliente de GUI OpenConnect para Windows y MacOS

Se pueden descargar desde la página Github de OpenConnect GUI.

Velocidad

OpenConnect VPN es bastante rápido. Puedo usarlo para ver videos 4k en YouTube. Como puedes ver, la velocidad de conexión es 63356 Kbps , que se traduce en 61 Mbit/s .

Y aquí están los resultados de la prueba en speedtest.net.

Optimización de velocidad

OpenConnect usa de forma predeterminada TLS sobre el protocolo UDP (DTLS) para lograr una velocidad más rápida, pero UDP no puede proporcionar una transmisión confiable. TCP es más lento que UDP pero puede proporcionar una transmisión confiable. Un consejo de optimización que puedo darle es deshabilitar DTLS, usar TLS estándar (sobre TCP) y luego habilitar TCP BBR para aumentar la velocidad de TCP.

Para deshabilitar DTLS, comente (agregue el símbolo # al principio) la siguiente línea en el archivo de configuración de ocserv.

udp-port = 443

Guarde y cierre el archivo. Luego reinicie el servicio ocserv.

sudo systemctl restart ocserv.service

Para habilitar TCP BBR, consulte el siguiente tutorial.

  • Cómo aumentar fácilmente el rendimiento de la red de Ubuntu habilitando TCP BBR

En mi prueba, TLS estándar con TCP BBR habilitado es dos veces más rápido que DTLS.

Renovación automática del certificado Let's Encrypt

Edite el archivo crontab del usuario root.

sudo crontab -e

Agregue la siguiente línea al final del archivo. Es necesario reiniciar el servicio ocserv para que el servidor VPN obtenga un nuevo certificado y archivo de clave.

@daily certbot renew --quiet && systemctl restart ocserv

Consejos para solucionar problemas

Tenga en cuenta que si está utilizando OpenVZ VPS, asegúrese de habilitar el dispositivo de red virtual TUN en el panel de control de VPS.

Si encuentra algún problema, verifique el registro del servidor OpenConnect VPN.

sudo journalctl -xe -u ocserv.service

Descubrí que si cambio el puerto 443 a un puerto diferente, el gran firewall de China bloqueará esta conexión VPN.

Si ocserv le dice que no puede cargar el /etc/ocserv/ocserv.conf archivo, puede detener ocserv.

sudo systemctl stop ocserv

Luego, ejecútelo en primer plano con la depuración habilitada.

sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10

Entonces la salida podría darle algunas pistas de por qué ocserv no funciona.

Permita que el servidor OpenConnect VPN y el servidor web usen el puerto 443 al mismo tiempo

Lea el siguiente artículo:

  • Ejecute OpenConnect VPN Server y Apache/Nginx en la misma caja con HAProxy

Cómo deshabilitar TLS 1.0 y TLS 1.1 en ocserv

El consejo PCI desechó TLS 1.0 el 30 de junio de 2018 y los principales navegadores web deshabilitarán TLS 1.0 y TLS 1.1 en 2020. Deberíamos hacer lo mismo con el servidor VPN. Edite el archivo de configuración principal.

sudo nano /etc/ocserv/ocserv.conf

Busque la siguiente línea:

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"

Para deshabilitar TLS 1.0 y TLS 1.1 en el servidor OpenConnect VPN, simplemente agregue -VERS-TLS1.0 y -VERS-TLS1.1 en la fila.

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"

Guarde y cierre el archivo. Luego reinicie ocserv.

sudo systemctl restart ocserv

Ahora ocserv solo aceptará TLS 1.2. Para obtener más información sobre la configuración del parámetro TLS en ocserv, consulte Cadenas de prioridad GnuTLS.

Para verificar si TLS 1.0 es compatible con su servidor OpenConnect VPN, ejecute el siguiente comando.

openssl s_client -connect vpn.your-domain.com:443 -tls1

Y comprueba TLS 1.1

openssl s_client -connect vpn.your-domain.com:443 -tls1_1

Si ve el siguiente mensaje en el resultado, eso significa que la versión TLS no es compatible.

New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported

Traté de habilitar TLS 1.3, pero aún no es compatible con el paquete ocserv en Ubuntu.

Configuración por usuario o por grupo

Ocserv permite configuraciones por usuario y por grupo. Para habilitar esta característica, descomente las siguientes dos líneas en /etc/ocserv/ocserv.conf archivo.

config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

Guarde y cierre el archivo. Luego cree el directorio de configuración por usuario y por grupo.

sudo mkdir /etc/ocserv/config-per-user/
sudo mkdir /etc/ocserv/config-per-group/

A continuación, puede crear un archivo en estos dos directorios. Por ejemplo, cree el user1 archivo para permitir la configuración personalizada para user1 .

sudo nano /etc/ocserv/config-per-user/user1

También puede crear el group1 archivo para permitir la configuración personalizada para el grupo llamado group1 .

sudo nano /etc/ocserv/config-per-group/group1

Puede agregar algo como a continuación en el archivo.

route = 10.10.10.0/255.255.255.0

Esto significa que después de user1 conéctese a este servidor VPN, solo tráfico al 10.10.10.0/24 la red se enrutará a través del servidor VPN. El tráfico a otras direcciones IP se enruta a través de la puerta de enlace original. Uso este truco para permitir que mi otro VPS (servidor privado virtual) se conecte a este servidor VPN sin interrumpir el tráfico normal, por lo que el dispositivo sintonizador (vpns0) de mi servidor VPN siempre está encendido, lo que significa que mi servidor VPN siempre tendrá la dirección IP privada 10.10.10.1.

Guarde y cierre el archivo. Reinicie ocserv para que los cambios surtan efecto.

sudo systemctl restart ocserv

Alojamiento virtual

Para agregar un nuevo host virtual en ocserv, primero debe usar el método del paso 3 para obtener un certificado TLS para el nuevo host virtual. Luego edite el archivo de configuración de ocserv.

sudo nano /etc/ocserv/ocserv.conf

Vaya al final de este archivo. En el editor de texto Nano, puede presionar Ctrl+W , luego Ctrl+V para saltar al final de un archivo. Agregue las siguientes líneas. Reemplace vpn2.example.com con el nombre de host del segundo host virtual.

[vhost:vpn2.example.com]
#Allow password authentication and certificate authentication
enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]"
auth = "certificate"

tcp-port = 443

#uncomment the two lines if ocserv runs behind HAProxy.
#listen-host = 127.0.0.1
#listen-proxy-proto = true

# SSL/TLS configuration
ca-cert = /etc/ocserv/ssl/ca-cert.pem
server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem
cert-user-oid = 0.9.2342.19200300.100.1.1

#Networking configuration. Use a different network range for this virtual host. 
device = vpns
ipv4-network = 10.10.20.0
ipv4-netmask = 255.255.255.0
route = default
dns = 8.8.8.8
tunnel-all-dns = true

compression = true
max-clients = 0
max-same-clients = 0
try-mtu-discovery = true
idle-timeout=1200
mobile-idle-timeout=2400

config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

Guarde y cierre el archivo. Luego reinicie ocserv.

sudo systemctl restart ocserv

Edite el archivo de configuración de UFW.

sudo nano /etc/ufw/before.rules

Encuentra el ufw-before-forward cadena en este archivo y agregue las siguientes 2 líneas, que aceptarán el reenvío de paquetes si la IP de origen o la IP de destino están en 10.10.20.0/24 rango.

-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT

Guarde y cierre el archivo. Luego reinicie UFW.

sudo systemctl restart ufw

Tenga en cuenta que el demonio ocserv podría indicarle que se ignorarán algunos parámetros para el host virtual. Sin embargo, descubrí que algunos de los parámetros ignorados son realmente necesarios. Por ejemplo, si elimina el device = vpns desde el host virtual, es posible que encuentre el siguiente error al establecer una conexión VPN con el host virtual.

VPN service unavailable; reason: Server configuration error

Y el servidor VPN generaría el siguiente mensaje de error en el registro.

no networks are configured; rejecting client

Tenga en cuenta también que el cliente AnyConnect VPN en iOS no es compatible con TLS SNI, por lo que los usuarios de iOS se conectarán al host virtual predeterminado.

Cómo ejecutar varias instancias de ocserv

Un proceso ocserv puede vincularse a un solo puerto TCP o UDP en su servidor. Si desea permitir que ocserv se vincule a varios puertos TCP o UDP, debe ejecutar varios procesos de ocserv. Es muy sencillo. Copie el /lib/systemd/system/ocserv.service a un archivo nuevo.

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service

Luego edite el nuevo archivo.

sudo nano /etc/systemd/system/ocserv2.service

Cambiar

/etc/ocserv/ocserv.conf

a

/etc/ocserv/ocserv2.conf

Guarde y cierre el archivo. A continuación, puede editar el /etc/ocserv/ocserv2.conf y agregue sus configuraciones personalizadas. Una vez que haya terminado, inicie el segundo servicio ocserv.

sudo systemctl start ocserv2

Ubuntu
  1. Cómo configurar WireGuard VPN en Ubuntu (una guía paso a paso)

  2. Cómo configurar un servidor VPN IKEv2 con StrongSwan en Ubuntu 22.04

  3. Configurar OpenConnect VPN Server (ocserv) en Debian 11 Bullseye

  4. Configurar OpenConnect VPN Server (ocserv) en Debian 10 Buster

  5. Asegure Nginx con Let's Encrypt en Ubuntu 18.04 - ¿Cómo hacerlo?

Instale el servidor LAMP con Let's Encrypt Free SSL en Ubuntu 18.04

Cómo configurar un servidor Seafile con Nginx en Ubuntu 18.04

Cómo configurar un servidor FTP con ProFTPD en Ubuntu 18.04

Cómo configurar un servidor de correo con Modoboa en Ubuntu 20.04

Cómo proteger Nginx con Let's Encrypt en Ubuntu 20.04

Cómo proteger Apache con Let's Encrypt en Ubuntu 20.04