Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos

Introducción OpenVPN es un software extremadamente popular y con todas las funciones de SSL VPN (red privada virtual). Implementa la extensión de red segura OSI capa 2 o 3 utilizando el protocolo SSL / TLS. Como muchos otros programas populares, es de código abierto, software gratuito y se distribuye bajo la GNU GPL. Una VPN le permite conectarse de forma segura a una red pública insegura, como una red wifi en el aeropuerto u hotel. En muchas empresas y oficinas gubernamentales, se necesita una VPN para acceder a los recursos de su servidor corporativo. Otro uso generalizado para evitar los sitios / aplicaciones geobloqueados y aumentar su privacidad o seguridad en línea. Este tutorial proporciona instrucciones paso a paso para configurar un servidor OpenVPN en el servidor Ubuntu Linux 20.04 LTS.

 

Procedimiento: Ubuntu 20.04 LTS configura el servidor OpenVPN en 5 minutos

Los pasos son los siguientes:

Paso 1: actualice su sistema

Primero, ejecute el comando apt para aplicar actualizaciones de seguridad:

 

sudo apt update
sudo apt upgrade

Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos

Paso 2: busque y anote su dirección IP

Use the ip command as follows:
ip a
ip a show eth0

Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos

Una nota sobre la dirección IP asignada a su servidor

La mayoría de los servidores en la nube y sin sistema operativo tienen dos tipos de direcciones IP proporcionadas por el ISP:

  • Dirección IP pública estática asignada directamente a su caja y enrutada desde Internet. Por ejemplo, Linode, Digital Ocean y otros le brindan una dirección IP pública directa.
  • Dirección IP estática privada directamente adjunta a su servidor y su servidor está detrás de NAT con dirección IP pública. Por ejemplo, AWS EC2 / Lightsail le proporciona este tipo de dirección IP pública NAT.

El script detectará automáticamente su configuración de red. Todo lo que tiene que hacer es proporcionar una dirección IP correcta cuando se le solicite.

Paso 3: descargue y ejecute el script openvpn-install.sh

I am going to use the wget command as follows:
wget https://git.io/vpn -O openvpn-ubuntu-install.sh
Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos
Ahora descargamos el script y es momento de hacerlo ejecutable.
Por lo tanto, configure los permisos con el comando chmod:

chmod -v +x openvpn-ubuntu-install.sh
mode of 'openvpn-ubuntu-install.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)

Uno puede ver el script usando un editor de texto como nano / vim:
nano openvpn-ubuntu-install.sh

Ejecute el script openvpn-ubuntu-install.sh para instalar el servidor OpenVPN

Ahora todo lo que tienes que hacer es:

sudo ./openvpn-ubuntu-install.sh
Sesión de muestra de AWS / Lightsail donde mi servidor en la nube está detrás de NAT:
Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos
Sesión de muestra del servidor Linode / DO donde el servidor en la nube tiene una dirección IPv4 pública directa:
Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos
Le sugiero encarecidamente que siempre elija la opción de servidor DNS como 1.1.1.1 o Google DNS o cualquier otro servicio DNS siempre que confíe según sus necesidades. Asegúrese de elegir servidores DNS geo-distribuidos rápidos y accesibles desde cualquier lugar de Internet. Al final deberíamos ver la siguiente información:

Your client configuration is available at: /root/linuxdesktop.ovpn
If you want to add more clients, just run this script again!

¿Cómo inicio / paro / reinicio el servidor OpenVPN en Ubuntu 20.04 LTS?

Necesitamos usar el comando systemctl de la siguiente manera:

Stop the OpenVPN server

sudo systemctl stop openvpn-server@server.service

Start the OpenVPN server

sudo systemctl start openvpn-server@server.service

Restart the OpenVPN server after changing configuration options

sudo systemctl restart openvpn-server@server.service

Show status of the OpenVPN server

sudo systemctl status openvpn-server@server.service

 openvpn-server@server.service - OpenVPN service for server
     Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-06-16 09:01:19 UTC; 4min 39s ago
       Docs: man:openvpn(8)
             https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
             https://community.openvpn.net/openvpn/wiki/HOWTO
   Main PID: 1982 (openvpn)
     Status: "Initialization Sequence Completed"
      Tasks: 1 (limit: 2282)
     Memory: 1.1M
     CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service
             └─1982 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Socket Buffers: R=[212992->212992] S=[212992->212992]
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UDPv4 link local (bound): [AF_INET]172.104.177.197:1194
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UDPv4 link remote: [AF_UNSPEC]
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: GID set to nogroup
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UID set to nobody
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: MULTI: multi_init called, r=256 v=256
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL IPv6: (IPv4) size=252, size_ipv6=65536, netbits=64, base_ipv6=fddd:1194:1194:1194::1000
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=1
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL LIST
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Initialization Sequence Completed

