Dado que WireGuard el futuro núcleo de Linux 5.6, decidí investigar la mejor manera de integrar esta VPN con mi .
Hardware
- Raspberry Pi 3 con módulo LTE y dirección IP pública. Aquí se establecerá el servidor VPN (en adelante denominado edgewalker)
- Teléfono Android que debe usar la VPN para todas las comunicaciones
- Portátil Linux que debe utilizar la VPN solo dentro de la red
Cada dispositivo conectado a la VPN debe poder comunicarse con todos los demás dispositivos. Por ejemplo, el teléfono debe poder conectarse al servidor web en el portátil, siempre que ambos dispositivos sean parte de la red VPN. Si la configuración resulta ser lo suficientemente sencilla, se podría considerar conectar también el escritorio a la VPN (por Ethernet).
Dada la creciente inseguridad de las conexiones por cable e inalámbricas con el tiempo (, y ), estoy considerando seriamente usar WireGuard para todos mis dispositivos, independientemente del entorno en el que operen.
Instalación del software
WireGuard ofrece para la mayoría de las distribuciones de Linux, Windows y macOS. Las aplicaciones para Android e iOS se proporcionan a través de las tiendas de aplicaciones.
Tengo la última Fedora Linux 31, y antes de la instalación, no me tomé la molestia de leer la guía. Simplemente encontré los paquetes wireguard-tools, los instalé y luego no pude entender por qué nada funcionaba. Una investigación posterior reveló que no tenía instalado el paquete wireguard-dkms (con el controlador de red), y no estaba en el repositorio de mi distribución.
Si hubiera leído las instrucciones, habría tomado los pasos correctos:
$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools En Raspberry Pi tengo la distribución Raspbian Buster instalada, allí ya hay un paquete wireguard, lo instalamos:
$ sudo apt install wireguardEn el teléfono Android, instalé la aplicación desde la tienda oficial de Google App Store.
Instalación de claves
Para la autenticación de nodos, Wireguard utiliza un sencillo esquema de claves privadas/públicas para autenticar los nodos VPN. Puedes 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.keyEsto nos da tres pares de llaves (seis archivos). No haremos referencia a los archivos en las configuraciones, sino que copiaremos aquí el contenido: cada llave es una línea en base64.
Creación de un archivo de configuración para el servidor VPN (Raspberry Pi)
La configuración es bastante simple, he creado el siguiente archivo /etc/wireguard/wg0.conf:
[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey =
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 =
AllowedIPs = 10.200.200.2/32
[Peer]
# teléfono móvil
PublicKey =
AllowedIPs = 10.200.200.3/32Un par de observaciones:
- En los lugares correspondientes se deben insertar las líneas de los archivos con las llaves
- Mi red VPN utiliza un rango interno
10.200.200.0/24 - Para los comandos
PostUp/PostDownhe especificado la interfaz de red externa wwan0, es posible que tengas otra (por ejemplo, eth0)
La red VPN se inicia fácilmente con el siguiente comando:
$ sudo wg-quick up wg0 Un pequeño detalle: usé dnsmasq asociado a la interfaz de red br0, también añadí dispositivos wg0 a la lista de dispositivos permitidos. En dnsmasq, esto se hace añadiendo una nueva línea con la interfaz de red al archivo de configuración /etc/dnsmasq.conf, por ejemplo:
interface=br0
interface=wg0Además, añadí una regla de iptables para permitir el tráfico en el puerto UDP de escucha (51280):
$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPTAhora que todo funciona, podemos configurar el inicio automático del túnel VPN:
$ sudo systemctl enable wg-quick@wg0.serviceConfiguración del cliente en la computadora portátil
En la computadora portátil creamos un archivo de configuración /etc/wireguard/wg0.conf con la misma configuración:
[Interface]
Address = 10.200.200.2/24
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820Notas:
- En lugar de edgewalker, debes especificar la IP pública o el host del servidor VPN
- Al instalar
AllowedIPsen10.200.200.0/24, utilizamos VPN solo para acceder a la red interna. El tráfico hacia todas las demás IPs/servidores seguirá yendo por los canales "normales" abiertos. También se usará un servidor DNS preconfigurado en la computadora portátil.
Para pruebas y para el inicio automático usamos los mismos comandos wg-quick y systemd:
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.serviceConfiguración del cliente en el teléfono Android
Para el teléfono Android creamos un archivo de configuración muy similar (lo llamaremos mobile.conf):
[Interface]
Address = 10.200.200.3/24
PrivateKey =
DNS = 10.200.200.1
[Peer]
PublicKey =
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820 A diferencia de la configuración en la laptop, el teléfono debe usar nuestro servidor VPN como servidor DNS (línea DNS), así como enrutar todo el tráfico a través del túnel VPN (AllowedIPs = 0.0.0.0/0).
En lugar de copiar el archivo en el dispositivo móvil, se puede convertir en un código QR:
$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.confEl código QR aparecerá en la consola como ASCII. Se puede escanear desde la aplicación VPN de Android y configurar automáticamente el túnel VPN.
Salida
Configurar WireGuard es simplemente mágico en comparación con OpenVPN.
Fuente: habr.com
