VPN sitio a sitio con WireGuard
Introducción
En este post vamos a configurar una VPN site to site con wireguard. Para ello vamos a hacer uso de máquinas vagrant para montar el escenario.
Escenario
Vamos a dividir el escenario en dos, por una parte, un escenario que actuará de servidor:
Vagrant.configure("2") do |config|
config.vm.provider :libvirt do |libvirt|
libvirt.memory = 1024
end
config.vm.define :nodo1 do |nodo1|
nodo1.vm.box = "debian/bullseye64"
nodo1.vm.hostname = "Servidor"
nodo1.vm.synced_folder ".", "/vagrant", disabled: true
nodo1.vm.network :private_network,
:libvirt__network_name => "privadavpn",
:libvirt__dhcp_enabled => false,
:ip => "172.30.0.10",
:netmask => "255.255.255.0",
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :nodo2 do |nodo2|
nodo2.vm.synced_folder ".", "/vagrant", disabled: true
nodo2.vm.box = "debian/bullseye64"
nodo2.vm.hostname = "Cliente"
nodo2.vm.network :private_network,
:libvirt__network_name => "privadavpn",
:libvirt__dhcp_enabled => false,
:ip => "172.30.0.11",
:netmask => "255.255.255.0",
:libvirt__forward_mode => "veryisolated"
end
end
Y por otra parte, un escenario que actuará de cliente:
Vagrant.configure("2") do |config|
config.vm.provider :libvirt do |libvirt|
libvirt.memory = 1024
end
config.vm.define :nodo1 do |nodo1|
nodo1.vm.box = "debian/bullseye64"
nodo1.vm.hostname = "Servidor2"
nodo1.vm.synced_folder ".", "/vagrant", disabled: true
nodo1.vm.network :private_network,
:libvirt__network_name => "privadvpn2",
:libvirt__dhcp_enabled => false,
:ip => "172.20.0.10",
:netmask => "255.255.255.0",
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :nodo2 do |nodo2|
nodo2.vm.synced_folder ".", "/vagrant", disabled: true
nodo2.vm.box = "debian/bullseye64"
nodo2.vm.hostname = "Cliente2"
nodo2.vm.network :private_network,
:libvirt__network_name => "privadvpn2",
:libvirt__dhcp_enabled => false,
:ip => "172.20.0.11",
:netmask => "255.255.255.0",
:libvirt__forward_mode => "veryisolated"
end
end
Comenzaremos cambiando las rutas por defecto en las máquinas cliente1 y cliente2 para que se dirijan a la máquina servidor1 y servidor2 respectivamente:
#cliente1
ip r del default
ip r add default via 172.30.0.10
#cliente2
ip r del default
ip r add default via 172.20.0.10
Configuración del servidor 1
Instalaremos wireguard en el servidor1:
apt install wireguard
Y activamos el bit de forwarding en el kernel:
echo 1 > /proc/sys/net/ipv4/ip_forward
Tras ello, generaremos el par de claves pública y privada para el servidor:
wg genkey | tee serverprivate | wg pubkey > serverpublic
Ya obtenidas, crearemos el fichero de configuración del servidor:
nano wg0.conf
Y añadiremos lo siguiente:
[Interface]
Address = 10.99.99.1
PrivateKey = IHIpGRRZZ/GPIHCL8d9K+Ukd3hcav2Cki9MmOIf5Xns=
ListenPort = 51820
Levantamos el servicio y comprobamos que está funcionando correctamente:
wg-quick up wg0
wg
Configuración del servidor 2
Instalaremos wireguard en el servidor2:
apt install wireguard
Y activamos el bit de forwarding en el kernel:
echo 1 > /proc/sys/net/ipv4/ip_forward
Tras ello, generaremos el par de claves pública y privada para el servidor:
wg genkey | tee clientprivate | wg pubkey > clientpublic
Ya obtenidas, crearemos el fichero de configuración del servidor:
nano wg0.conf
Y añadiremos lo siguiente:
[Interface]
Address = 10.99.99.2
# Clave privada del servidor
PrivateKey = yO6u4QrwRwHef6WfPkZlcE6k/FET8ZnhcH2JUpp4VGI=
ListenPort = 51820
[Peer]
# Clave pública del cliente
PublicKey = FzKmyNQaz9UdnkB4J0oH6WoPAp2XRP4ZerqfZM5k0h4=
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.121.98:51820
Levantamos el servicio y comprobamos que está funcionando correctamente:
wg-quick up wg0
wg
Comprobación de la conexión
Para comprobar que la conexión funciona correctamente, ejecutaremos el comando ping desde el cliente1 hacia el cliente2:
Comparando con OpenVPN
Tras haber realizado el mismo escenario con OpenVPN, hemos obtenido los siguientes resultados:
- El tiempo de conexión es mucho mayor en OpenVPN que en Wireguard.
- El ancho de banda es mucho mayor en Wireguard que en OpenVPN.
- El consumo de CPU es mucho menor en Wireguard que en OpenVPN.
Todo esto podemos traducirlo en que Wireguard es mucho más rápido y eficiente que OpenVPN. Además, Wireguard es mucho más sencillo de configurar que OpenVPN.
Es cierto que Wiereguard no es tan seguro como OpenVPN, pero para la mayoría de los usuarios, la seguridad no es un problema. Además, Wireguard está en constante desarrollo y se espera que en un futuro sea mucho más seguro que OpenVPN.
Además de su seguridad, OpenVPN tiene una gran ventaja sobre Wireguard: es multiplataforma. Esto quiere decir que podemos utilizar OpenVPN en cualquier sistema operativo, mientras que Wireguard solo está disponible para Linux.
En resumen, Wireguar es una muy buena alternativa frente a OpenVPN y se espera que en un futuro de bastante prontitud, Wireguard se convierta en la VPN por defecto de Linux. Es de facil configuración, y es mucho mas eficiente que OpenVPN en cuanto a rendimiento y consumo de recursos.