WireGuard importado a OpenBSD-6.7

OpenBSD-6.7

Articulo Original de OpenBSD Journal

En el siguiente commit (y muchos otros), David Gwynne (dlg@) importó la mayor parte del código enviado recientemente por Jason A. Donenfeld y Matt Dunwoodie para permitirle usar WireGuard de forma nativa en OpenBSD:

CVSROOT:	/cvs
Module name:	src
Changes by:	dlg@cvs.openbsd.org	2020/06/21 06:11:26

Modified files:
sys/net        : if.c 
Added files:
sys/net        : if_wg.c if_wg.h wg_cookie.c wg_cookie.h 
                 wg_noise.c wg_noise.h 

Log message:
  add wg(4), an in kernel driver for WireGuard vpn communication.

thanks to Matt Dunwoodie and Jason A. Donenfeld for their effort.
it's at least as functional as the go implementation, and maybe
more so since this one works on more architectures.

i'm sure there's further development that can be done, but you can
say that about anything and everything that's in the tree.

ok deraadt@

El protocolo VPN WireGuard ha estado disponible en OpenBSD como un puerto durante un tiempo, primero como la implementación `wireguard-go` en Go, pero luego también como el puerto wireep en C, ambos utilizando dispositivos tun(4), al igual que OpenVPN y otros, que incurre en una leve penalización por cruzar el borde del núcleo/espacio de usuario para cada paquete.

WireGuard es un túnel de capa 3 que se puede ejecutar en modo pasivo, solo enviando paquetes cuando algo necesita llegar al otro lado (a menos que habilite los latidos (heartbeats)). Solo permite algoritmos y algoritmos criptográficos modernos seleccionados, elegidos para funcionar en CPU que carecen de aceleradores criptográficos, a la vez que son seguros. Los paquetes de WireGuard se envían a través de UDP y pueden ejecutarse y transportar tanto IPv4 como IPv6. Maneja redirecciones NAT/puertos y puntos finales que cambian las direcciones IP, lo cual es muy bueno cuando se cambia de cableado a wifi o viceversa.

Jason y Matt han estado ocupados haciendo que WireGuard funcione de forma nativa en OpenBSD, y enviaron un parche enorme a tech@ recientemente [ver informe anterior](https://undeadly.org/cgi?action=article;sid=20200512080047) para poder ejecutarlo en OpenBSD, usando ifconfig(8) y con soporte de kernel para las interfaces wg(4).

Después de tres revisiones de parches enviadas, dlg@ ahora ha comenzado a importarlo a la base, y pronto debería habilitarse en los núcleos GENERIC.

Actualización 24 de junio de 2020: wg(4) se ha habilitado y ahora está disponible en las últimas instantáneas:

CVSROOT:	/cvs
Module name:	src
Changes by:	dlg@cvs.openbsd.org	2020/06/23 17:35:39

Modified files:
sys/conf       : GENERIC 

Log message:
enable wg(4).

this will make testing easier for everyone.

from Jason A. Donenfeld and Matt Dunwoodie
ok deraadt@ tobhe@

Lo probamos rápidamente en dos máquinas virtuales vmm(4) que ejecutan la última instantánea de amd64:

test1$ doas ifconfig wg0 create wgport 9999 wgkey `openssl rand -base64 32`
test1$ doas ifconfig wg0 wgpeer   PvZvkFVrCX9bV1JG4BkGqRhmcbXt9KG3INwUJSbT7mE= wgendpoint   fe80::fce1:bbff:fed1:c6db%vio0 9999 wgaip 10.0.0.1/32
test1$ doas ifconfig wg0 10.0.0.2/24

test1$ doas ifconfig wg0
wg0: flags=80c3<UP,BROADCAST,RUNNING,NOARP,MULTICAST> mtu 1420
      index 6 priority 0 llprio 3
      wgport 9999
      wgpubkey 5nYUSIRp3RlfRclN7Fz5KtFnLCECxxHJmL9TLmwE0A8=
      wgpeer PvZvkFVrCX9bV1JG4BkGqRhmcbXt9KG3INwUJSbT7mE=
              wgendpoint fe80:1::fce1:bbff:fed1:c6db 9999
              tx: 2608, rx: 2608
              last handshake: 82 seconds ago
              wgaip 10.0.0.1/32
      groups: wg
      inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255

Y:

test2$ doas ifconfig wg0 create wgport 9999 wgkey `openssl rand -base64 32`
test2$ doas ifconfig wg0 wgpeer   5nYUSIRp3RlfRclN7Fz5KtFnLCECxxHJmL9TLmwE0A8= wgendpoint   fe80::fce1:bbff:fed1:c6d9%vio0 9999 wgaip 10.0.0.2/32
test2$ doas ifconfig wg0 10.0.0.1/24

test2$ doas ifconfig wg0
wg0: flags=80c3<UP,BROADCAST,RUNNING,NOARP,MULTICAST> mtu 1420
      index 5 priority 0 llprio 3
      wgport 9999
      wgpubkey PvZvkFVrCX9bV1JG4BkGqRhmcbXt9KG3INwUJSbT7mE=
      wgpeer 5nYUSIRp3RlfRclN7Fz5KtFnLCECxxHJmL9TLmwE0A8=
              wgendpoint fe80:1::fce1:bbff:fed1:c6d9 9999
              tx: 2608, rx: 2608
              last handshake: 123 seconds ago
              wgaip 10.0.0.2/32
      groups: wg
      inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255

Con eso, se crean y configuran las interfaces wireguard en test1 y test2. Ahora puede alcanzar uno del otro a través de la VPN:

test1$ ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=255 time=1.484 ms
64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=1.309 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=1.549 ms

--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.309/1.447/1.549/0.101 ms
informatica/unix_openbsd/obsd-67-wgj.txt · Última modificación: 2020/07/14 15:36 por 127.0.0.1
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki