10 KiB
title | date | draft | image | categories | tags | ||||
---|---|---|---|---|---|---|---|---|---|
Redes Privadas Virtuales con WireGuard | 2023-01-26T22:01:09+01:00 | false | featured.png |
|
|
Caso C: VPN de acceso remoto con WireGuard
Monta una VPN de acceso remoto usando Wireguard. Intenta probarla con clientes Windows, Linux y Android. Documenta el proceso adecuadamente y compáralo con el del apartado A.
El Escenario es el siguiente:
Vamos a utilizar un VagrantFile igual al utilizado en el caso A para montar la infraestructura necesaria para la práctica:
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.define :cliente3 do |cliente3|
cliente3.vm.box = "debian/bullseye64"
cliente3.vm.hostname = "cliente3"
cliente3.vm.network :private_network,
:libvirt__network_name => "red-externa3",
:libvirt__dhcp_enabled => false,
:ip => "192.168.0.20",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :servidor3 do |servidor3|
servidor3.vm.box = "debian/bullseye64"
servidor3.vm.hostname = "servidor3"
servidor3.vm.network :private_network,
:libvirt__network_name => "red-externa3",
:libvirt__dhcp_enabled => false,
:ip => "192.168.0.10",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
servidor3.vm.network :private_network,
:libvirt__network_name => "red-interna3",
:libvirt__dhcp_enabled => false,
:ip => "192.168.1.10",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :maquina3 do |maquina3|
maquina3.vm.box = "debian/bullseye64"
maquina3.vm.hostname = "maquina3"
maquina3.vm.network :private_network,
:libvirt__network_name => "red-interna3",
:libvirt__dhcp_enabled => false,
:ip => "192.168.1.30",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end
end
Ahora vamos a configurar las máquinas:
Servidor
Instalamos wireguard:
sudo apt update
sudo apt install wireguard
Activamos el bit de forwarding en el servidor editando el fichero /etc/sysctl.conf
y descomentando la siguiente línea:
net.ipv4.ip_forward=1
y hacemos los cambios efectivos:
sudo sysctl -p
Ahora vamos a generar los pares de claves para el servidor (como usuario root):
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey | tee /etc/wireguard/server_public.key
Ahora vamos a crear el fichero de configuración del servidor en /etc/wireguard/wg0.conf
, utilizando las claves que hemos generado en el paso anterior:
[Interface]
Address = 10.99.99.1/24
ListenPort = 51820
PrivateKey = aB9gyJdOH835WVK4bqbb2VqrGeW5wFuOIyHFx7suu1w=
Al tratarse de fichero sensibles, tienen que tener permisos de solo lectura, por lo que vamos a cambiar los permisos:
sudo chmod -R 600 /etc/wireguard/
Creamos la interfaz:
sudo wg-quick up /etc/wireguard/wg0.conf
Cliente
Instalamos wireguard:
sudo apt update
sudo apt install wireguard
Ahora vamos a generar los pares de claves para el cliente (como usuario root):
wg genkey | tee /etc/wireguard/client_private.key | wg pubkey | tee /etc/wireguard/client_public.key
hora vamos a crear el fichero de configuración del cliente en /etc/wireguard/wg0.conf
, utilizando la clave privada generada en el paso anterior y la clave pública del servidor:
[Interface]
Address = 10.99.99.2/24
PrivateKey = 8DFSQc0qbT3P9Dhnbg44bxU+W2uRraXsebB+suQH+nQ=
[Peer]
PublicKey = voKHGdJUz8B6Q6jRYJspzhSWDLmXI4jroPc89VkMCHQ=
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.0.10:51820
PersistentKeepalive = 25
Al tratarse de fichero sensibles, tienen que tener permisos de solo lectura, por lo que vamos a cambiar los permisos:
sudo chmod -R 600 /etc/wireguard/
Creamos la interfaz:
sudo wg-quick up /etc/wireguard/wg0.conf
Una vez hecho esto, tenemos que añadir la clave pública del cliente al fichero de configuración del servidor, añadiendo las siguentes líneas:
[Peer]
PublicKey = eh7Ap8nkBQf5vL60sp2ORzqLtz2YWnbjABbTMrukaCo=
AllowedIPs = 10.99.99.2/32
y reiniciamos la interfaz:
sudo wg-quick down /etc/wireguard/wg0.conf
sudo wg-quick up /etc/wireguard/wg0.conf
Podemos ver el estado de la interfez con el comando wg
:
Rutas
Para que los mensajes que se envíen desde la máquina cliente a la máquina servidor, pasen por el túnel VPN, tenemos que cambiar la ruta por defecto para que sea a través del servidor:
sudo ip route del default
sudo ip route add default via 10.99.99.1
Tenemos que cambiar la ruta por defecto también de la máquina interna para que sea a través del servidor:
sudo ip route del default
sudo ip route add default via 192.168.1.10
Comprobación
Para comprobar que funciona, vamos a hacer un traceroute
desde la máquina cliente a la máquina servidor:
Caso D: VPN sitio a sitio con WireGuard
Configura una VPN sitio a sitio usando WireGuard. Documenta el proceso adecuadamente y compáralo con el del apartado B.
El Escenario es el siguiente:
El escenario es similar al del caso B por lo que utilizaremos el mismo vagrantfile:
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.define :maquina1 do |maquina1|
maquina1.vm.box = "debian/bullseye64"
maquina1.vm.hostname = "maquina1"
maquina1.vm.network :private_network,
:libvirt__network_name => "interna1",
:libvirt__dhcp_enabled => false,
:ip => "192.168.0.20",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :cliente do |cliente|
cliente.vm.box = "debian/bullseye64"
cliente.vm.hostname = "cliente"
cliente.vm.network :private_network,
:libvirt__network_name => "interna1",
:libvirt__dhcp_enabled => false,
:ip => "192.168.0.10",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
cliente.vm.network :private_network,
:libvirt__network_name => "internet",
:libvirt__dhcp_enabled => false,
:ip => "10.20.30.1",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :servidor do |servidor|
servidor.vm.box = "debian/bullseye64"
servidor.vm.hostname = "servidor"
servidor.vm.network :private_network,
:libvirt__network_name => "internet",
:libvirt__dhcp_enabled => false,
:ip => "10.20.30.2",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
servidor.vm.network :private_network,
:libvirt__network_name => "interna2",
:libvirt__dhcp_enabled => false,
:ip => "172.22.0.10",
:libvirt__netmask => '255.255.0.0',
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :maquina2 do |maquina2|
maquina2.vm.box = "debian/bullseye64"
maquina2.vm.hostname = "maquina2"
maquina2.vm.network :private_network,
:libvirt__network_name => "interna2",
:libvirt__dhcp_enabled => false,
:ip => "172.22.0.20",
:libvirt__netmask => '255.255.0.0',
:libvirt__forward_mode => "veryisolated"
end
end
Ahora vamos a configurar las máquinas:
Servidor
La configuración es similar a la del caso B, con la diferencia de que el fichero de configuración en /etc/wireguard/wg0.conf
es el siguiente:
Las claves son:
- privada:
0N0kdHNHajtKY78rAGaI5uHzY8QGvZMCuiyw3WXU0n0=
- pública:
SC7FuKTw2GnjJmJDmP0GuZGzgr9CBHUbcBOAXKKrCSU=
[Interface]
Address = 10.99.99.1
ListenPort = 51820
PrivateKey = 0N0kdHNHajtKY78rAGaI5uHzY8QGvZMCuiyw3WXU0n0=
Creamos la interfaz con el siguiente comando:
sudo wg-quick up wg0
Cliente
La configuración es similar a la del caso B, con la diferencia de que el fichero de configuración en /etc/wireguard/wg0.conf
es el siguiente:
Las claves son:
- privada:
OLKDIsseCywbzWOwME1gxzIZLhopGljCeyYgibrHwm0=
- pública:
jwqTMNZ4lQkVk2OLrlMGZGDCkkCLJFmcUjlF7aPvrWc=
[Interface]
Address = 10.99.99.2
PrivateKey = OLKDIsseCywbzWOwME1gxzIZLhopGljCeyYgibrHwm0=
ListenPort = 51820
[Peer]
PublicKey = SC7FuKTw2GnjJmJDmP0GuZGzgr9CBHUbcBOAXKKrCSU=
AllowedIPs = 0.0.0.0/0
Endpoint = 10.20.30.2:51820
Creamos la interfaz con el siguiente comando:
sudo wg-quick up wg0
Activamos el bit de forwarding en el servidor editando el fichero /etc/sysctl.conf
y descomentando la siguiente línea:
net.ipv4.ip_forward=1
y hacemos los cambios efectivos:
sudo sysctl -p
Ahora, como tenemos la clave pública del otro servidor, modificamos el fichero /etc/wireguard/wg0.conf
del servidor para añadir la siguiente sección:
[Peer]
Publickey = jwqTMNZ4lQkVk2OLrlMGZGDCkkCLJFmcUjlF7aPvrWc=
AllowedIPs = 0.0.0.0/0
PersistentKeepAlive = 25
Endpoint = 10.20.30.1:51820
y reiniciamos el servicio:
sudo wg-quick down wg0
sudo wg-quick up wg0
Máquinas
Ahora vamos a configurar las rutas en las maquinas internas:
Máquina1:
sudo ip route del default
sudo ip route add default via 192.168.0.10
Máquina2:
sudo ip route del default
sudo ip route add default via 172.22.0.10
Prueba de funcionamiento
traceroute desde maquina1 a maquina2:
traceroute desde maquina2 a maquina1:
Conclusión
Utilizando WireGuard la configuración es más sencilla de realizar y tiene menos ficheros, por lo que es más fácil de gestionar y de depurar errores. Aparte de esto, el funcionamiento es el mismo que el de OpenVPN.