De hace un tiempo, llevo leyendo sobre un software de VPN que tiene intención de llegar a ser incorporada en el kernel Linux, pero por motivos X no se hizo. Recientemente rescaté mi interés por el tema, topándome con éste artículo de arstechnica. Los halagos a ésta pieza de software vienen de varias personalidades, siendo los provinentes de Linus Torvalds los de mayor relevancia (al fin y al cabo, es el padre del kernel de nuestro Sistema Operativo favorito; y el de toda Internet). Algunas características a grandes rasgos, como comentan desde arstechnica:
Antes de proceder, comentar que Wireguard requiere de un kernel Linux ≥3.10 con algunas opciones de configuración habilitadas. Pero tranquilo: la mayoria de las distribuciones ya las llevan habilitadas en sus stock kernels. Dicho ésto y sin más dilación, vamos al lio con una configuración de VPN punto-a-punto. Instalación Nosotros vamos a optar por la opción de compilarlo desde las fuentes y posteriormente paquetizarlo para Debian gracias a una herramienta que considero socorrida (checkinstall). Son temas personales, dado que así luego la operación de instalación/desinstalación se me hace más sencilla: $ apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-config $ wget https://git.zx2c4.com/WireGuard/snapshot/WireGuard-0.0.20190227.tar.xz $ tar -Jxvf WireGuard-0.0.20190227.tar.xz $ cd WireGuard-0.0.20190227/src $ make -j2 $ su $ checkinstall # Ésto ya realiza la instalación desde el paquete .deb generado Configuración Después de leer el Quick Start de la documentación oficial de Wireguard, le eché un vistazo a la entrada al respecto de la Wiki de Arch (que siempre la encuentro de lo más exquisita por su clara exposición) y con eso me fue suficiente para levantar y dejar funcionando la VPN punto-a-punto. En concreto, los pasos aplicados son los que van del punto 2.1 al 2.3. Aclarar que los endpoints son las direcciones ip en las que va a estar escuchando el servicio VPN (en mi caso, 2 ips públicas). Tener en cuenta que al igual que QUIC, Wireguard trabaja por UDP, y por tanto, hay que abrir los puertos dónde escuchará dicho servicio por éste protocolo. # Generamos la private key en ambos peers, A y B $ wg genkey > privatekey $ chmod 600 privatekey # Generamos la public key también an ambos peers $ wg pubkey < privatekey > publickey # Peer A: Levantaremos éste punto VPN en el puerto 48574 y # aceptará conexiones del peer B enlazando la public key del # mismo con su dirección pública y las ips permitidas. Sólo # aceptará conexiones del peer B. # $ ip link add dev wg0 type wireguard $ ip addr add 10.0.0.1/24 dev wg0 $ wg set wg0 listen-port 48574 private-key privatekey $ wg set wg0 peer [Peer B public key] persistent-keepalive 25 allowed-ips 10.0.0.2/32 endpoint 10.10.10.2:39814 $ ip link set wg0 up # Peer B: Como con el otro peer, levantaremos éste punto VPN # en otro puerto (el 39814) y aceptará conexiones del peer A # enlazando la public key del mismo con su dirección pública # y las ips permitidas. Sólo aceptará conexiones del peer A. # $ ip link add dev wg0 type wireguard $ ip addr add 10.0.0.2/24 dev wg0 $ wg set wg0 listen-port 39814 private-key ./privatekey $ wg set wg0 peer [Peer A public key] persistent-keepalive 25 allowed-ips 10.0.0.1/32 endpoint 10.10.10.1:48574 $ ip link set wg0 up Con ésto ya deberíamos tener la VPN levantada y los peers conectados, a no ser que haya algún problema de red o firewall que impida su conexión. Comprobaciones que podemos hacer: # Ver la configuración de identidad y de los peers asociados peer-a$ wg interface: wg0 public key: UguPyBThx/+xMXeTbRYkKlP0Wh/QZT3vTLPOVaaXTD8= private key: (hidden) listening port: 48574 peer: 9jalV3EEBnVXahro0pRMQ+cHlmjE33Slo9tddzCVtCw= endpoint: 10.10.10.2:39814 allowed ips: 10.0.0.2/32 # Hacer un ping a la ip del otro peer al final del tunel peer-a$ ping 10.0.0.2 Finalmente, podemos guardar la configuración de modo permanente y recuperarla posteriormente: $ wg showconf wg0 > /etc/wireguard/wg0.conf $ wg setconf wg0 /etc/wireguard/wg0.conf Esperemos que ésta pieza de software no tarde en incorporarse en el mainline Linux kernel :) Comentarios (0) |