Desde WireGuard núcleo futuro 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)
- 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 (, и ), estoy considerando seriamente usar WireGuard para todos mis dispositivos, independientemente del entorno en el que se ejecuten.
Instalación de software
WireGuard proporciona 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 wireguardEn el telefono Android Instalé la aplicación 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.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.serviceConfigurando 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.confEl 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
