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:
![escenario1](https://i.imgur.com/vob221j.png)
Vamos a utilizar un VagrantFile igual al utilizado en el caso A para montar la infraestructura necesaria para la práctica:
Activamos el bit de forwarding en el servidor editando el fichero `/etc/sysctl.conf` y descomentando la siguiente línea:
```bash
net.ipv4.ip_forward=1
```
y hacemos los cambios efectivos:
```bash
sudo sysctl -p
```
Ahora vamos a generar los pares de claves para el servidor (como usuario root):
```bash
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:
Al tratarse de fichero sensibles, tienen que tener permisos de solo lectura, por lo que vamos a cambiar los permisos:
```bash
sudo chmod -R 600 /etc/wireguard/
```
Creamos la interfaz:
```bash
sudo wg-quick up /etc/wireguard/wg0.conf
```
![wgup](https://i.imgur.com/4avm7tC.png)
### Cliente
Instalamos wireguard:
```bash
sudo apt update
sudo apt install wireguard
```
Ahora vamos a generar los pares de claves para el cliente (como usuario root):
```bash
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:
Podemos ver el estado de la interfez con el comando `wg`:
![wg](https://i.imgur.com/GIJCLAo.png)
### 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:
```bash
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:
```bash
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:
![traceroute1](https://i.imgur.com/RxFLZJh.png)
## 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:
![escenario2](https://i.imgur.com/VGD6hgl.png)
El escenario es similar al del caso B por lo que utilizaremos el mismo vagrantfile:
Activamos el bit de forwarding en el servidor editando el fichero `/etc/sysctl.conf` y descomentando la siguiente línea:
```bash
net.ipv4.ip_forward=1
```
y hacemos los cambios efectivos:
```bash
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:
Ahora vamos a configurar las rutas en las maquinas internas:
Máquina1:
```bash
sudo ip route del default
sudo ip route add default via 192.168.0.10
```
Máquina2:
```bash
sudo ip route del default
sudo ip route add default via 172.22.0.10
```
### Prueba de funcionamiento
traceroute desde maquina1 a maquina2:
![traceroute2](https://i.imgur.com/0HeraM7.png)
traceroute desde maquina2 a maquina1:
![traceroute3](https://i.imgur.com/4WHGAH0.png)
## 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.