Memorias de un Técnico Ligero

Ver más publicaciones del año 2025

Armando una VPN con Wireguard

A veces es más fácil recurrir como ayuda memoria a estos datos, sobre todo en la computación minimalista, donde todo va mutando, todo cambia y se transforma. Lo que puede derivar en formateo de todo o pérdida de información y volver a empezar como me ha pasado.

Este es el escenario:

  • Rasperry Pi en casa conectada 24x7 a internet. Bajo consumo, puede ir conectada a un puerto USB si el router lo tiene o aun transformardor cualquiera de celu.
  • Internet en el trabajo (puede ser en otra ubicación claro) que pago aparte en conjunto con otros changos porque la LAN de ahí está limitada. Entonces he de aprovechar las horas muertas para mis planes de conquistar el mundo montando sitios muejejejeje. Bueno, perdón por el exabrupto. Decía, internet en red aparte con equipos que pueden quedarse conectados a una red de energía que claramente no pago (muejejejej de nuevo).
  • La Raspi Zero actúa no solo de gestionar la red privada virtual, si no que tendría un proxy reverso para derivar solicitudes de internet de allí a los qequipos en el trabajo. Ya que ahí contamos con CG-NAT y no hay ip pública para obviar esto.

Dicho esto, vamos a por la configuración:

1)Raspi Zero

sudo apt update
sudo apt install wireguard -y
  • Luego de instalar, generamos las claves públicas y privadas
wg genkey | tee privatekey | wg pubkey > publickey
  • Acto seguido, editamos el archivo de configuración de Wireguard:
sudo nvim /etc/wireguard/wg0.conf

Pegamos algo así, donde el PEER es el cliente.

[Interface]
PrivateKey = <clave_privada_raspi>
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = true

[Peer]
PublicKey = <clave_publica_cpu_trabajo>
AllowedIPs = 10.0.0.2/32
  • Reiniciamos el servicio:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
  • Instalamos NGINX para el proxy reverso. Configuramos el sitio y lo habilitamos:
sudo apt install nginx -y
sudo nvim /etc/nginx/sites-available/elibre
server {
    listen 80;
    server_name blog.tudominio.com;

    location / {
        proxy_pass http://10.0.0.2:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
sudo ln -s a sites-enabled
sudo nginx -t
sudo systemctl reload nginx
  • ATENCIÓN IMPORTANTE. Si queremos que los equipos se comuniquen entre sí, o sea hacer una red en malla. Tenemos que hacer esto:
sudo nvim /etc/sysctl.conf

Descomentar:

net.ipv4.ip_forward=1

verificar

sudo sysctl -p

2) Clientes:

sudo apt update
sudo apt install wireguard -y
wg genkey | tee privatekey | wg pubkey > publickey
sudo nvim /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <clave_privada_cpu>
Address = 10.0.0.2/24

[Peer]
PublicKey = <clave_publica_raspi>
Endpoint = IP.PUBLICA.RASPI:51820
AllowedIPs = 10.0.0.1/32
PersistentKeepalive = 25
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Agregamos la clave pública de cada cliente en la Raspi Zero como vimos con el PEER en la primera confguración.

Y listo. Todo debería funcionar según los parámetros establecidos. :)

Resumen nivel 5 de wireguard: es una verguinha como openVpn pero que consume menos dependencias al instalar y hasta ahora me ha resultado más eficiente.

Arriba


Escrito por: Hi7903b, el día: