Configurar una VPN sencilla con WireGuard y Raspberry Pi como servidor

Desde WireGuard convertirse en parte de núcleo futuro 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)
  • Teléfono encendido Android, que debe utilizar una VPN para todas las comunicaciones
  • Portátil Linux, que solo debería usar VPN 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, independientemente del entorno en el que se ejecuten.

Instalación de software

WireGuard proporciona paquetes precompilados para la mayoría de las distribuciones Linux, Windows и macOSSolicitudes para Android Las versiones para iOS se distribuyen a través de las tiendas de aplicaciones.

Tengo la última versión de Fedora. Linux 31, y antes de instalarlo fui demasiado perezoso para leer el manual. Simplemente encontré 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

En el telefono Android Instalé la aplicación WireGuard VPN del catálogo oficial de Google App Store.

Instalación de llaves

Para autenticar nodos Wireguard Utiliza un esquema sencillo de clave privada/pública para autenticar los nodos VPN. Puede generar 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 wg-quick@wg0.service

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 wg-quick@wg0.service

Configurando el cliente para Android-teléfono

Para telefono 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 mostrará en la consola como texto ASCII. Se puede escanear desde la aplicación. Android VPN y configurar automáticamente el túnel VPN.

conclusión

Ajuste WireGuard simplemente mágico comparado con OpenVPN.

Fuente: habr.com

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster