Desde WireGuard
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 (
Instalación de software
WireGuard proporciona
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
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
en10.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