Este tutorial le mostrará cómo ejecutar su propio servidor VPN instalando el servidor OpenConnect VPN en Debian 10 Buster. 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
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 10 buster, 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 10 Buster
Inicie sesión en su servidor Debian 10 Buster 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 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
Sugerencia:si el comando anterior no se cierra de inmediato, puede presionar la tecla Q para recuperar el control de la terminal.
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.
Si hay un firewall ejecutándose en su servidor, deberá abrir los puertos 80 y 443. Por ejemplo, si usa UFW, ejecute los siguientes comandos.
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
Paso 2:Instale el cliente Let's Encrypt (Certbot) en Debian 10 Buster Server
El gnutls-bin
paquete instalado junto con ocserv
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.
Ejecute los siguientes comandos para instalar el cliente Let's Encrypt (certbot) en Debian 10.
sudo apt install certbot
Para verificar el número de versión, ejecute
certbot --version
Salida de muestra:
certbot 0.31.0
Paso 3:obtenga un certificado TLS de confianza de Let's Encrypt
Recomiendo usar el standalone
o webroot
complemento para obtener el certificado TLS.
Complemento independiente
Si no hay un servidor web ejecutándose en su servidor Debian 10 Buster y desea que el servidor OpenConnect VPN use el puerto 443, entonces puede usar el complemento independiente para obtener el certificado TLS de Let's Encrypt. Establezca un registro DNS A para vpn.yourdomain.com en el sitio web del registrador de su 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.
Uso del complemento webroot
Si su servidor Debian 10 Buster 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 el servidor web 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 webroot.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d vpn.example.com -w /var/www/ocserv/
Nginx
Si está utilizando el servidor web Nginx, cree un 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 webroot.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d vpn.example.com -w /var/www/ocserv/
Paso 4: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, 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 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]"
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. 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
Cambiar la dirección de resolución de DNS. Puede utilizar el servidor DNS público de Google.
dns = 8.8.8.8 dns = 8.8.4.4
o el servidor DNS público de Cloudflare.
dns = 1.1.1.1 dns = 1.0.0.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. A continuación, reinicie el servidor VPN para que se apliquen los cambios.
sudo systemctl restart ocserv
Paso 5: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 6: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. 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 7: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. Usaré UFW, que es una parte frontal del firewall de iptables. Instale UFW en Debian 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 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. 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.
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 8: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; };
Cómo instalar y usar el cliente OpenConnect VPN en Debian 10 Buster 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
yWants=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
yRestartSec=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 alopenconnect
comando. - La
KillSignal
directiva le dice a Systemd que envíe elSIGINT
señal cuando elsystemctl 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.
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. 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 Kamatera 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/ 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. 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.
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