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)

