Combo I, la VPN del pobre

Índice

Recordando viejos tiempos, que uno tiene ya una edad, en aquellos días de los buenos arcades. Todos andábamos locos con los combos.

Esa combinación de teclas que nos hacia parecer extraterrestres según movíamos los dedeos en un baile perfecto para que nuestro personaje hiciera un movimiento imposible y dejar al contrario K.O.

Necesitamos:

Nota: Si no tenéis cuenta de DigtalOcean, dejo debajo mi link de referencia por si lo queréis utilizar para probar y me ayudas con unos Euritos para seguir con estos post y muchos mas. Gracias

DigitalOcean Referral Badge

Objetivo

Terraformar un host en DigitalOcean el cual nos permita conectarnos mediante ssh. Utilizar sshuttle, como ya hablamos en ……… para enrutar todo nuestro trafico mediante el. De tal manera que nuestra geolocalización no sea la real. Esto nos permitirá por ejemplo ver contenido de plataformas de video bajo demanda en otros idiomas. Del resto de uso ya sois responsables vosotros, ;-), ser buenos.

Receta

La receta se compone de 3 archivos:

├── _provider.tf     Definición del proveedor
├── main.tf          Receta
└── terraform.tfvars Definición de variables de entorno

Ingredientes

_provider.tf

variable "do_token" {}
terraform {
  required_version = ">= 0.14.0"

  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
    }
  }
}
# Configure the DigitalOcean Provider
provider "digitalocean" {
  token = var.do_token
}

main.tf

variable "ssh_pub_path"{}

# Create a new SSH key
resource "digitalocean_ssh_key" "jaimealberto" {
    name       = "jaimealberto"
    public_key = file(var.ssh_pub_path)
}

resource "digitalocean_droplet" "server" {
    name  = "server"
    image = "debian-10-x64"
    region = "fra1"
    size   = "s-1vcpu-1gb"
    ssh_keys = [digitalocean_ssh_key.jaimealberto.fingerprint]
}

output "ssh" {
    value = "sshuttle -v --dns -r root@${digitalocean_droplet.server.ipv4_address} -e "ssh -i ~/.ssh/id_rsa" 0/0"
}

terraform.tfvars

# token API
do_token = "token generado en DigitalOcean por el usuario"
# Key Pub
ssh_pub_path="~/.ssh/id_rsa.pub"

Despliegue

Bueno pues una vez que tenemos todo preparado vamos a desplegar nuestra receta.

terraform init
terraform validate
terraform plan
terraform apply

Como podemos observar al finalizar nos indica con el output que ya preparamos como utilizar nuestro nuevo servicio de “VPN” para tunelizar todo nuestro trafico por el host desplegado. Al ejecutar el comando desde el terminal nos solicita la contraseña de administrador local. Dejamos esta ventana del termina abierta y comenzamos a navegar o a realizar cualquier otra operación, en esta ventana al estar activo el modo verbose veremos como actua.

Comprobamos que funciona desde otro terminal, por ejemplo:

curl ifconfig.io

Ya vemos que nos da una ip que no es la nuestra real por geolocalización. Ya podemos hacer lo teniamos que hacer con el túnel levantado. Una vez finalizadas las teras detemos el proceso con Ctrl + c y todo seguirá igual respecto a la salida de trafico de nuestro host local.

Como ya hemos terminado con lo que teinamos que hacer, ahora destruimos la infraestructura para no pagar por algo que no utilizamos.

terraform destroy

Aquí podemos ver el proceso completo:

Como se puede observar en el proceso:

  • Se inicia la conexión con el proveedor.
  • Se verifica la configuración.
  • Se realiza el plan.
  • Se aplica el plan.
  • Se lanza el comando que crea el túnel contra el host remoto.
  • Se verifica la conexión como se puede observar mas abajo.
  • Se pulsa Crtl + c para finalizar el túnel.
  • Se destruye todo lo creado para no generar gasto.

Se utiliza una llave que cree para grabar el gif. Solicita la contraseña de administrador de mi host puesto que tiene que manejar el trafico saliente del equipo.

Pruebas:

Como podemos ver la ip publica actual corresponde con la zona geográfica elegida en el despliegue del droplet en DigitalOcean.

Desde el terminal:

ip=$(curl ifconfig.io) && curl ipinfo.io/$ip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    15  100    15    0     0     72      0 --:--:-- --:--:-- --:--:--    72
{
  "ip": "134.209.247.46",
  "city": "Frankfurt am Main",
  "region": "Hesse",
  "country": "DE",
  "loc": "50.1155,8.6842",
  "org": "AS14061 DigitalOcean, LLC",
  "postal": "60311",
  "timezone": "Europe/Berlin",
  "readme": "https://ipinfo.io/missingauth"
}

Desde el navegador:

Conclusión

Hemos desplegado una solución rapida para tener un túnel de trafico cifrado desde nuestro host a un proveedor que nos situá geográficamente en otro lugar. La utilizamos el tiempo necesario y luego lo destruimos. Esto nos da una flexibilidad muy grande y pagamos solo por lo que utilizamos ni un euro mas. Espero que sea útil y nos vemos el la próxima.