Desde WireGuard del futuro kernel Linux 5.6, decidí ver la mejor manera de integrar esta VPN con mi .
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 (, и ), estoy considerando seriamente usar WireGuard para todos mis dispositivos, sin importar en qué entorno se estén ejecutando.
Instalación de software
WireGuard proporciona 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 wireguardInstalé la aplicación en mi teléfono Android 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.keyEsto 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/32Un 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/PostDownTengo 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=wg0Ademá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 ACCEPTAhora que todo está funcionando, podemos registrar el lanzamiento automático del túnel VPN:
$ sudo systemctl enable wg-quick@wg0.serviceConfiguració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:51820Notas:
- En lugar de edgewalker, debe especificar una IP pública o un servidor VPN
- Configurando
AllowedIPsen10.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.serviceConfiguració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.confEl 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
