Configure una VPN simple con WireGuard y Raspberry Pi como servidor

Desde WireGuard convertirse en parte de del futuro kernel Linux 5.6, decidí ver la mejor manera de integrar esta VPN con mi Enrutador LTE/Punto de acceso en Raspberry Pi.

Equipo

  • Raspberry Pi 3 con módulo LTE e IP pública. Habrá un servidor VPN (en lo sucesivo, caminante del borde)
  • Un teléfono Android que debe usar una VPN para todas las comunicaciones
  • Laptop Linux que necesita usar VPN solo dentro de la red

Cada dispositivo que se conecta a una 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 red VPN. Si la configuración es lo suficientemente simple, puede pensar en conectarse a una VPN y una computadora de escritorio (a través de Ethernet).

Teniendo en cuenta que las conexiones por cable e inalámbricas son cada vez menos seguras con el tiempo (ataques dirigidos, Ataque de piratería KRACK WPA2 и Ataque de sangre de dragón contra WPA3), estoy considerando seriamente usar WireGuard para todos mis dispositivos, sin importar en qué entorno se estén ejecutando.

Instalación de software

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

Tengo el último Fedora Linux 31 y me dio pereza leer el manual antes de instalarlo. Acabo de encontrar los paquetes. wireguard-tools, los instaló y luego no pudo entender por qué nada funcionaba. Investigaciones posteriores revelaron que no tenía el paquete instalado wireguard-dkms (con un controlador de red), y no estaba en el repositorio de mi distribución.

Si hubiera leído las instrucciones, habría tomado las medidas correctas:

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

Tengo instalada la distribución Raspbian Buster en mi Raspberry Pi, ya existe un paquete wireguard, instalarlo:

$ sudo apt install wireguard

Instalé la aplicación en mi teléfono Android VPN de WireGuard del catálogo oficial de Google App Store.

Instalación de llaves

Para autenticar los nodos, Wireguard utiliza un esquema de clave pública/privada simple para autenticar los nodos 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 copiaremos el contenido aquí: cada clave es una línea en base64.

Creación de un archivo de configuración para un 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 notas:

  • En los lugares apropiados, debe insertar las líneas de los archivos con las claves
  • Mi VPN está usando rango interno 10.200.200.0/24
  • para equipos PostUp/PostDown Tengo una interfaz de red externa wwan0, es posible que tenga una diferente (por ejemplo, eth0)

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

$ sudo wg-quick up wg0

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

interface=br0
interface=wg0

Además, agregué una regla de 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 está funcionando, podemos registrar el lanzamiento automático del túnel VPN:

$ sudo systemctl enable [email protected]

Configuración del cliente portátil

En la computadora portátil, cree un archivo de configuración /etc/wireguard/wg0.conf con 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 una IP pública o un servidor VPN
  • Configurando AllowedIPs en 10.200.200.0/24, solo usamos la VPN para acceder a la red interna. El tráfico a todas las demás direcciones IP/servidores continuará pasando por canales abiertos "normales". También se utilizará el servidor DNS preconfigurado en la computadora portátil.

Para las pruebas y el lanzamiento automático, usamos los mismos comandos wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Configuración de un cliente en un teléfono Android

Para un teléfono Android, creamos 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 de la computadora portátil, el teléfono debe usar nuestro servidor VPN como su servidor DNS (cadena DNS), así como 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 en un código QR:

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

El código QR se enviará a la consola como ASCII. Se puede escanear desde la aplicación VPN de Android y configurar un túnel VPN automáticamente.

conclusión

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

Fuente: habr.com

Añadir un comentario