Cómo configurar el servidor y cliente WireGuard VPN en Ubuntu 20.04

Configure una VPN autohospedada usando Wireguard

A VPN (red privada virtual) permite al usuario conectarse a una red privada de forma remota como si la computadora del usuario estuviera conectada directamente a la red privada. La tecnología se desarrolló inicialmente para permitir el acceso remoto a la red privada interna de una empresa, para los empleados que no están realmente presentes en la ubicación de la red interna.

Se implementa un servidor VPN en la ubicación de la red interna. Este servidor está en la red pública y el empleado puede acceder mediante un cliente VPN. Se necesita autenticación para conectarse al servidor VPN. La comunicación entre el servidor VPN y el cliente VPN se protege mediante un protocolo de túnel. Tenga en cuenta que esta comunicación puede estar cifrada o no, pero generalmente en la mayoría de los protocolos VPN está cifrada.

Otro uso de VPN es ganar el anonimato al acceder a Internet o para eludir las restricciones geográficas impuestas al acceder a algunos sitios web. En tales casos, la red a la que el usuario desea conectarse no es una red privada, sino Internet.

Se han desarrollado muchos protocolos VPN a lo largo de los años. Estos protocolos utilizan diferentes protocolos de tunelización y algoritmos de cifrado para la comunicación entre el servidor y el cliente.

Uno de estos protocolos, que está ganando un amplio uso recientemente, es Wireguard. Wireguard es más ligero, más simple y más eficaz que los conocidos protocolos VPN utilizados tradicionalmente, como OpenVPN, IPSec. Ya está implementado para Windows, Mac OS y una gran cantidad de distribuciones de Linux. En Linux, se implementa como un módulo de kernel. Está disponible en los repositorios oficiales de Ubuntu 20.04.

En este artículo, veremos cómo configurar un servidor y cliente Wireguard VPN en Ubuntu 20.04.

Instalación

Para este artículo, estoy configurando un servidor Wireguard en Ubuntu 20.04 Linode y Wireguard Client en mi máquina local con Ubuntu 20.04.

El paquete guarda alambre instala Wireguard Server y Client. Ejecute el siguiente comando tanto en la máquina servidor como en la máquina cliente.

sudo apt instalar protector de alambre

Configuración del servidor

Llaves de seguridad

Necesitamos generar un conjunto de pares de claves públicas / privadas para autenticar y asegurar la conexión Wireguard. Esto se puede hacer usando los siguientes comandos:

sudo su cd / etc / wireguard umask 077 wg genkey | tee clave_privada | wg pubkey> public_key

Tenga en cuenta que estamos haciendo todas las tareas de configuración como superusuario. El motivo es que el acceso al directorio / etc / wireguard está impedido para los usuarios normales, y el acceso al directorio no se puede obtener con solo privilegios sudo para un usuario normal.

A continuación, configuramos la máscara de creación de archivos en 077. Esto significa que cada vez que un proceso crea un nuevo archivo en esta carpeta, sus permisos se enmascararán automáticamente con 077. Ej. si se crea un archivo en esta carpeta con los permisos 777, se enmascara automáticamente y los permisos se convierten efectivamente en 700. Esto se hace para que solo el propietario del archivo tenga todos los permisos sobre el archivo y todos los demás no tengan permisos.

En la siguiente línea generamos el par de claves pública / privada para el servidor. Se guardan en archivos llave privada y Llave pública. Para ver las claves, ejecute:

gato llave_privada gato llave_ publica

Copie la clave privada, la necesitamos en el siguiente paso.

Nota: ¡Nunca comparta su clave privada públicamente!

Archivo de configuración

Creemos un archivo de configuración para Wireguard Server. Puede elegir cualquier nombre para el archivo. Crearemos un archivo wg0.conf en este ejemplo.

vim wg0.conf

Agregue lo siguiente al archivo.

[Interfaz] Dirección = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A ADELANTE -i wg0 -j ACEPTAR; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACEPTAR; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACEPTAR; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

Pegue la clave privada que copiamos previamente en la línea 5 del código anterior.

Tenemos que configurar Wireguard en una subred diferente (virtual) que la dirección IP del servidor. Aquí, he usado 10.20.43.1 para el servidor y usaré 10.20.43.2 para el cliente. Aquí se puede utilizar cualquier subred. Para obtener la dirección IP del servidor y la interfaz, ejecute:

ifconfig

Anote la dirección IP del servidor. Esto es necesario durante la configuración del cliente.

La interfaz utilizada por el servidor, como se ve en la imagen de arriba, es eth0. El nombre de la interfaz puede diferir según la red del usuario, puede ser wlan0 o wlp2s0 en caso de que el usuario esté conectado a una red WiFi mediante una tarjeta inalámbrica.

Reemplace la en PostUp y PostDown con su interfaz; en este ejemplo es eth0.PostUp y PostDown Las directivas se utilizan para especificar qué comandos deben ejecutarse cuando el servidor se inicia y se detiene, respectivamente. En nuestro ejemplo, usamos el iptables comando para establecer reglas de IP de modo que los clientes compartan la dirección IP del servidor. Las reglas desaparecerán una vez que el servidor se detenga.

Guardar y salir del archivo. Cuando use vim, presione Esc, luego escriba : wq y presione Ingresar para guardar y salir.

Si está utilizando un ufw firewall en el servidor, necesitamos permitir conexiones UDP al puerto para el servidor VPN, 51190.

ufw permite 51190 / udp

Iniciar el servicio

Ahora que se realiza la configuración, podemos iniciar el servicio Wireguard VPN.

