Para crear una VPN propia en una instancia EC2 Ubuntu voy a apoyarme en Algo VPN, unos scripts Ansible que facilitan su creación. Para eso es necesario clonar el repositorio en la instancia e instalar dependencias:
git clone https://github.com/trailofbits/algo
sudo apt update
sudo apt install -y --no-install-recommends python3-virtualenv file lookup
cd ./algo
python3 -m virtualenv --python="$(command -v python3)" .env && source .env/bin/activate && python3 -m pip install -U pip virtualenv && python3 -m pip install -r requirements.txt
Edita el archivo config.cfg
para editar la lista de clientes, agrega un usuario por cada dispositivo que desees conectar, también cambié la opción BetweenClients_DROP
a false
para permitir a mis dispositivos conectarse entre sí. Opcionalmente habilita unattended_reboot
para que el servicio se reinicie automáticamente después de alguna actualización de seguridad, puedes cambiar la hora a la que prefieres que pase eso.
Ejecuta ./algo
. Lo primero que pregunta es dónde quieres crear tu vpn, como lo voy a instalar en la misma instancia Ubuntu, elijo la opción 12 (Ubuntu existente). En las siguientes opciones dejé los valores por defecto:
- Permitir "Connect on Demand": No
- Conservar llaves PKI: No
- Habilitar bloqueo de anuncios por DNS: No (lo haré con pihole)
- Crear usuario ssh para cada cliente: No
Cuando pregunta por la dirección IP del servidor lo dejo en localhost ya que es instalación local. Luego pregunta por la IP pública de la instancia.
Comenzará la configuración del servicio, tardará pocos minutos según la cantidad de clientes agregados. Al terminar, en la carpeta algo/configs
aparecerá una carpeta con la ip del servidor, dentro de ella se encuentran las configuraciones de Wireguard para cada cliente.
Conexión desde cliente Ubuntu
Instala el cliente wireguard y sus dependencias:
sudo apt install wireguard openresolv
Descarga la configuración del cliente desde la carpeta algo/configs/host/wireguard/
del servidor, procede a instalar con el siguiente comando:
sudo install -o root -g root -m 600 <client>.conf /etc/wireguard/wg0.conf
Inicia la conexión con el comando wg-quick
y valida que la conexión esté activa con wg
:
sudo wg-quick up wg0
sudo wg
Si la conexión es correcta, saldrá cuando fue el último handshake y debería haber tráfico recibido.
Los pasos son los mismos para Raspberry OS.
Conexión desde iPhone
Instala la Aplicación Wireguard. La forma más fácil de crear la configuración es por medio de QR, ubica la imagen generada para tu cliente en la carpeta de configuraciones y descárgala a tu equipo.
En la aplicación Wireguard da sobre el icono + para agregar una nueva configuración y selecciona escanear QR. Después de escanear la imagen ingresa el nombre para la conexión y actívala. Al abrir los detalles podrás comprobar la conexión exitosa:
Conexión desde Windows
Instala el cliente de Wireguard para Windows, puedes agregar tu conexión dando clic al botón "Agregar Túnel". Al guardar te dirá si se ha conectado y la cantidad de información transmitida.