Dimecres, abril 1, 2026
DIY

Accedir als teus serveis des de fora de casa amb WireGuard i un túnel segur

Tenir un servidor a casa és útil fins que necessites accedir-hi des de fora i et trobes amb NAT, IPs dinàmiques i portes tancades pel proveïdor. Publicar serveis a internet directament no sempre és viable ni recomanable. WireGuard, ben configurat, permet muntar una xarxa privada entre la teva xarxa domèstica i els teus dispositius externs amb control total, sense dependre de solucions propietàries, i sense exposar més del necessari.

En aquesta entrada explico com muntar una VPN punt a punt amb WireGuard per accedir des de fora de casa als teus serveis (servidor web, NAS, Home Assistant, etc.) a través d’un túnel segur, sense necessitat d’obrir ports addicionals per a cada servei.

Què aconseguiràs

Una connexió VPN segura entre un client (portàtil, mòbil o VPS) i la teva xarxa domèstica, fent servir WireGuard. Podràs, per exemple:

  • Accedir a 192.168.1.10:8123 (Home Assistant) des de fora.
  • Fer servir ssh usuari@192.168.1.100 com si estiguessis dins de casa.
  • Evitar publicar serveis directament a internet.

Això funciona fins i tot si el teu proveïdor no et dona IP pública, sempre que puguis iniciar el túnel des de dins o tinguis un VPS com a intermediari.

Per què WireGuard i no OpenVPN o solucions comercials

WireGuard és més simple, més ràpid i més predictible. Es configura amb arxius de text. No necessita certificats. El protocol és petit, i no està ple de dependències. És part del kernel Linux modern i també funciona bé a Android, iOS, Windows i macOS. Si alguna vegada has perdut temps amb OpenVPN ajustant MTU, certificats o logs interminables, aquí això no passa.

Escenari base

  • Tens una xarxa local a casa (per exemple 192.168.1.0/24)
  • Tens una Raspberry Pi o servidor Linux sempre encès
  • Vols connectar-te des de fora (per exemple, amb un portàtil o mòbil)
  • Opcionalment: tens un VPS o servidor extern que pot fer de relay

Hi ha dues variants. Explico ambdues:

  • WireGuard directe a casa, amb redirecció de port UDP 51820.
  • WireGuard a través d’un VPS, quan no pots obrir ports al teu router.

Variant 1: WireGuard directe a casa (amb IP pública o ports redirigits)

1. Instal·la WireGuard al servidor domèstic

Debian, Ubuntu o Raspberry Pi OS:

sudo apt update
sudo apt install wireguard

Genera claus:

wg genkey | tee server.key | wg pubkey > server.pub

Revisa que els permisos siguin segurs:

chmod 600 server.key

2. Crea la configuració del servidor

Arxiu /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <clau_privada_del_servidor>
Address = 10.100.100.1/24
ListenPort = 51820
 
# Permetre reenviament
PostUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0
 
# Fer NAT per a xarxa local
PostUp   = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Canvia eth0 si la teva interfície de xarxa té un altre nom (fes servir ip a per confirmar-ho).

Activa el reenviament de paquets de forma persistent:

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

3. Redirigeix el port UDP 51820 al teu router

Aquest pas depèn del model de router. Busca “Port forwarding” o “NAT” i redirigeix UDP 51820 cap a la IP local del servidor WireGuard (per exemple 192.168.1.10).

4. Client: configura WireGuard al teu portàtil o mòbil

Genera claus del client:

wg genkey | tee client.key | wg pubkey > client.pub

Arxiu de configuració (client):

[Interface]
PrivateKey = <clau_privada_del_client>
Address = 10.100.100.2/32
DNS = 1.1.1.1
 
[Peer]
PublicKey = <clau_publica_del_servidor>
Endpoint = el_teu_domini_o_ip_publica:51820
AllowedIPs = 192.168.1.0/24, 10.100.100.0/24
PersistentKeepalive = 25

Afegeix el client al servidor, al mateix wg0.conf:

[Peer]
PublicKey = <clau_publica_del_client>
AllowedIPs = 10.100.100.2/32

Recarrega:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Comprova:

