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).
wg0.conf del server e ricarica. Non c'e' modo di "revocare" a distanza; devi togliere l'accesso lato server.