Paso 4: conecte un servidor OpenVPN utilizando un cliente de escritorio iOS / Android / Linux / Windows

En el servidor encontrará un archivo de configuración del cliente llamado /root/linuxdesktop.ovpn. Todo lo que tienes que hacer es copiar este archivo en tu escritorio local usando el comando scp:
scp root@172.104.177.197:/root/linuxdesktop.ovpn .
Si root no puede iniciar sesión en el servidor, pruebe el siguiente comando scp:
ssh vivek@172.104.177.197 "sudo -S cat /root/linuxdesktop.ovpn" > linuxdesktop.ovpn
A continuación, proporcione este archivo a su cliente OpenVPN para que se conecte:

  1. Apple iOS client
  2. Android client
  3. Apple MacOS (OS X) client
  4. Windows 8/10 client

¿No puede vincular el servicio al puerto VPN?

Sería útil si fuerza a Linux a vincular una dirección IP que no existe con la opción net.ipv4.ip_nonlocal_bind del kernel de Linux. Por ejemplo, durante el tiempo de inicio (arranque) de Ubuntu 20.04 LTS, es posible que las direcciones IP de OpenVPN como 10.8.0.1/32 no estén disponibles para servicios como HTTPD o SSHD. Edite el siguiente archivo:

$ sudo nano /etc/sysctl.d/1000-force-openvpn-bind.conf
## OR ##
$ sudo vim /etc/sysctl.d/1000-force-openvpn-bind.conf

Agregue lo siguiente:

net.ipv4.ip_nonlocal_bind=1

Vuelva a cargar los cambios con el comando sysctl:
$ sudo sysctl -p /etc/sysctl.d/1000-force-openvpn-bind.conf

Linux Desktop: OpenVPN client configuration

Primero, instale el cliente openvpn para su escritorio usando el comando yum / comando dnf / comando apt:
sudo dnf install openvpn
OR
sudo apt install openvpn
A continuación, copie desktop.ovpn de la siguiente manera:
sudo cp linuxdesktop.ovpn /etc/openvpn/client.conf
Test connectivity from the CLI:
sudo openvpn --client --config /etc/openvpn/client.conf
Su sistema Linux se conectará automáticamente cuando la computadora se reinicie usando el script / servicio openvpn:
sudo systemctl start openvpn@client <--- start client service

Paso 5: verificar / probar la conectividad

Simply visit this page to check your IP address and it much change to your VPN server IP address. Next, execute the following commands after connecting to OpenVPN server from your Linux desktop:
ping 10.8.0.1 #Ping to the OpenVPN server gateway
ip route #Make sure routing setup working
## the following must return public IP address of OpenVPN server ##
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos

Paso 6: cómo agregar o eliminar un nuevo usuario de VPN con un certificado

Debe ejecutar el mismo script nuevamente para agregar o eliminar un nuevo usuario de VPN al certificado TLS. Por ejemplo:
$ sudo ./openvpn-ubuntu-install.sh
You will see menu as follows:

OpenVPN is already installed.

Select an option:
   1) Add a new client
   2) Revoke an existing client
   3) Remove OpenVPN
   4) Exit
Option: 

Elija la opción n. ° 1 para agregar un nuevo cliente / usuario VPN y la opción n. ° 2 para eliminar el cliente y usuario VPN existentes. Agreguemos un nuevo cliente / usuario llamado iphone:
Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos

Una nota sobre la resolución de problemas del servidor OpenVPN y del cliente

Escriba los siguientes comandos en su servidor Ubuntu 20.04 Linux LTS. Primero, verifique el servidor OpenVPN para ver si hay errores:
sudo journalctl --identifier openvpn

