Admin Libre - Administración de sistemas y redes

VPN Gateway en dominio de enrutamiento alternativo
Por Francisco Gaitán el 16 de Agosto de 2023

Esta configuración establece un gateway VPN en un dominio de enrutado alternativo. Es similar a la configuración Road Warrior VPN salvo que el enrutado a través del VPN no está en el dominio de enrutado principal, por lo que sólo se conectarán a través de la VPN las aplicaciones que ejecutes en el nuevo dominio de enrutado.

Topología de red

  • foo es mi máquina local detrás de un NAT
  • bar es el vps remoto que hará de gateway
  • 172.16.0.0/12 es la red privada para la VPN

Lectura recomendada

Configuración en foo

Creo la llave WireGuard:

foo# install -m 0700 -o root -g wheel -d /etc/wireguard
foo# openssl rand -base64 32 > /etc/wireguard/$(hostname).key
foo# chmod og-r /etc/wireguard/$(hostname).key

Creo esta configuración inicial (incompleta) en /etc/hostname.wg0 para obtener la clave pública:

wgkey `cat /etc/wireguard/$(hostname).key`
wgpeer wgendpoint 203.0.113.1 51820 wgaip 0.0.0.0/0 wgpka 25 rdomain 1
inet 172.16.1.1/12
up

Levanto la interfaz y obtengo la clave pública junto a wgpubkey:

foo# sh /etc/netstart wg0
foo# ifconfig wg0 | grep pub
	wgpubkey exWwqcq3eBUGu+RLwaZvbjXR4alPY6Wiql+OMB/Rf7s=

Configuración en bar

Creo la llave WireGuard:

bar# install -m 0700 -o root -g wheel -d /etc/wireguard
bar# openssl rand -base64 32 > /etc/wireguard/$(hostname).key
bar# chmod og-r /etc/wireguard/$(hostname).key

Levanto la interfaz y obtengo la clave pública junto a wgpubkey:

bar# sh /etc/netstart wg0
bar# ifconfig wg0 | grep pub
	wgpubkey woQ/rc/ubgZYLgJh0ufvhhb7IHDW4CwWTW+BZMlGSS0=

Esta es la configuración de la interfaz, especificando la clave pública de foo:

bar# cat /etc/hostname.wg0
wgkey `cat /etc/wireguard/$(hostname).key` wgport 51820
wgpeer <clave-publica-foo> wgaip 172.16.1.1/32
inet 172.16.1.2/12
up

Completando la configuración de foo

Ahora que tengo la clave pública de bar puedo completar la configuración en foo. Esta es la configuración final de la interfaz en /etc/hostname.wg0:

wgkey `cat /etc/wireguard/$(hostname).key`
wgpeer <clave-publica-bar> wgendpoint 203.0.113.1 51820 wgaip 0.0.0.0/0 wgpka 25 rdomain 1
inet 172.16.1.1/12
up
!route -T 1 add -net default 172.16.1.2

Reenvío de IPs y NAT

bar# echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf
bar# sysctl net.inet.ip.forwarding=1

Esta es la línea correspondiente al archivo /etc/pf.conf que debe de ir arriba antes de block:

pass out quick on egress from wg0:network to any nat-to (egress)

Cargo la configuración de Packet Filter:

bar# pfctl -f /etc/pf.conf

Resolución DNS en el nuevo dominio de enrutado

La solución está en usar un par de instancias unwind, una en cada dominio de enrutado, tal y como explico en el artículo VPN road warrior con WireGuard en OpenBSD.

Ejecución de una aplicación desde el nuevo dominio de enrutado

Gracias a la función exec de route(8) puedes lanzar programas en el dominio de enrutado que quieras:

$ route -T 1 exec ungoogled-chromium 

Destacado

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org