GNU/Linux >> Tutoriales Linux >  >> Debian

Configurar OpenConnect VPN Server (ocserv) en Debian 11 Bullseye

Este tutorial le mostrará cómo ejecutar su propio servidor VPN instalando el servidor OpenConnect VPN en Debian 11 Bullseye . Servidor VPN OpenConnect, también conocido como ocserv , es una implementación de código abierto del protocolo Cisco AnyConnnect VPN, que se usa ampliamente en empresas y universidades. AnyConnect es un protocolo VPN basado en SSL que permite a los usuarios individuales conectarse a una red remota.

¿Por qué configurar su propio servidor VPN?

  • Tal vez usted es un proveedor de servicios VPN o un administrador del sistema, lo que le corresponde configurar su propio servidor VPN.
  • No confía en la política de no registro de los proveedores de servicios de VPN, por lo que opta por el autohospedaje.
  • Puede usar VPN para implementar la política de seguridad de la red. Por ejemplo, si ejecuta su propio servidor de correo electrónico, puede solicitar a los usuarios que inicien sesión solo desde la dirección IP del servidor VPN creando una lista blanca de direcciones IP en el firewall. Por lo tanto, su servidor de correo electrónico se fortalece para evitar actividades de piratería.
  • Quizás solo tenga curiosidad por saber cómo funciona el servidor VPN.

Características del servidor OpenConnect VPN

  • Ligero y rápido. En mi prueba, puedo ver videos 4K de YouTube con OpenConnect VPN. YouTube está bloqueado en mi país (China).
  • Se ejecuta en Linux y la mayoría de los servidores BSD.
  • Compatible con el cliente Cisco AnyConnect
  • Existe el software de cliente OpenConnect para Linux, macOS, Windows y OpenWRT. Para Android e iOS, puede utilizar Cisco AnyConnect Client.
  • Admite autenticación de contraseña y autenticación de certificado
  • Admite contabilidad RADIUS.
  • Fácil de configurar para administradores de sistemas
  • Proceso de configuración fácil para los usuarios finales.
  • OpenConnect VPN se puede configurar para operar en el puerto TCP 443 y utiliza el protocolo TLS estándar para cifrar el tráfico de red. Parece un protocolo HTTPS estándar, lo que dificulta su bloqueo.

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 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

También hay un cliente VPN OpenConnect para Fedora, RHEL, CentOS, Arch Linux y OpenSUSE. Puede instalarlo fácilmente con su administrador de paquetes.

sudo dnf install openconnect
sudo yum install openconnect
sudo pacman -S openconnect

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 Debian 11 Bullseye, 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:Instale OpenConnect VPN Server en Debian 11 Bullseye

Inicie sesión en su servidor Debian 11 Bullseye a través de SSH. Luego usa apt para instalar el ocserv paquete del repositorio de Debian.

sudo apt update
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 Sat 2021-09-25 21:35:29 EDT; 8s ago
       Docs: man:ocserv(8)
   Main PID: 52509 (ocserv-main)
      Tasks: 2 (limit: 1095)
     Memory: 2.0M
        CPU: 12ms
     CGroup: /system.slice/ocserv.service
             ├─52509 ocserv-main
             └─52519 ocserv-sm

Sugerencia:si el comando anterior no se cierra de inmediato, puede presionar Q clave para recuperar el control de la terminal.

Si no se está ejecutando, puede iniciarlo con:

sudo systemctl start ocserv

De forma predeterminada, el servidor OpenConnect VPN escucha en los puertos TCP y UDP 443. Si un servidor web utiliza el puerto 443, es posible que el servidor VPN no pueda iniciarse. Más adelante veremos cómo cambiar el puerto en el archivo de configuración de OpenConnect VPN.

Paso 2:Instale el cortafuegos UFW

Hay varias soluciones de cortafuegos disponibles para Linux. Usaré UFW, que es una parte frontal del firewall de iptables y es fácil de administrar. Instale UFW en Debian con:

sudo apt install ufw

Primero, debe permitir el tráfico SSH.

sudo ufw allow 22/tcp

Luego, debe abrir los puertos TCP 80 y 443.

sudo ufw allow 80,443/tcp

A continuación, habilite UFW.

sudo ufw enable

Paso 3:Instale el cliente Let's Encrypt (Certbot) en el servidor Debian 11 Bullseye

El gnutls-bin paquete instalado junto con ocserv proporciona herramientas para crear su propia CA y certificado de servidor, pero nosotros obtendremos e instalaremos Let's Encrypt certificado. 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.

Ejecute los siguientes comandos para instalar el cliente Let's Encrypt (certbot) en Debian 11.

sudo apt install certbot

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

certbot --version

Salida de muestra:

certbot 1.12.0

Paso 4:obtenga un certificado TLS de confianza de Let's Encrypt

Puede usar el standalone , apache o nginx complemento para obtener el certificado TLS. En los siguientes textos, debe reemplazar example.com con su nombre de dominio real.

Complemento independiente

Si no hay un servidor web ejecutándose en su servidor Debian 11 Bullseye 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. Establecer un registro DNS A para vpn.example.com en el sitio web de su registrador de dominio, luego ejecute el siguiente comando para obtener el certificado.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -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 utilizará el puerto 80.
  • --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.

Si encuentra el siguiente error, significa que hay un servidor web que ya está usando el puerto 80, por lo que debe usar el complemento webroot para obtener el certificado TLS.

Problem binding to port 80: Could not bind to IPv4 or IPv6.

Uso del complemento webroot

Si su servidor Debian 11 Bullseye tiene un servidor web escuchando en los puertos 80 y 443, entonces es una buena idea usar el complemento webroot para obtener un certificado porque el complemento webroot funciona con casi 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 servidor web, entonces necesita instalar el complemento Certbot Apache.

sudo apt install python3-certbot-apache

Cree un host virtual en /etc/apache2/sites-available/ directorio.

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/ocserv
</VirtualHost>

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

sudo mkdir /var/www/ocserv

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

sudo chown www-data:www-data /var/www/ocserv -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 de apache.

sudo certbot certonly -a apache --agree-tos --email [email protected] -d vpn.example.com

Nginx

Si está utilizando Nginx servidor web, entonces necesita instalar el complemento Certbot Nginx.

sudo apt install python3-certbot-nginx

crear host virtual en /etc/nginx/conf.d/ .

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/ocserv/;

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

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

sudo mkdir /var/www/ocserv

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

sudo chown www-data:www-data /var/www/ocserv -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 Certbot Nginx.

sudo certbot certonly -a nginx --agree-tos --email [email protected] -d vpn.example.com

Paso 5:Edite el archivo de configuración del servidor VPN de OpenConnect

Edite el archivo de configuración de ocserv.

sudo nano /etc/ocserv/ocserv.conf

Primero, necesitamos configurar 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 Debian 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]"