-- Logs begin at Tue 2020-06-16 08:53:36 UTC, end at Tue 2020-06-16 09:09:57 UTC. --
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep  5 2019
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: library versions: OpenSSL 1.1.1f  31 Mar 2020, LZO 2.10
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Diffie-Hellman initialized with 2048 bit key
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: TUN/TAP device tun0 opened
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: TUN/TAP TX queue length set to 100
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: /sbin/ip link set dev tun0 up mtu 1500
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: /sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: /sbin/ip -6 addr add fddd:1194:1194:1194::1/64 dev tun0
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Could not determine IPv4/IPv6 protocol. Using AF_INET
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Socket Buffers: R=[212992->212992] S=[212992->212992]
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UDPv4 link local (bound): [AF_INET]45.79.125.234:1194
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UDPv4 link remote: [AF_UNSPEC]
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: GID set to nogroup
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: UID set to nobody
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: MULTI: multi_init called, r=256 v=256
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL IPv6: (IPv4) size=252, size_ipv6=65536, netbits=64, base_ipv6=fddd:1194:1194:1194::1000
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=1
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: IFCONFIG POOL LIST
Jun 16 09:01:19 sg-vpn-001 openvpn[1982]: Initialization Sequence Completed

¿La regla de firewall está configurada correctamente en su servidor? Utilice el comando cat para ver las reglas:
sudo cat /etc/systemd/system/openvpn-iptables.service
Config:

[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.104.177.197
ExecStart=/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT
ExecStart=/sbin/iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
ExecStart=/sbin/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStop=/sbin/iptables -t nat -D POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 172.104.177.197
ExecStop=/sbin/iptables -D INPUT -p udp --dport 1194 -j ACCEPT
ExecStop=/sbin/iptables -D FORWARD -s 10.8.0.0/24 -j ACCEPT
ExecStop=/sbin/iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStart=/sbin/ip6tables -t nat -A POSTROUTING -s fddd:1194:1194:1194::/64 ! -d fddd:1194:1194:1194::/64 -j SNAT --to 2400:8901::f03c:92ff:fe3e:cf92
ExecStart=/sbin/ip6tables -I FORWARD -s fddd:1194:1194:1194::/64 -j ACCEPT
ExecStart=/sbin/ip6tables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ExecStop=/sbin/ip6tables -t nat -D POSTROUTING -s fddd:1194:1194:1194::/64 ! -d fddd:1194:1194:1194::/64 -j SNAT --to 2400:8901::f03c:92ff:fe3e:cf92
ExecStop=/sbin/ip6tables -D FORWARD -s fddd:1194:1194:1194::/64 -j ACCEPT
ExecStop=/sbin/ip6tables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

Otra opción es ejecutar el comando iptables y los comandos del comando sysctl para verificar la configuración de la regla NAT en su servidor:
sudo iptables -t nat -L -n -v
sysctl net.ipv4.ip_forward
sudo cat /etc/sysctl.d/30-openvpn-forward.conf

Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos

NAT Firewall OpenVPN Rules Verification

Inserte las reglas si no se insertaron usando el siguiente comando:
sudo systemctl start openvpn-iptables.service
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -p -f /etc/sysctl.d/30-openvpn-forward.conf

¿Se está ejecutando el servidor OpenVPN y el puerto está abierto? Utilice el comando ss o el comando netstat y el comando pidof / comando ps:
netstat -tulpn | grep :1194 ## 1194 is the openvpn server port ##
ss -tulpn | grep :1194 ## 1194 is the openvpn server port ##
ps aux | grep openvpn ## is the openvpn server running? ##
ps -C openvpn ## is the openvpn server running? ##
pidof openvpn ## find the openvpn server PID ##

Ubuntu 20.04 LTS configurar un servidor OpenVPN en 5 minutos
Si no se está ejecutando, reinicie el servidor OpenVPN:
sudo systemctl restart openvpn-server@server.service
Esté atento a los errores:
sudo systemctl status openvpn-server@server.service
¿Puede el cliente de escritorio Linux conectarse a la máquina del servidor OpenVPN? Primero debe ejecutar una prueba simple para ver si el puerto del servidor OpenVPN (UDP 1194) acepta conexiones:
nc -vu 172.104.177.197 1194
Connection to 172.104.177.197 port [udp/openvpn] succeeded!

Si no está conectado, significa que un firewall de escritorio de Linux o su enrutador está bloqueando el acceso al servidor. Asegúrese de que tanto el cliente como el servidor utilicen el mismo protocolo y puerto, p. Ej. Puerto UDP 1194.

Deja un comentario