WireGuard: VPN semplice per accedere alla tua smart home da fuori casa

Pubblicato il 14/05/2026 IoT

La cosa peggiore che puoi fare: aprire porte del router (8123 di HA, 1880 di Node-RED, ecc.) direttamente su Internet. Rischi hijack e ransomware. La cosa corretta: WireGuard su un raspberry/mini-server, e da fuori sei "dentro" la LAN come se fossi a casa.

1. Perche' WireGuard (non OpenVPN)

  • 4 volte piu' veloce di OpenVPN (crittografia moderna nel kernel Linux)
  • Config UNA riga per client, chiaramente leggibile
  • Riconnessione istantanea al cambio rete (WiFi <-> 4G)
  • Overhead irrisorio (batteria mobile)
  • App ufficiali per iOS, Android, macOS, Windows, Linux

2. Installazione server (Debian/Ubuntu su Raspberry Pi)

sudo apt install wireguard
cd /etc/wireguard
sudo wg genkey | tee server_private.key | wg pubkey | tee server_public.key
sudo chmod 600 server_private.key

3. Config server /etc/wireguard/wg0.conf

[Interface]
Address = 10.13.13.1/24
ListenPort = 51820
PrivateKey = <contenuto di server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Client 1: telefono
[Peer]
PublicKey = <public key del client 1>
AllowedIPs = 10.13.13.2/32

4. Abilita IP forwarding

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

5. Avvia il server

sudo systemctl enable --now wg-quick@wg0
sudo wg show                         # verifica

6. Apertura porta sul router

Nell'interfaccia del router (fastgate/tim/fritz/etc): port forwarding UDP 51820 → IP-DEL-RASPBERRY:51820. Solo UDP, solo porta 51820. Non aprire nient'altro.

7. Genera config client (telefono)

Sul server:

cd /etc/wireguard
wg genkey | tee client1_private.key | wg pubkey | tee client1_public.key

File client1.conf:

[Interface]
Address = 10.13.13.2/32
PrivateKey = <contenuto di client1_private.key>
DNS = 192.168.1.1              # DNS del tuo router (per risolvere .local)

[Peer]
PublicKey = <server_public.key>
Endpoint = tua-ip-pubblica.example.com:51820
AllowedIPs = 192.168.1.0/24, 10.13.13.0/24   # solo LAN, non tutto internet
PersistentKeepalive = 25

8. Aggiungi il client al server

# Aggiorna /etc/wireguard/wg0.conf:
[Peer]
PublicKey = <client1_public.key>
AllowedIPs = 10.13.13.2/32

# Ricarica config senza restart:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)

9. Import sul telefono

Installa WireGuard app dal App Store/Play Store. Menu + > Import from QR code. Il modo piu' comodo: sul server converti il config in QR:

sudo apt install qrencode
qrencode -t ansiutf8 < client1.conf

Puntualo con la fotocamera dal telefono. Import automatico. Attiva.

10. IP dinamico? DDNS gratis

Se il tuo ISP non ti da' IP statico, usa DuckDNS/No-IP:

# Installa update script (esempio DuckDNS)
mkdir ~/duckdns
echo 'echo url="https://www.duckdns.org/update?domains=TUONOME&token=TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -' > ~/duckdns/duck.sh
chmod +x ~/duckdns/duck.sh
crontab -e
# aggiungi:
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

Nel client config metti Endpoint = tuonome.duckdns.org:51820.

11. Tailscale come alternativa senza port forwarding

Se non puoi/non vuoi aprire porte sul router (fibra CGNAT, guest network), Tailscale risolve tramite hole-punching. Gratis fino a 100 device. Basato su WireGuard sotto. Setup: 2 minuti totali. Trade-off: passi per i loro server relay (dati end-to-end cifrati comunque).

Sicurezza chiave privata: le private.key sono uniche e non recuperabili. Se un client viene rubato, rimuovi il suo [Peer] dal wg0.conf del server e ricarica. Non c'e' modo di "revocare" a distanza; devi togliere l'accesso lato server.