En el paso 6, usaremos el 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. Si desea habilitar la autenticación de certificados, 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 (hay un servidor web que usa el puerto 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 128. Establecer en cero para ilimitado.

max-clients = 128

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

De forma predeterminada, los paquetes keepalive se envían cada 300 segundos (5 minutos). Prefiero usar un tiempo corto (30 segundos) para reducir la posibilidad de que se corte la conexión VPN.

keepalive = 30

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

try-mtu-discovery = false

Puede establecer el tiempo que un cliente puede permanecer inactivo antes de desconectarse a través de los siguientes dos parámetros. Si prefiere que el cliente permanezca conectado indefinidamente, comente estos dos parámetros.

idle-timeout=1200
mobile-idle-timeout=1800

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 (como 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

De forma predeterminada, ocserv utiliza servidores DNS públicos 8.8.8.8 (Google) y 1.1.1.1 (Cloudflare), lo cual está bien.

dns = 8.8.8.8
dns = 1.1.1.1

Nota :si es un proveedor de servicios VPN, es una buena práctica ejecutar su propio sistema de resolución de DNS. 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 carácter # al comienzo de las siguientes líneas), lo que configurará el servidor como la puerta de enlace predeterminada para los clientes.

#route = 10.0.0.0/8
#route = 172.16.0.0/12
#route = 192.168.0.0/16
#route = fd00::/8
#route = default

#no-route = 192.168.5.0/255.255.255.0

Guarde y cierre el archivo. Luego reinicie el servidor VPN para que los cambios surtan efecto.

sudo systemctl restart 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 en el kernel de Linux

Para que el servidor VPN enrute paquetes entre el cliente VPN e Internet, 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. El -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 enmascaramiento de IP en el cortafuegos

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. Busque el nombre de la interfaz de red principal de su servidor.

ip -c a

Como puede ver, se llama eth0 en mi servidor Debian.

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. En el editor de texto Nano, puede ir al final del archivo presionando Ctrl+W , luego presionando Ctrl+V .

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

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

Reemplazar eth0 con su propio nombre de interfaz de red.

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 reinicie 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.

UFW puede tardar algún tiempo en procesar las reglas del cortafuegos. Si la regla de enmascaramiento no aparece, reinicie UFW nuevamente (sudo systemctl restart ufw ).

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.

Para aquellos de ustedes que ejecutan una resolución de DNS local, si especificaron 10.10.10.1 como servidor DNS para clientes VPN, entonces deben 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; };

Cliente de GUI OpenConnect para Windows y macOS

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

Cómo instalar y usar el cliente OpenConnect VPN en Debian 11 Bullseye Desktop

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

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

Por defecto, el cliente de openconnect contactará el puerto 443 del servidor. Si configuró un puerto diferente para el servidor, puede agregar el número de puerto.

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 60, Keepalive 300
Connected as 10.10.10.139, using SSL + LZ4, with DTLS + LZ4 in progress
Continuing in background; pid 17050

Si la conexión falla, puede consultar el registro de ocserv para averiguar por qué. (Quizás no ingresó la contraseña correctamente).

sudo journaltcl -eu ocserv

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, 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
  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'
  KillSignal=SIGINT
  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 y Wants=network-online.target hacer que este servicio se ejecute después de que la red esté activa.
  • 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ía. Así que en el 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 KillSignal directiva le dice a Systemd que envíe el SIGINT señal cuando el systemctl stop openconnect se emite el comando. Esto realizará un apagado limpio al cerrar la sesión y restaurar la configuración del servidor DNS y la tabla de enrutamiento del kernel de Linux.

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.

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. Tenga en cuenta que debe deshabilitar DTLS en ocserv o TCP BBR no funcionará.

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

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

Otro factor muy importante que afecta la velocidad es qué tan buena es la conexión entre su computadora local y el servidor VPN. Si vive en el Medio Oriente y el servidor VPN está ubicado en los EE. UU., la velocidad sería lenta. Elija un centro de datos que esté cerca de donde vive.

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 para ejecutar el trabajo Cron diariamente. Si el certificado va a caducar en 30 días, certbot intentará renovar el certificado. 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 usa Vultr VPS, entonces tiene VPS basado en KVM, por lo que no tiene que preocuparse por esto).

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

sudo journalctl -eu 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.

Haga 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:-RSA:-VERS-SSL3.0:-ARCFOUR-128"

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:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1"

Guarde y cierre el archivo. Luego reinicie ocserv.

sudo systemctl restart ocserv

Ahora ocserv solo aceptará TLS 1.3 y 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

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/ /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. Esto se conoce como tunelización dividida, que es útil cuando:

  • Solo desea que los clientes VPN puedan navegar por los recursos internos y no quiere que todo el tráfico pase por el servidor VPN.
  • Necesita crear una red privada para servidores en la nube.
  • El cliente debe conectarse a varias VPN. Una VPN podría usar túneles divididos y la otra usar un túnel completo.

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


Debian
  1. Configure un servidor VPN en su PC con Linux

  2. Cómo configurar un servidor Samba en Debian 10 Buster

  3. Cómo configurar un servidor SFTP en Debian 11 Server

  4. Cómo configurar un servidor OpenVPN en Debian 10

  5. Configurar un servidor de correo con PostfixAdmin en Debian 9

Configure la autenticación de certificado en OpenConnect VPN Server (ocserv)

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

Configure OpenConnect VPN Server (ocserv) en Ubuntu 20.04 con Let's Encrypt

Instale Plex Media Server en Debian 11 Bullseye

Cómo instalar el servidor MySQL 8.0 en Debian 11 Bullseye

Cómo configurar WireGuard VPN en Debian 11