Para permitir para que el servicio se inicie en el momento del arranque, ejecute:

systemctl habilitar wg-quick @ wg0

Tenga en cuenta que aquí wg0 es el nombre del archivo de configuración.

Para comenzar el servicio, ejecute:

servicio wg-quick @ wg0 start

Verificar que el servicio se ha iniciado correctamente:

servicio wg-quick @ wg0 status

Verifique que la interfaz que creamos en el archivo de configuración ha comenzado, usando el comando IP.

ip un show wg0

El servidor VPN Wireguard ahora está configurado y funcionando. Configuremos el cliente ahora.

Configuración del cliente

La configuración del cliente para Wireguard es más o menos la misma que la configuración del servidor. Generamos las claves para el cliente y luego creamos un archivo de configuración.

Llaves de seguridad

Para generar la clave pública / privada emparejar para el cliente, ejecute:

sudo su cd / etc / wireguard umask 077 wg genkey | tee client_private_key | wg pubkey> client_public_key

Las claves públicas y privadas para el cliente ahora se generan respectivamente en archivos client_private_key y client_public_key.

Compruebe que se hayan creado utilizando gato mando.

cat clave_cliente_privada cat clave_publica_cliente_cliente

Copie la clave privada mostrada ya que necesitamos agregarla al archivo de configuración para el cliente.

Archivo de configuración

Crea el archivo de configuración con el nombre que desee. Lo crearemos con el nombre wg0-cliente para este ejemplo.

vim wg0-client.conf

Agregue la siguiente configuración.

[Interfaz] # Dirección IP y clave privada del cliente Dirección = 10.20.43.2/24 PrivateKey = [Peer] # Clave pública, dirección IP y puerto del servidor PublicKey = Endpoint =: 51190 AllowIPs = 0.0.0.0/0,: : / 0

Ingrese la dirección de subred del cliente. Como se describió anteriormente, usamos 10.20.43.2 para el cliente en este ejemplo.

Agregar la clave privada del cliente generado en el paso anterior en la línea 4 en el código de configuración anterior.

En "Peer", agregamos información sobre el servidor VPN Wireguard queremos conectarnos.

Ingrese la clave pública del servidor. Introducir el dirección IP del servidor, que notamos anteriormente, y el puerto en el formato dado contra Punto final. Este es el puerto que especificamos en el archivo de configuración del servidor y en el que se inició el servicio VPN en el servidor.

Las IP permitidas deben ingresarse como se indica (0.0.0.0/0) para que cualquier solicitud en una IP pública dinámica utilizada por el cliente siempre se reenvíe al servidor VPN.

Guardar y salir del archivo. Cuando use vim, presione Esc, luego escriba : wq y presione Ingresar para guardar y salir.

Habilitar el servicio al cliente para que se ejecute con cada arranque e inícielo.

systemctl enable wg-quick @ wg-client service wg-quick @ wg-client start

Verificar si el servicio ha comenzado.

servicio wg-quick @ wg-client status

Agregar par al servidor

Ahora tenemos el servidor y el cliente VPN en funcionamiento. Sin embargo, no se establece un túnel seguro entre los dos a menos que establezcamos una conexión de igual a igual entre el servidor y el cliente.

Regresa al servidor. Primero, detener el servicio VPN.

servicio wg-quick @ wg0 stop

A continuación, abra el archivo de configuración para agregar configuración para el par (cliente).

vim /etc/wireguard/wg0.conf

Adjuntar las siguientes líneas al archivo.

[Peer] PublicKey = AllowIPs = 10.20.43.2/32

Ahora, iniciar el servicio VPN de nuevo.

servicio wg-quick @ wg0 start

¡Eso es! Esta es toda la configuración necesaria para la configuración del servidor y el cliente de Wireguard VPN. Probemos ahora nuestra VPN.

Probando la VPN

Primero, hagamos un simple ping del cliente al servidor, para asegurarnos de que la comunicación del túnel VPN funcione. Ejecute lo siguiente en el cliente:

ping 10.20.43.1

Próximo, abre un navegador web y abre cualquier sitio web para comprobar si puede conectarse a Internet desde la máquina cliente. También puede verificar su conectividad a Internet desde la línea de comando usando wget.

wget 

Ahora, hemos comprobado la conectividad del túnel y la conectividad a Internet. Si ambos funcionan, ahora debemos asegurarnos de que todo el tráfico de Internet que llega al cliente pasa por el servidor.

Para esto, simplemente necesitamos verificar la dirección IP del cliente tal como la ve Internet. Una forma de hacerlo es ir a whatsmyip.org. O bien, desde la línea de comandos, podemos consultar otro servicio similar llamado información de IP, usando Curl.

Ejecute lo siguiente en la máquina cliente

curl //ipinfo.io/ip

Si. Es la dirección IP pública del Linode donde está alojado el servidor VPN. Así es como se logra el anonimato usando VPN, ya que en todo Internet ahora se ve la IP del servidor VPN y no de tu computadora.

Conclusión

La facilidad de configuración es una de las ventajas más importantes de Wireguard sobre el software VPN tradicional como OpenVPN, que necesita un mayor nivel de conocimientos de redes y enrutamiento para su configuración. Sin embargo, hay una falta de documentación oficial detallada para Wireguard que podría causar problemas si su configuración de Wireguard arroja errores o no funciona como se esperaba.

Sin embargo, Wireguard es una excelente opción si desea una VPN autohospedada para una comunicación segura a través de Internet. Para obtener más información sobre Wireguard y los protocolos y tecnologías que utiliza, puede consultar el sitio oficial.