Cómo configurar WireGuard VPN en Ubuntu 20.04

WireGuard es una red privada virtual de código abierto y centrada en la seguridad, diseñada para ser sencilla y fácil de usar. Es compatible con diferentes sistemas operativos, como Linux, macOS, Windows, BSD y Android. Es una VPN sencilla y de propósito general que puede desplegarse fácilmente en dispositivos pequeños hasta servidores de alta gama. Es un servidor VPN punto a punto en lugar de un modelo cliente-servidor. Utiliza un mecanismo de intercambio de clave pública para autenticar al cliente.

Si buscas una VPN ligera y rápida, la VPN WireGuard es la mejor opción para ti. En este tutorial, te mostraremos cómo instalar el servidor y el cliente de WireGuard VPN en Ubuntu 20.04.

Requisitos previos

  • Dos servidores con Ubuntu 20.04.
  • Se ha configurado una contraseña de root en ambos servidores.

Cómo empezar

En primer lugar, se recomienda actualizar los paquetes del sistema a la última versión. Puedes actualizarlos con el siguiente comando:

apt-get update -y

Una vez actualizados todos los paquetes, deberás instalar el Iptables en tu sistema. Puedes instalarlo con el siguiente comando:

apt-get install iptables -y

Una vez terminada la instalación, puedes pasar al siguiente paso.

Instalar el servidor VPN WireGuard

Por defecto, el paquete WireGuard está disponible en el repositorio por defecto de Ubuntu 20.04. Puedes instalarlo ejecutando el siguiente comando:

apt-get install wireguard -y

Una vez instalado el paquete WireGuard, puedes pasar al siguiente paso.

Configurar el servidor WireGuard

WireGuard funciona intercambiando claves públicas entre cada dispositivo de la red WireGuard. Por tanto, necesitarás crear una clave pública y otra privada en el servidor.

WireGuard proporciona la utilidad de línea de comandos wg y wg-quick para crear una clave y gestionar las interfaces.

Puedes crear tanto la clave pública como la privada utilizando el siguiente comando:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Una vez creadas ambas claves, puedes comprobarlas con el siguiente comando:

ls /etc/wireguard

Deberías ver la siguiente salida:

privatekey  publickey

Puedes mostrar el contenido de la clave privada con el siguiente comando:

cat /etc/wireguard/privatekey

Deberías ver la siguiente salida:

4M1l65NIaoR2+fQ6xVnIdwj6iVjsSPDkEMuzVnbFh3A=

Puedes mostrar el contenido de la clave pública con la siguiente orden::

cat /etc/wireguard/publickey

Deberías ver la siguiente salida:

00Jsbppv/gVMy6oHMfFZ+T/eEFBAWVbiZo33HjQBSU4=

A continuación, tendrás que crear una interfaz de red para WireGuard. Puedes crearla con el siguiente comando:

nano /etc/wireguard/wg0.conf

Añade las siguientes líneas:

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = server-private-key
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Guarda y cierra el archivo cuando hayas terminado.

Donde:

  • Address: Una dirección IP privada para la interfaz wg0.
  • ListenPort: Especifica el puerto de escucha de WireGuard.
  • PrivateKey: Una clave privada almacenada en el archivo /etc/wireguard/privatekey.
  • PostUp : Especifica el comando que permite que el tráfico salga del servidor y que los clientes de la VPN tengan acceso a Internet. Sustituye también el eth0 por el nombre de tu interfaz de red.

A continuación, establece los permisos adecuados para el archivo privatekey y wg0.

chmod 600 /etc/wireguard/{privatekey,wg0.conf}

A continuación, habilita la interfaz wg0 ejecutando el siguiente comando:

wg-quick up wg0

Deberías obtener la siguiente salida:

