Introducción
WireGuard es una moderna tecnología de red privada virtual (VPN) que utiliza un cifrado de última generación. En comparación con otras soluciones VPN populares, como IPsec y OpenVPN. WireGuard es más rápido, más fácil de configurar y más ligero. Es multiplataforma y puede ejecutarse en casi cualquier lugar, incluidos Linux, Windows, Android y macOS.
Wireguard es una VPN de igual a igual; no utiliza el modelo cliente-servidor. Dependiendo de su configuración, un par puede actuar como un servidor o cliente tradicional. Funciona creando una interfaz de red en cada dispositivo del mismo nivel que actúa como un túnel. Los pares se autentican entre sí intercambiando y validando claves públicas, imitando el modelo SSH. Las claves públicas se asignan a una lista de direcciones IP permitidas en el túnel. El tráfico de VPN está encapsulado en UDP.
En este artículo, discutiremos cómo configurar una VPN WireGuard en Ubuntu 20.04 LTS Focal Fossa que actuará como un servidor VPN. También le mostraremos cómo configurar WireGuard como cliente. El tráfico del cliente se enrutará a través del servidor Ubuntu 20.04 LTS.
Esta configuración se puede utilizar para protegerse contra los ataques de Man in the Middle, navegar por la web de forma anónima, eludir el contenido restringido geográficamente o permitir que los colegas que trabajan desde casa se conecten de forma segura a la red corporativa.
Si desea instalar WireGuard en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conexión al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Prerrequisitos
Para seguir esta guía, necesitará un servidor Ubuntu 20.04 LTS con acceso root o sudo.
Configurar el servidor WireGuard
Comenzaremos instalando WireGuard en la máquina Ubuntu y configurándolo para que actúe como servidor. También configuraremos el sistema para enrutar el tráfico del cliente a través de él.
Instale WireGuard en Ubuntu 20.04
WireGuard está disponible en los repositorios predeterminados de Ubuntu. Para instalarlo, ejecute los siguientes comandos:
sudo apt update
sudo apt install wireguard
Esto instalará el módulo y las herramientas de WireGuard. WireGuard se ejecuta como un módulo del kernel.
Configurar WireGuard
wg
herramientas de línea de comandos wg y wg-quick
permiten configurar y administrar interfaces WireGuard.
Cada dispositivo de la red WireGuard VPN debe tener una clave pública y una privada. Ejecute el siguiente comando para generar el par de claves:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Los archivos se generarán en el /etc/wireguard
. Puede ver el contenido de los archivos con cat
o less
. La clave privada nunca debe compartirse con nadie y siempre debe mantenerse a salvo.
Wireguard también admite una clave previamente compartida, que agrega una capa adicional de cifrado de clave simétrica. Esta clave es opcional y debe ser única para cada par de pares.
El siguiente paso es configurar el dispositivo de túnel que enrutará el tráfico VPN.
El dispositivo se puede configurar desde la línea de comandos usando los ip
y wg
, o creando el archivo de configuración con un editor de texto.
Cree un nuevo archivo llamado wg0.conf
y agregue el siguiente contenido:
sudo nano /etc/wireguard/wg0.conf
La interfaz se puede nombrar de cualquier manera, sin embargo, se recomienda usar algo como include wg0
o wgvpn0
. Los ajustes en la sección de interfaz tienen el siguiente significado:
- Dirección: una lista separada por comas de direcciones IP v4 o v6 para la interfaz
wg0
Utilice IP de un rango reservado para redes privadas (10.0.0.0/8, 172.16.0.0/12 o 192.168.0.0/16). - ListenPort: el puerto de escucha.
- PrivateKey: una clave privada generada por el comando
wg genkey
(Para ver el contenido del tipo de archivo:sudo cat /etc/wireguard/privatekey
) - SaveConfig: si se establece en verdadero, el estado actual de la interfaz se guarda en el archivo de configuración al apagar.
- PostUp: comando o script que se ejecuta antes de mostrar la interfaz. En este ejemplo, usamos iptables para habilitar el enmascaramiento. Esto permite que el tráfico salga del servidor, dando a los clientes VPN acceso a Internet. Asegúrese de reemplazar
ens3
después de-A POSTROUTING
para que coincida con el nombre de su interfaz de red pública. Puede encontrar fácilmente la interfaz con el siguiente comando:
ip -o -4 route show to default | awk '{print $5}'
- PostDown: comando o script que se ejecuta antes de cerrar la interfaz. Las reglas de iptables se eliminarán cuando la interfaz esté desactivada.
Los wg0.conf
y privatekey
no deben ser legibles por usuarios normales. Use chmod
para establecer los permisos en 600
:
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
Una vez hecho esto, abra la wg0
usando los atributos especificados en el archivo de configuración:
sudo wg-quick up wg0
El comando producirá un resultado similar al siguiente:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Para verificar el estado y la configuración de la interfaz, escriba:
sudo wg show wg0
interface: wg0
public key: DLx+Owg3aAqneY/HfmYPBbpUpNUFGuWGQQO1tT6N9Q0=
private key: (hidden)
listening port: 51820
También puede ejecutar ip a show wg0
para verificar el estado de la interfaz:
ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
WireGuard también se puede administrar con Systemd.
Para ejecutar WireGuard al inicio, ejecute el siguiente comando:
sudo systemctl enable wg-quick@wg0
Configuración de firewall y redes de servidores
El reenvío de IP debe estar habilitado para que NAT funcione. Abra el /etc/sysctl.conf
y agregue o descomente la siguiente línea:
sudo nano /etc/sysctl.conf
Guarde y cierre el archivo, luego aplique el cambio:
sudo sysctl -p
net.ipv4.ip_forward = 1
Si está utilizando UFW para administrar su firewall, debe abrir el tráfico UDP en el puerto 51820
:
sudo ufw allow 51820/udp
Eso es todo. Se ha configurado el par de Ubuntu que actuará como servidor.
Configurar el cliente de Linux y macOS
Las instrucciones de instalación para todas las plataformas compatibles están disponibles aquí. En sistemas Linux, puede instalar el paquete utilizando el administrador de paquetes de distribución y en macOS con brew
.
Una vez instalado, siga los pasos a continuación para configurar el dispositivo cliente.
El proceso para configurar un cliente de Linux y macOS es prácticamente el mismo que hizo para el servidor. Primero genere las claves pública y privada:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Cree el wg0.conf
y agregue el siguiente contenido:
sudo nano /etc/wireguard/wg0.conf
La configuración en la sección de interfaz tiene el mismo significado que la configuración del servidor:
- Dirección: una lista separada por comas de direcciones IP v4 o v6 para la interfaz
wg0
- PrivateKey: para ver el contenido del archivo en la máquina cliente, ejecute:
sudo cat /etc/wireguard/privatekey
La sección de pares contiene los siguientes campos:
- PublicKey: una clave pública del par al que desea conectarse. (El contenido del
/etc/wireguard/publickey
- Punto final: una IP o nombre de host del par al que desea conectarse seguido de dos puntos y luego un número de puerto en el que escucha el par remoto.
- AllowIPs: una lista separada por comas de direcciones IP v4 o v6 desde las que se permite el tráfico entrante para este par y a las que se dirige el tráfico saliente para este par. Usamos 0.0.0.0/0 porque enrutamos el tráfico y queremos que el servidor del mismo nivel envíe paquetes con cualquier IP de origen.
Si necesita configurar clientes adicionales, simplemente repita los mismos pasos utilizando una dirección IP privada diferente.
Instalar el cliente de Windows
Descargue e instale el paquete msi de Windows desde el sitio web de WireGuard.
Una vez instalado, abra la aplicación WireGuard y haga clic en " Agregar túnel " -> " Agregar túnel vacío ".
Se crea automáticamente un par de claves públicas y se muestra en la pantalla.
Ingrese un nombre para el túnel y cambie la configuración de la siguiente manera:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
En la sección de interfaz, agregue una nueva línea para definir la dirección del túnel del cliente.
En la sección de pares, agregue los siguientes campos:
- PublicKey: la clave pública del servidor Ubuntu (archivo
/etc/wireguard/publickey
). - Punto final: la dirección IP del servidor Ubuntu seguida de dos puntos y el puerto WireGuard (51820).
- IP permitidas: 0.0.0.0/0
Una vez hecho esto, haga clic en el botón " Guardar ".
Agregue el cliente par al servidor
El último paso es agregar la clave pública y la dirección IP del cliente al servidor. Para hacer esto, ejecute el siguiente comando en el servidor de Ubuntu:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
Asegúrese de cambiar el CLIENT_PUBLIC_KEY
a la clave pública que generó en la máquina cliente ( sudo cat /etc/wireguard/publickey
) y ajuste la dirección IP del cliente si es diferente. Los usuarios de Windows pueden copiar la clave pública de la aplicación WireGuard.
Una vez hecho esto, regrese a la máquina cliente y abra la interfaz de túnel.
Cliente Linux y macOS
Ejecute el siguiente comando para abrir la interfaz:
sudo wg-quick up wg0
Ahora debería estar conectado al servidor Ubuntu y el tráfico de su máquina cliente debería enrutarse a través de él. Puedes comprobar la conexión con:
sudo wg
interface: wg0
public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
private key: (hidden)
listening port: 53527
fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 53 seconds ago
transfer: 3.23 KiB received, 3.50 KiB sent
También puede abrir su navegador, escribir "cuál es mi ip" y debería ver la dirección IP de su servidor Ubuntu.
Para detener la construcción de túneles, wg0
hacia abajo de la interfaz wg0:
sudo wg-quick down wg0
Cliente de Windows
Si ha instalado WireGuard en Windows, haga clic en el botón " Activar ". Una vez que los pares están conectados, el estado del túnel cambiará a Attivo
.
Conclusión
Le mostramos cómo instalar WireGuard en una máquina Ubuntu 20.04 LTS Focal Fossa y cómo configurarlo como un servidor VPN. Esta configuración le permite navegar por la web de forma anónima mientras mantiene la privacidad de sus datos de tráfico.