Configurar VPN WireGuard con Ubuntu Server 20.04 y cliente Linux

INSTALACIÓN DEL SERVIDOR

Actualización de repositorios

apt update && apt upgrade -y

Instalación de Wireguard

apt install wireguard

Acceso a la carpeta de instalación

cd /etc/wireguard

Seteado de permisos solo para usuario root

umask 077

Creación de pares de claves pública y privada

wg genkey |tee 00_server_clave_privada | wg pubkey > 00_server_clave_publica
wg genkey |tee 01_cliente_clave_privada | wg pubkey > 01_ciente_clave_publica

Listar interfaces de red

ip addr

Creación de archivo de texto con configuración del servidor

nano wg0.conf

#CONFIGURACIÓN DEL SERVIDOR

[Interface]
PrivateKey = <Clave privada del servidor>
Address = 10.0.0.1/24
#suponemos que la interfaz de red a la que se accede desde fuera es la eth0
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820

[Peer]
#cliente 1
PublicKey = <Clave publica del cliente>
AllowedIPs = 10.0.0.2/24

Levantado de la conexión VPN en el servidor

wg-quick up wg0

Persistencia del interfaz de conexión

systemctl enable wg-quick@wg0

Activación del reenvío de paquetes

sysctl -w net.ipv4.ip_forward=1
nano /etc/sysctl.conf # Editamos este fichero y descomentamos la línea que pone: net.ipv4.ip_forward=1

INSTALACIÓN DEL CLIENTE LINUX

Actualización de repositorios

apt update

Instalación de Wireguard

apt install wireguard
apt install resolvconf (necesario en Linux Mint 19 / 20)

Acceso a la carpeta de instalación

cd /etc/wireguard

Seteado de permisos solo para usuario root

umask 077

Creación de archivo de texto con configuración del servidor

nano wg0.conf

#CONFIGURACIÓN DEL CLIENTE
[Interface]
PrivateKey = <Clave privada cliente>
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = <Clave pública server>
AllowedIPs = 0.0.0.0/0
Endpoint = IP_Server:51820

Levantado de la conexión VPN en el servidor

sudo wg-quick up wg0

Desconectando la conexión VPN con el servidor:

sudo wg-quick down wg0

Por comodidad y para no tener que recordar los comandos puedes crear unos alias tal y como explico en el artículo «Usar alias para ahorrar tiempo«. Yo he creado dos: «vpnon» para activarla y «vpnoff» para desactivarla.

Persistencia del interfaz de conexión

systemctl enable wg-quick@wg0