[#] 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 eth0 -j MASQUERADE

También puedes iniciar el servicio WireGuard utilizando systemd como se muestra a continuación:

systemctl start [email protected]

A continuación, habilita el servicio WireGuard para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl enable [email protected]

A continuación, verifica el estado del servicio WireGuard con el siguiente comando:

systemctl status [email protected]

Deberías obtener la siguiente salida:

? [email protected] - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
     Active: active (exited) since Thu 2020-12-10 11:42:14 UTC; 7s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 2173 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 2173 (code=exited, status=0/SUCCESS)

Dec 10 11:42:14 ubuntu2004 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Dec 10 11:42:14 ubuntu2004 wg-quick[2173]: [#] ip link add wg0 type wireguard
Dec 10 11:42:14 ubuntu2004 wg-quick[2173]: [#] wg setconf wg0 /dev/fd/63
Dec 10 11:42:14 ubuntu2004 wg-quick[2173]: [#] ip -4 address add 10.0.0.1/24 dev wg0
Dec 10 11:42:14 ubuntu2004 wg-quick[2173]: [#] ip link set mtu 1420 up dev wg0
Dec 10 11:42:14 ubuntu2004 wg-quick[2173]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Dec 10 11:42:14 ubuntu2004 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

También puedes comprobar el estado de la interfaz wg0 con el siguiente comando:

wg show wg0

Deberías obtener la siguiente salida:

interface: wg0
  public key: 00Jsbppv/gVMy6oHMfFZ+T/eEFBAWVbiZo33HjQBSU4=
  private key: (hidden)
  listening port: 51820

Puedes obtener el estado de la dirección IP de la interfaz wg0 con el siguiente comando::

ip a show wg0

Deberías obtener la siguiente salida:

13: 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

Una vez que hayas terminado, puedes pasar al siguiente paso.

Habilitar el reenvío de IP

A continuación, tendrás que habilitar el reenvío de IP en tu servidor para enrutar los paquetes entre los clientes de la VPN e Internet. Puedes habilitarlo editando el archivo /etc/sysctl.conf:

nano /etc/sysctl.conf

Cambia la siguiente línea:

net.ipv4.ip_forward=1

Guarda y cierra el archivo y luego ejecuta el siguiente comando para aplicar los cambios de configuración:

sysctl -p

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar WireGuard Client

En primer lugar, tendrás que instalar el paquete de WireGuard en la máquina cliente. Puedes instalarlo con el siguiente comando:

apt-get install wireguard -y

Después de instalar el paquete WireGuard, crea una clave privada y una clave pública con el siguiente comando:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Una vez creadas ambas claves, tendrás que crear un nuevo archivo de configuración.

Puedes crearlo con el siguiente comando:

nano /etc/wireguard/wg0.conf

Añade las siguientes líneas:

[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

Guarda y cierra el archivo cuando hayas terminado.

Donde:

  • Address: Una dirección IP privada para la interfaz wg0.
  • PrivateKey: Especifica la clave privada en la máquina cliente.
  • PublicKey: Especifica la clave pública en el equipo servidor.
  • Endpoint: Especifica la dirección IP del servidor.
  • IPs permitidas : Especifica la lista de direcciones IP permitidas.

A continuación, tendrás que añadir la clave pública del cliente y la dirección IP en la máquina del servidor.

En el equipo servidor, ejecuta el siguiente comando para añadir ambas:

wg set wg0 peer client-public-key allowed-ips 10.0.0.2

A continuación, tendrás que activar la interfaz wg0 en la máquina cliente.

En la máquina cliente, ejecuta el siguiente comando para activar la interfaz:

wg-quick up wg0

Deberías obtener la siguiente salida:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820

En este punto, tu máquina cliente está conectada al servidor VPN de WireGuard. Puedes comprobar el estado de la conexión con el siguiente comando:

wg

Deberías obtener la siguiente salida:

interface: wg0
  public key: 3FXBDpAO4Vado1tDjLtVQt+JnOCa+W2piLeFYQ8KyB4=
  private key: (hidden)
  listening port: 38830
  fwmark: 0xca6c

peer: 00Jsbppv/gVMy6oHMfFZ+T/eEFBAWVbiZo33HjQBSU4=
  endpoint: 69.87.216.36:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 41 seconds ago
  transfer: 5.27 KiB received, 12.97 KiB sent

Conclusión

Enhorabuena! has instalado y configurado con éxito el servidor y el cliente de WireGuard VPN en el servidor de Ubuntu 20.04. Ahora, el tráfico de tu máquina cliente debería ser enrutado a través de tu máquina servidor. Ahora puedes navegar por Internet de forma anónima y mantener tus datos privados.

También te podría gustar...