GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar WireGuard VPN en Ubuntu 20.04

WireGuard es una tecnología moderna de VPN (red privada virtual) que utiliza criptografía 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 ocupa menos espacio. Es multiplataforma y puede ejecutarse en casi cualquier lugar, incluidos Linux, Windows, Android y macOS.

Wireguard es una VPN punto a punto; 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 par 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 con una lista de direcciones IP que están permitidas en el túnel. El tráfico VPN está encapsulado en UDP.

En este artículo, discutiremos cómo configurar una VPN WireGuard en Ubuntu 20.04 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.

Esta configuración se puede utilizar como una protección contra los ataques Man in the Middle, navegar por la web de forma anónima, pasar por alto el contenido restringido geográficamente o permitir que sus colegas que trabajan desde casa se conecten a la red de la empresa de forma segura.

Requisitos previos #

Para seguir esta guía, necesitará un servidor Ubuntu 20.04 con acceso root o sudo.

Configurando el Servidor WireGuard #

Comenzaremos instalando WireGuard en la máquina Ubuntu y lo configuraremos para que actúe como un servidor. También configuraremos el sistema para enrutar el tráfico de los clientes a través de él.

Instalar WireGuard en Ubuntu 20.04 #

WireGuard está disponible en los repositorios predeterminados de Ubuntu. Para instalarlo, ejecute los siguientes comandos:

sudo apt updatesudo apt install wireguard

Esto instalará el módulo y las herramientas de WireGuard.

WireGuard se ejecuta como un módulo del kernel.

Configuración de WireGuard #

El wg y wg-quick Las herramientas de línea de comandos le permiten configurar y administrar las interfaces de WireGuard.

Cada dispositivo en la red VPN de WireGuard debe tener una clave privada y pública. 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 directorio. Puede ver el contenido de los archivos con cat o less . La clave privada nunca debe compartirse con nadie y siempre debe mantenerse segura.

Wireguard también admite una clave precompartida, que agrega una capa adicional de criptografía 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 comando usando el ip y wg comandos, o creando el archivo de configuración con un editor de texto.

Cree un nuevo archivo llamado wg0.conf y agregue los siguientes contenidos:

sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[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 ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

La interfaz puede tener cualquier nombre, sin embargo, se recomienda usar algo como wg0 o wgvpn0 . Los ajustes en la sección de la interfaz tienen el siguiente significado:

  • Dirección:una lista separada por comas de direcciones IP v4 o v6 para wg0 interfaz. Usa direcciones 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 wg genkey dominio. (Para ver el contenido del archivo escriba:sudo cat /etc/wireguard/privatekey )

  • SaveConfig:cuando se establece en verdadero, el estado actual de la interfaz se guarda en el archivo de configuración cuando se apaga.

  • PostUp:comando o secuencia de comandos que se ejecuta antes de abrir la interfaz. En este ejemplo, estamos usando 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:

    ip -o -4 route show to default | awk '{print $5}'
  • PostDown:comando o secuencia de comandos que se ejecuta antes de desactivar la interfaz. Las reglas de iptables se eliminarán una vez que la interfaz esté inactiva.

El wg0.conf y privatekey los archivos no deben ser legibles para los usuarios normales. Usa chmod para establecer los permisos en 600 :

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

Una vez hecho esto, trae el wg0 interfaz utilizando los atributos especificados en el archivo de configuración:

sudo wg-quick up wg0

El comando producirá una salida similar a la 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, ingrese:

sudo wg show wg0
interface: wg0
  public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  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
4: 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 traer la interfaz de WireGuard en el momento del arranque, ejecute el siguiente comando:

sudo systemctl enable wg-quick@wg0

N.º de configuración de redes y cortafuegos del servidor

El reenvío de IP debe estar habilitado para que NAT funcione. Abra el /etc/sysctl.conf archivo y agregue o descomente la siguiente línea:

sudo nano /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward=1

Guarde el archivo y 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 compañero de Ubuntu que actuará como servidor.

Configuración de clientes Linux y macOS #

Las instrucciones de instalación para todas las plataformas compatibles están disponibles en https://wireguard.com/install/. En sistemas Linux, puede instalar el paquete usando 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 más o menos el mismo que lo 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

Crea el archivo wg0.conf y agregue los siguientes contenidos:

sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[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

Los ajustes en la sección de la interfaz tienen el mismo significado que al configurar el servidor:

  • Dirección:una lista separada por comas de direcciones IP v4 o v6 para wg0 interfaz.
  • 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 del servidor archivo).
  • 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.
  • IPs permitidas:una lista separada por comas de direcciones IP v4 o v6 desde las que se permite el tráfico entrante para el par y hacia las que se dirige el tráfico saliente para este par. Usamos 0.0.0.0/0 porque estamos enrutando el tráfico y queremos que el par del servidor envíe paquetes con cualquier IP de origen.

Si necesita configurar clientes adicionales, simplemente repita los mismos pasos usando una dirección IP privada diferente.

Configuración de clientes de Windows #

Descargue e instale el paquete msi de Windows desde el sitio web de WireGuard.

Una vez instalada, abra la aplicación WireGuard y haga clic en "Agregar túnel" -> "Agregar túnel vacío..." como se muestra en la imagen a continuación:

Un par de claves públicas se crea automáticamente y se muestra en la pantalla.

Ingrese un nombre para el túnel y edite 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 (/etc/wireguard/publickey archivo).
  • 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 del mismo nivel al servidor #

El último paso es agregar la clave pública y la dirección IP del cliente al servidor. Para hacerlo, ejecute el siguiente comando en el servidor de Ubuntu:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

Asegúrate de cambiar la CLIENT_PUBLIC_KEY con 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 desde la aplicación WireGuard.

Una vez hecho esto, regrese a la máquina cliente y abra la interfaz de tunelización.

Clientes 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. Puede 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 tunelización, baje el wg0 interfaz:

sudo wg-quick down wg0

Clientes Windows #

Si instaló 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 Activo:


Ubuntu
  1. Cómo configurar Wireguard VPN en CentOS 8

  2. Cómo configurar WireGuard VPN en Ubuntu 20.04

  3. Cómo configurar WireGuard VPN en Ubuntu (una guía paso a paso)

  4. Cómo configurar WireGuard en Ubuntu 22.04

  5. Ubuntu - ¿Cómo configurar una IP estática en Ubuntu?

Cómo configurar OpenVPN en Ubuntu 20.04

Cómo configurar una IP estática en Ubuntu 20.04 (escritorio)

Cómo configurar NordVPN en Ubuntu

¿Cómo configurar un Pptp Vpn en el propio servidor Ubuntu?

Cómo configurar WireGuard VPN en Debian 11

Cómo configurar WireGuard VPN en Linux