La tua VPN multi-hop: concatena due server WireGuard

Difficoltà: Avanzato 12 min di lettura Aggiornato: 22.07.2026 1
La tua VPN multi-hop: concatena due server WireGuard
Instrada il tuo traffico attraverso due server tuoi concatenando due VPS WireGuard in una catena multi-hop privata - il setup a doppio salto piu privato.

Una VPN multi-hop instrada il tuo traffico attraverso due server in due paesi diversi, cosi nessuna macchina sa mai allo stesso tempo chi sei e cosa fai. Le VPN commerciali lo offrono come "Double VPN" o "Secure Core", ma la versione piu privata e quella che costruisci tu stesso con due server che solo tu controlli. Questa guida concatena due server WireGuard - un server di ingresso a cui ti colleghi e un server di uscita da cui esce il tuo traffico - cosi il tuo IP reale e nascosto dietro due salti che nessun altro puo registrare.

Prima di iniziare: questa e una guida avanzata. Se non hai ancora configurato un singolo server WireGuard, segui prima la nostra guida WireGuard su VPS - qui si presuppone che questo processo ti sia familiare. Ti servono due VPS, idealmente di provider diversi in paesi diversi, entrambi con un Ubuntu o Debian pulito e accesso root.

Come funziona la catena

Il tuo dispositivo si collega solo al server di ingresso. Il server di ingresso non manda il tuo traffico direttamente su internet - lo inoltra invece tutto attraverso un secondo tunnel WireGuard al server di uscita, che poi raggiunge internet. Quindi il percorso e: tu → ingresso → uscita → internet. Il server di ingresso vede il tuo IP reale ma mai la tua destinazione; quello di uscita vede la tua destinazione ma vede sempre solo il server di ingresso. I siti vedono l'IP del server di uscita. Daremo al server di uscita l'intervallo 10.8.0.0/24 e a quello di ingresso 10.7.0.0/24 per i tuoi dispositivi.

Passo 1: Configurare il server di uscita

Il server di uscita e semplicemente un normale server WireGuard. Sul VPS di uscita, installa WireGuard e genera le sue chiavi:

apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/exit.key | wg pubkey > /etc/wireguard/exit.pub
cat /etc/wireguard/exit.key   # this is EXIT_PRIVATE_KEY
cat /etc/wireguard/exit.pub   # this is EXIT_PUBLIC_KEY

Trova la tua interfaccia di rete pubblica (di solito eth0) con ip route show default. Poi crea /etc/wireguard/wg0.conf sul server di uscita:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = EXIT_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# The entry server (we add its key in Step 4)
PublicKey = ENTRY_LINK_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Sostituisci eth0 se la tua interfaccia e diversa. Lascia ENTRY_LINK_PUBLIC_KEY come segnaposto per ora - lo generiamo al Passo 4.

Passo 2: Abilitare il forwarding e avviare l'uscita

Abilita l'IP forwarding in modo permanente, poi avvia WireGuard sul server di uscita:

echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl -p /etc/sysctl.d/99-wg.conf
ufw allow 51820/udp
systemctl enable --now wg-quick@wg0

Annota l'IP pubblico del server di uscita - lo chiameremo EXIT_IP.

Passo 3: Configurare il server di ingresso (il tuo lato)

Sul VPS di ingresso, installa WireGuard e genera due coppie di chiavi - una per il tunnel rivolto ai tuoi dispositivi (wg0) e una per il collegamento all'uscita (wg1):

apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/entry0.key | wg pubkey > /etc/wireguard/entry0.pub   # faces your devices
wg genkey | tee /etc/wireguard/entry1.key | wg pubkey > /etc/wireguard/entry1.pub   # link to exit

La chiave pubblica in entry1.pub e il ENTRY_LINK_PUBLIC_KEY che hai lasciato come segnaposto sul server di uscita al Passo 1. Torna indietro e incollalo ora nel wg0.conf dell'uscita, poi esegui systemctl restart wg-quick@wg0 sul server di uscita.

Passo 4: Creare il collegamento ingresso-uscita (wg1)

Sul server di ingresso, crea /etc/wireguard/wg1.conf. Questo rende il server di ingresso un client del server di uscita:

[Interface]
Address = 10.8.0.2/24
PrivateKey = ENTRY_LINK_PRIVATE_KEY
# Do NOT route the whole server through the exit - that would cut your own SSH.
# Send only your client subnet (10.7.0.0/24) through the exit, via a separate table.
Table = off
PostUp = ip rule add from 10.7.0.0/24 table 120; ip route add default dev wg1 table 120
PostDown = ip rule del from 10.7.0.0/24 table 120; ip route del default dev wg1 table 120

[Peer]
# The exit server
PublicKey = EXIT_PUBLIC_KEY
Endpoint = EXIT_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

ENTRY_LINK_PRIVATE_KEY e il contenuto di entry1.key. Questo e il passo piu importante da fare bene. Un semplice AllowedIPs = 0.0.0.0/0 farebbe instradare a WireGuard il traffico proprio del server di ingresso - inclusa la tua sessione SSH - attraverso l'uscita, interrompendo il tuo accesso al server. Table = off lo impedisce, e le regole di policy routing inviano solo la tua sottorete client attraverso l'uscita, lasciando il server stesso raggiungibile come sempre.

Passo 5: Creare il tunnel di ingresso per i tuoi dispositivi (wg0)

Sempre sul server di ingresso, crea /etc/wireguard/wg0.conf. Questo e il tunnel a cui si collega il tuo telefono o portatile, e le regole di routing spingono quel traffico dentro wg1:

[Interface]
Address = 10.7.0.1/24
ListenPort = 51820
PrivateKey = ENTRY_DEVICE_PRIVATE_KEY
PostUp = iptables -A FORWARD -i wg0 -o wg1 -j ACCEPT; iptables -A FORWARD -i wg1 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -o wg1 -j ACCEPT; iptables -D FORWARD -i wg1 -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o wg1 -j MASQUERADE

[Peer]
# Your device (we add its key in Step 6)
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.7.0.2/32

ENTRY_DEVICE_PRIVATE_KEY e il contenuto di entry0.key. Il masquerading su wg1 nasconde il tuo dispositivo dietro il server di ingresso, cosi l'uscita vede sempre solo l'ingresso.

Passo 6: Creare la config del dispositivo e connettersi

Genera una coppia di chiavi per il tuo dispositivo (sul tuo computer o sul server di ingresso), poi costruisci la config del client. Metti la chiave pubblica del dispositivo nel wg0.conf dell'ingresso dove c'e CLIENT_PUBLIC_KEY. La config del tuo dispositivo e cosi:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.7.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = ENTRY_DEVICE_PUBLIC_KEY
Endpoint = ENTRY_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Qui ENTRY_DEVICE_PUBLIC_KEY viene da entry0.pub, e ENTRY_IP e l'IP pubblico del server di ingresso - l'unico server con cui il tuo dispositivo parla mai.

Passo 7: Avviare l'ingresso e verificare la catena

Sul server di ingresso, abilita il forwarding e avvia entrambi i tunnel in ordine (prima il collegamento, poi il tunnel del dispositivo):

echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl -p /etc/sysctl.d/99-wg.conf
ufw allow 51820/udp
systemctl enable --now wg-quick@wg1
systemctl enable --now wg-quick@wg0

Ora importa la config del client nell'app WireGuard sul tuo dispositivo e connettiti. Per confermare che la catena funziona, controlla il tuo IP - deve mostrare il paese del server di uscita, non di ingresso:

curl https://api.ipify.org

Se restituisce l'IP del server di uscita, il tuo traffico salta attraverso entrambi i server. Esegui un test di leak sulla nostra pagina di strumenti di rete per assicurarti che non ci siano leak DNS o WebRTC.

Errori comuni: se non hai internet dopo la connessione, controlla che l'IP forwarding sia attivo (sysctl net.ipv4.ip_forward deve restituire 1) su entrambi i server, che il server di uscita abbia la tua chiave di ingresso nel blocco [Peer], e che entrambi i firewall consentano UDP 51820. Se l'IP mostra il paese di ingresso invece che di uscita, la regola MASQUERADE -o wg1 sull'ingresso non si e caricata - riavvia wg0 sul server di ingresso.

Ne vale la pena?

Un multi-hop auto-ospitato e la configurazione piu privata che ci sia: due server tuoi, in due paesi, senza provider nel mezzo che tiene log. I compromessi sono la velocita (due salti aggiungono latenza) e il costo (due VPS invece di uno). Per la navigazione quotidiana un solo server basta; costruisci la catena quando il tuo modello di minaccia lo richiede davvero. E ricorda: un multi-hop protegge la tua privacy, non cambia la legge del luogo in cui vivi.

Tag: multihop double vpn wireguard self-hosted advanced