VPN e DNS locale
WireGuard, Tailscale, tunnel Cloudflare, Pi-hole e DNS dinamico. Ogni comando è verificato e copiabile; in chat basta descrivere cosa vuoi fare.
12 comandi in questa pagina
- Come genero le chiavi e la config server di WireGuard?
- Come aggiungo un client (peer) a WireGuard?
- Come attivo WireGuard (e al boot)?
- WireGuard non fa handshake: come lo debuggo?
- Split tunnel o tutto il traffico in VPN? (AllowedIPs)
- Come installo e collego Tailscale?
- Come uso un nodo Tailscale come exit node?
- Come raggiungo tutta la LAN di casa via Tailscale (subnet router)?
- Come espongo un servizio con un tunnel Cloudflare?
- Come aggiungo un record DNS locale su Pi-hole?
- Come gestisco blocklist e whitelist di Pi-hole da CLI?
- Come aggiorno il DNS dinamico su Cloudflare (IP di casa che cambia)?
# Come genero le chiavi e la config server di WireGuard?
wg genkey | tee server.key | wg pubkey > server.pub
# /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <server.key>
Le chiavi private non lasciano MAI la macchina che le ha generate: ognuno genera le proprie, si scambiano solo le pubbliche.
Approfondisci: WireGuard o OpenVPN: quale scegliere per l'accesso remoto?Come si espone un servizio self-hosted senza aprire porte?
# Come aggiungo un client (peer) a WireGuard?
# sul server, in wg0.conf:
[Peer]
PublicKey = <chiave-pubblica-del-client>
AllowedIPs = 10.8.0.2/32
wg syncconf wg0 <(wg-quick strip wg0) # applica senza staccare gli altri
AllowedIPs /32 sul server = quell'IP appartiene a quel peer; il syncconf evita di buttare giù le sessioni attive.
Approfondisci: WireGuard o OpenVPN: quale scegliere per l'accesso remoto?
# Come attivo WireGuard (e al boot)?
wg-quick up wg0
systemctl enable --now wg-quick@wg0
wg-quick down wg0 per spegnerla; la unit wg-quick@ la rende un servizio come gli altri.
Approfondisci: WireGuard o OpenVPN: quale scegliere per l'accesso remoto?
# WireGuard non fa handshake: come lo debuggo?
wg show # latest handshake: mai? il traffico non arriva
# checklist: porta UDP aperta? chiavi giuste? endpoint raggiungibile?
nc -zvu server.example.com 51820
latest handshake assente = pacchetti persi (porta/NAT) o chiavi sbagliate; WireGuard non logga i tentativi falliti per design.
Approfondisci: WireGuard o OpenVPN: quale scegliere per l'accesso remoto?Come si espone un servizio self-hosted senza aprire porte?
# Split tunnel o tutto il traffico in VPN? (AllowedIPs)
# split tunnel (solo la LAN remota):
AllowedIPs = 192.168.1.0/24
# full tunnel (tutto in VPN):
AllowedIPs = 0.0.0.0/0, ::/0
AllowedIPs lato CLIENT decide cosa entra nel tunnel: è routing, non un filtro di sicurezza.
Approfondisci: VPN e proxy: cosa cambia?WireGuard o OpenVPN: quale scegliere per l'accesso remoto?
# Come installo e collego Tailscale?
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
tailscale status mostra la tua rete; niente porte da aprire: passa da solo dietro NAT e CGNAT.
Approfondisci: Come si espone un servizio self-hosted senza aprire porte?
# Come uso un nodo Tailscale come exit node?
# sul nodo che fa da uscita:
tailscale up --advertise-exit-node
# sul client:
tailscale up --exit-node=<nome-o-ip>
L'exit node va approvato nella console admin; occhio: da quel momento TUTTO il traffico del client esce da lì.
Approfondisci: Come si espone un servizio self-hosted senza aprire porte?VPN e proxy: cosa cambia?
# Come raggiungo tutta la LAN di casa via Tailscale (subnet router)?
# sul nodo dentro la LAN:
tailscale up --advertise-routes=192.168.1.0/24
# sui client: tailscale up --accept-routes
Così vedi anche i dispositivi SENZA Tailscale (stampanti, NAS); la rotta va approvata nella console admin.
Approfondisci: Come si espone un servizio self-hosted senza aprire porte?
# Come espongo un servizio con un tunnel Cloudflare?
cloudflared tunnel login
cloudflared tunnel create mio-tunnel
# config.yml: ingress con hostname -> http://localhost:8080
cloudflared tunnel route dns mio-tunnel app.example.com
cloudflared tunnel run mio-tunnel
Zero porte aperte sul router: la connessione esce da casa verso Cloudflare, mai il contrario.
Approfondisci: Come si espone un servizio self-hosted senza aprire porte?
# Come aggiungo un record DNS locale su Pi-hole?
# UI: Local DNS -> DNS Records
# o a file: /etc/pihole/custom.list
192.168.1.10 nas.casa
pihole restartdns
I nomi locali (nas.casa) sono la differenza tra un homelab e una collezione di IP a memoria.
Approfondisci: Pi-hole o AdGuard Home: quale scegliere?Come si sceglie un resolver DNS privato e sicuro?
# Come gestisco blocklist e whitelist di Pi-hole da CLI?
pihole -w dominio-da-sbloccare.com
pihole -b dominio-da-bloccare.com
pihole -g # aggiorna le blocklist (gravity)
Quando "il sito non funziona col Pi-hole": query log, trova il dominio bloccato, -w mirato – non spegnere tutto.
Approfondisci: Pi-hole o AdGuard Home: quale scegliere?
# Come aggiorno il DNS dinamico su Cloudflare (IP di casa che cambia)?
curl -X PATCH 'https://api.cloudflare.com/client/v4/zones/<ZONE>/dns_records/<ID>' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
--data '{"content":"'$(curl -s https://api.ipify.org)'"}'
# in cron ogni 5 minuti, o con ddclient
Token API con permesso SOLO su quella zona DNS; TTL basso (120s) sul record, o il cambio IP si propaga tardi.
Approfondisci: Come si diagnostica la propagazione DNS?Come si espone un servizio self-hosted senza aprire porte?