Configure una VPN simple con WireGuard y Raspberry Pi como servidor

Dado que WireGuard será parte del futuro kernel de Linux 5.6, decidí ver la mejor manera de integrar esta VPN con mi enrutador / punto de acceso LTE en la Raspberry Pi .

Equipo


  • Raspberry Pi 3 con módulo LTE y dirección IP pública. Habrá un servidor VPN (en adelante denominado edgewalker )
  • Un teléfono Android que debería usar una VPN para todas las comunicaciones
  • Laptop Linux que debería usar VPN solo dentro de la red

Cada dispositivo que se conecta a la VPN debe poder conectarse a todos los demás dispositivos. Por ejemplo, un teléfono debería poder conectarse a un servidor web en una computadora portátil si ambos dispositivos son parte de una VPN. Si la configuración es bastante simple, puede pensar en conectarse a una VPN y escritorio (a través de Ethernet).

Dado que las conexiones por cable e inalámbricas se vuelven cada vez menos seguras con el tiempo ( ataques dirigidos , ataque KRACK en piratería WPA2 y ataque Dragonblood contra WPA3 ), considero seriamente la posibilidad de usar WireGuard para todos mis dispositivos, independientemente del entorno en el que trabajen.

Instalación de software


WireGuard proporciona paquetes precompilados para la mayoría de las distribuciones de Linux, Windows y macOS. Las aplicaciones de Android e iOS se entregan a través de directorios de aplicaciones.

Tengo la última versión de Fedora Linux 31, y antes de instalar era demasiado flojo para leer el manual. Encontré los paquetes wireguard-tools, los instalé y luego no pude entender por qué nada funcionaba. Investigaciones posteriores mostraron que no tenía un paquete instalado wireguard-dkms(con un controlador de red) y que no estaba en el repositorio de mi distribución.

Si leo las instrucciones, tomaría los pasos correctos:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Tengo el kit de distribución Raspbian Buster instalado en la Raspberry Pi, ya hay un paquete allí wireguard, instálelo:

$ sudo apt install wireguard

En el teléfono Android, instalé la aplicación WireGuard VPN desde el directorio oficial de Google App Store.

Instalación clave


Para la autenticación de host, Wireguard utiliza un esquema simple de clave privada / pública para autenticar hosts VPN. Puede crear fácilmente claves VPN con el siguiente comando:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

Esto nos da tres pares de claves (seis archivos). No nos referiremos a los archivos en las configuraciones, pero copie el contenido aquí: cada clave es una línea en base64.

Crear un archivo de configuración para el servidor VPN (Raspberry Pi)


La configuración es bastante simple, creé el siguiente archivo /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Un par de comentarios:

  • En los lugares apropiados, debe insertar líneas de archivos con claves
  • Mi VPN está usando un rango interno 10.200.200.0/24
  • Para los comandos PostUp/ PostDownTengo una interfaz de red externa wwan0, puede tener otra (por ejemplo, eth0)

La red VPN se levanta fácilmente con el siguiente comando:

$ sudo wg-quick up wg0

Un pequeño detalle: como servidor DNS que utilicé dnsmasqpara vincular a una interfaz de red br0, también agregué dispositivos wg0a la lista de dispositivos permitidos. En dnsmasq, esto se hace agregando una nueva línea con una interfaz de red al archivo de configuración /etc/dnsmasq.conf, por ejemplo:

interface=br0
interface=wg0

Además, agregué la regla iptable para permitir el tráfico al puerto UDP de escucha (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Ahora que todo funciona, podemos configurar el túnel VPN para que se inicie automáticamente:

$ sudo systemctl enable wg-quick@wg0.service

Configuración del cliente en la computadora portátil


En la computadora portátil, cree un archivo de configuración /etc/wireguard/wg0.confcon la misma configuración:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Notas:

  • En lugar de edgewalker, debe especificar la IP pública o el host del servidor VPN
  • Al establecer AllowedIPsque 10.200.200.0/24, utilizamos la VPN sólo para acceder a la red interna. El tráfico a todas las demás direcciones / servidores IP continuará pasando por canales abiertos "normales". También se utilizará un servidor DNS preconfigurado en la computadora portátil.

Para las pruebas y el inicio automático, utilizamos los mismos comandos wg-quicky systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Configurar un cliente en un teléfono Android


Para un teléfono Android, cree un archivo de configuración muy similar (llamémoslo mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

A diferencia de la configuración en la computadora portátil, el teléfono debe usar nuestro servidor VPN como un servidor DNS (cadena DNS) y también pasar todo el tráfico a través del túnel VPN ( AllowedIPs = 0.0.0.0/0).

En lugar de copiar el archivo a su dispositivo móvil, puede convertirlo a un código QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

El código QR se enviará a la consola como ASCII. Puede escanearlo desde la aplicación VPN de Android y configurar automáticamente el túnel VPN.

Conclusión


Configurar WireGuard es simplemente mágico en comparación con OpenVPN.

Source: https://habr.com/ru/post/undefined/


All Articles