sudo wg

Hauries de veure el peer connectat. Si no, revisa:

  • Tallafoc (blocs UFW 51820?)
  • Redirecció de ports al router
  • Claus mal copiades

Variant 2: Túnel WireGuard a través d’un VPS (sense IP pública a casa)

Aquest cas és comú si el teu proveïdor bloqueja el trànsit entrant o si estàs darrere de CGNAT. Pots fer servir un VPS barat (com un contenidor LXC a Hetzner o DigitalOcean) com a punt intermedi. La Raspberry Pi a casa es connecta al VPS, i tu et connectes al VPS per accedir a la teva xarxa.

Diagrama lògic

[Client fora] <-- WireGuard --> [VPS públic] <-- WireGuard --> [Servidor a casa]

1. Al VPS: configura WireGuard amb dos peers

Genera claus:

wg genkey | tee vps.key | wg pubkey > vps.pub

Arxiu /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <clave_privada_vps>
Address = 10.200.200.1/24
ListenPort = 51820
 
# Peer: servidor a casa
[Peer]
PublicKey = <clau_pub_de_casa_teva>
AllowedIPs = 10.200.200.2/32
 
# Peer: client mòbil o portàtil
[Peer]
PublicKey = <clau_pub_del_client>
AllowedIPs = 10.200.200.3/32

Activa i arrenca el servei:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Assegura’t de tenir obert el port UDP 51820 al firewall del VPS.

2. A la Raspberry Pi (servidor doméstico)

Crea /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <clau_privada_casa>
Address = 10.200.200.2/32
 
[Peer]
PublicKey = <clau_pub_vps>
Endpoint = IP_O_DOMINI_DEL_VPS:51820
AllowedIPs = 10.200.200.1/32, 10.200.200.3/32
PersistentKeepalive = 25

Arrenca el túnel:

sudo systemctl start wg-quick@wg0

Verifica connectivitat al VPS:

ping 10.200.200.1

Ara afegeix a la Pi una ruta estàtica perquè les peticions a 10.200.200.3 (client extern) es reenviïn pel túnel.

Accedir des del client mòbil o portàtil

Al client remot (per exemple, un portàtil), configura:

[Interface]
PrivateKey = <clau_privada_client>
Address = 10.200.200.3/32
 
[Peer]
PublicKey = <clau_pub_vps>
Endpoint = IP_O_DOMINI_DEL_VPS:51820
AllowedIPs = 192.168.1.0/24, 10.200.200.0/24
PersistentKeepalive = 25

Això et permet accedir a serveis a la xarxa local de casa (192.168.1.0/24) a través del VPS.

Rutes, NAT i reenviament: què pot fallar

  • Si pots fer ping al VPS des de casa però no arribar a la xarxa local, assegura’t de fer NAT a la Raspberry Pi per reenviar trànsit des de la xarxa 10.200.200.0/24 cap a 192.168.1.0/24.

Exemple a la Pi:

sudo iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o eth0 -j MASQUERADE
  • Assegura’t que IP forwarding estigui actiu en totes les màquines intermèdies:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  • Si fas servir UFW, assegure’t de permetre trànsit de WireGuard:
sudo ufw allow 51820/udp
sudo ufw route allow in on wg0 out on eth0

Seguretat pràctica

  • Fes servir claus de 32 bytes generades amb wg genkey.
  • No posis AllowedIPs = 0.0.0.0/0 tret de que realment vulguis enrutar tot el trànsit per la VPN.
  • Mantingues els permisos de les claus (chmod 600) i no les comparteixis.
  • Si fas servir un VPS, assegura’t de no deixar-lo com a porta oberta. Elimina els parells que no facis servir i revisa els logs (sudo wg).

Llista de verificació tècnica

  • WireGuard instal·lat i funcionant a casa o VPS
  • Claus generades, guardades amb permisos correctes
  • Configuració amb IPs coherents (no barregis rangs)
  • IP forwarding i NAT activat si és necessari
  • Firewall obert al port 51820/UDP
  • Xarxa local accessible des del client remot
  • Persistència activada (systemctl enable wg-quick@wg0)

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *