Ricerca nel sito web

Come configurare WireGuard su Debian 11


introduzione

Tailscale funziona.

La crittografia di WireGuard si basa su chiavi pubbliche e private affinché i peer stabiliscano un tunnel crittografato tra di loro. Ogni versione di WireGuard utilizza una specifica suite di cifratura crittografica per garantire semplicità, sicurezza e compatibilità con i peer.

In confronto, altri software VPN come IPSec utilizzano Transport Layer Security (TLS) e certificati per autenticare e stabilire tunnel crittografati tra i sistemi. Diverse versioni di TLS includono il supporto per centinaia di diverse suite e algoritmi crittografici e, sebbene ciò consenta una grande flessibilità per supportare client diversi, rende anche la configurazione di una VPN che utilizza TLS più dispendiosa in termini di tempo, complessa e soggetta a errori.

In questo tutorial, configurerai WireGuard su un server Debian 11 e quindi configurerai un'altra macchina per connettersi ad esso come peer utilizzando entrambe le connessioni IPv4 e IPv6 (comunemente indicate come connessione dual stack). Imparerai anche come instradare il traffico Internet del peer attraverso il server WireGuard in una configurazione gateway, oltre a utilizzare la VPN per un tunnel peer-to-peer crittografato.

Ai fini di questo tutorial, configureremo un altro sistema Debian 11 come peer (noto anche come client) al server WireGuard. I tutorial successivi di questa serie spiegheranno come installare ed eseguire WireGuard su sistemi e dispositivi Windows, macOS, Android e iOS.

Nota: se prevedi di configurare WireGuard su un DigitalOcean Droplet, tieni presente che noi, come molti provider di hosting, addebitiamo costi per le eccedenze di larghezza di banda. Per questo motivo, fai attenzione a quanto traffico sta gestendo il tuo server. Vedi questa pagina per maggiori informazioni.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di:

  • Un server Debian 11 con un utente sudo non root e un firewall abilitato. Per configurarlo, puoi seguire il nostro tutorial Configurazione iniziale del server con Debian 11. In questa guida ci riferiremo a questo come server WireGuard.
  • Avrai bisogno di un computer client che utilizzerai per connetterti al tuo server WireGuard. In questo tutorial faremo riferimento a questa macchina come WireGuard Peer. Ai fini di questo tutorial, si consiglia di utilizzare il computer locale come peer WireGuard, ma è possibile utilizzare server remoti o telefoni cellulari come client, se si preferisce. Se stai utilizzando un sistema remoto, assicurati di seguire tutte le sezioni facoltative più avanti in questo tutorial o potresti bloccarti fuori dal sistema.
  • Per utilizzare WireGuard con IPv6, dovrai anche assicurarti che il tuo server sia configurato per supportare quel tipo di traffico. Se desideri abilitare il supporto IPv6 con WireGuard e stai utilizzando un Droplet DigitalOcean, fai riferimento a questa pagina della documentazione Come abilitare IPv6 su Droplet. Puoi aggiungere il supporto IPv6 quando crei un Droplet o in seguito utilizzando le istruzioni in quella pagina.

Passaggio 1: installazione di WireGuard e generazione di una coppia di chiavi

Il primo passo in questo tutorial è installare WireGuard sul tuo server. Per iniziare, aggiorna l'indice del pacchetto del tuo server WireGuard e installa WireGuard utilizzando i seguenti comandi. Ti potrebbe essere richiesto di fornire la password del tuo utente sudo se è la prima volta che utilizzi sudo in questa sessione:

  1. sudo apt update
  2. sudo apt install wireguard

Ora che hai installato WireGuard, il passaggio successivo consiste nel generare una coppia di chiavi pubblica e privata per il server. Utilizzerai i comandi integrati wg genkey e wg pubkey per creare le chiavi, quindi aggiungerai la chiave privata al file di configurazione di WireGuard.

Dovrai anche cambiare i permessi sulla chiave che hai appena creato usando il comando chmod, poiché per impostazione predefinita il file è leggibile da qualsiasi utente sul tuo server.

Crea la chiave privata per WireGuard e modifica le sue autorizzazioni utilizzando i seguenti comandi:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Il comando sudo chmod go=... rimuove qualsiasi autorizzazione sul file per utenti e gruppi diversi dall'utente root per garantire che solo l'utente root possa accedere alla chiave privata.

Dovresti ricevere una singola riga di output codificato base64, che è la chiave privata. Una copia dell'output è anche memorizzata nel file /etc/wireguard/private.key per riferimenti futuri dalla parte tee del comando. Prendi nota con attenzione della chiave privata che viene emessa poiché dovrai aggiungerla al file di configurazione di WireGuard più avanti in questa sezione.

Il passaggio successivo consiste nel creare la chiave pubblica corrispondente, derivata dalla chiave privata. Utilizzare il seguente comando per creare il file della chiave pubblica:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Questo comando è composto da tre singoli comandi concatenati utilizzando l'operatore | (pipe):

  • sudo cat /etc/wireguard/private.key: questo comando legge il file della chiave privata e lo restituisce al flusso di output standard.
  • wg pubkey: il secondo comando prende l'output del primo comando come input standard e lo elabora per generare una chiave pubblica.
  • sudo tee /etc/wireguard/public.key: il comando finale prende l'output del comando di generazione della chiave pubblica e lo reindirizza nel file denominato /etc/wireguard/public. chiave.

Quando esegui il comando, riceverai nuovamente una singola riga di output codificato base64, che è la chiave pubblica per il tuo server WireGuard. Copialo da qualche parte per riferimento, poiché dovrai distribuire la chiave pubblica a qualsiasi peer che si connette al server.

Passaggio 2: scelta degli indirizzi IPv4 e IPv6

Nella sezione precedente, hai installato WireGuard e generato una coppia di chiavi che verrà utilizzata per crittografare il traffico da e verso il server. In questa sezione, creerai un file di configurazione per il server e configurerai WireGuard per l'avvio automatico al riavvio del server. Definirai anche indirizzi IPv4 e IPv6 privati da utilizzare con il tuo server WireGuard e i tuoi peer.

Se prevedi di utilizzare entrambi gli indirizzi IPv4 e IPv6, segui entrambe queste sezioni. Altrimenti, segui le istruzioni nella sezione appropriata per le esigenze di rete della tua VPN.

Passaggio 2(a): scelta di un intervallo IPv4

Se stai utilizzando il tuo server WireGuard con peer IPv4, il server necessita di un intervallo di indirizzi IPv4 privati da utilizzare per i client e per la sua interfaccia tunnel. Puoi scegliere qualsiasi intervallo di indirizzi IP dai seguenti blocchi di indirizzi riservati (se desideri saperne di più su come questi blocchi vengono allocati, visita la specifica RFC 1918):

    Da
  • 10.0.0.0 a 10.255.255.255 (prefisso 10/8)
  • Da
  • 172.16.0.0 a 172.31.255.255 (prefisso 172.16/12)
  • Da
  • 192.168.0.0 a 192.168.255.255 (prefisso 192.168/16)

Ai fini di questo tutorial, utilizzeremo 10.8.0.0/24 come blocco di indirizzi IP dal primo intervallo di IP riservati. Questo intervallo consentirà fino a 255 diverse connessioni peer e generalmente non dovrebbe avere indirizzi sovrapposti o in conflitto con altri intervalli IP privati. Sentiti libero di scegliere un intervallo di indirizzi che funzioni con la tua configurazione di rete se questo intervallo di esempio non è compatibile con le tue reti.

Il server WireGuard utilizzerà un singolo indirizzo IP dall'intervallo per il proprio indirizzo IPv4 del tunnel privato. Useremo 10.8.0.1/24 qui, ma può essere utilizzato qualsiasi indirizzo nell'intervallo da 10.8.0.1 a 10.8.0.255. Prendi nota dell'indirizzo IP che scegli se usi qualcosa di diverso da 10.8.0.1/24. Aggiungerai questo indirizzo IPv4 al file di configurazione definito nel Passaggio 3 — Creazione di una configurazione del server WireGuard.

Passaggio 2(b): scelta di un intervallo IPv6

Se utilizzi WireGuard con IPv6, dovrai generare un prefisso di indirizzo unicast IPv6 locale univoco basato sull'algoritmo in RFC 4193. Gli indirizzi che utilizzi con il server WireGuard saranno associati a un'interfaccia tunnel virtuale. Dovrai completare alcuni passaggi per generare un prefisso IPv6 univoco casuale all'interno del blocco fd00::/8 riservato di indirizzi IPv6 privati.

Secondo RFC, il modo consigliato per ottenere un prefisso IPv6 univoco è combinare l'ora del giorno con un valore identificativo univoco da un sistema come un numero di serie o un ID dispositivo. Tali valori vengono quindi sottoposti ad hashing e troncati risultando in un insieme di bit che possono essere utilizzati come indirizzo univoco all'interno del blocco privato fd00::/8 di IP.

Per iniziare a generare un intervallo IPv6 per il tuo server WireGuard, raccogli un timestamp a 64 bit utilizzando l'utility date con il seguente comando:

  1. date +%s%N

Riceverai un numero come il seguente, che è il numero di secondi (il %s nel comando date) e i nanosecondi (il %N) dal 1970-01-01 00:00:00 UTC combinati insieme:

Output
1650301699497770167

Registrare il valore da qualche parte per usarlo più avanti in questa sezione. Successivamente, copia il valore machine-id per il tuo server dal file /var/lib/dbus/machine-id. Questo identificatore è univoco per il tuo sistema e non dovrebbe cambiare finché esiste il server.

  1. cat /var/lib/dbus/machine-id

Riceverai un output come il seguente:

/var/lib/dbus/machine-id
610cef4946ed46da8f71dba9d66c67fb

Ora devi combinare il timestamp con machine-id ed eseguire l'hashing del valore risultante utilizzando l'algoritmo SHA-1. Il comando utilizzerà il seguente formato:

printf <timestamp><machine-id> | sha1sum

Esegui il comando sostituendo il timestamp e i valori di identità della macchina:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

Riceverai un valore hash come il seguente:

Output
442adea1488d96388dae9ab816045b24609a6c18 -

Si noti che l'output del comando sha1sum è in formato esadecimale, quindi l'output utilizza due caratteri per rappresentare un singolo byte di dati. Ad esempio, 4f e 26 nell'output di esempio sono i primi due byte dei dati con hash.

L'algoritmo nella RFC richiede solo i 40 bit (finali) meno significativi, o 5 byte, dell'output con hash. Usa il comando cut per stampare gli ultimi 5 byte codificati esadecimali dall'hash:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

L'argomento -c dice al comando cut di selezionare solo un set di caratteri specificato. L'argomento 31- dice a cut di stampare tutti i caratteri dalla posizione 31 fino alla fine della riga di input.

Dovresti ricevere un output come il seguente:

Output
24609a6c18

In questo output di esempio, l'insieme di byte è: 24 60 9a 6c 18 .

Ora puoi costruire il tuo prefisso di rete IPv6 univoco aggiungendo ai 5 byte che hai generato il prefisso fd, separando ogni 2 byte con i due punti : per la leggibilità. Poiché ogni sottorete nel tuo prefisso univoco può contenere un totale di 18.446.744.073.709.551.616 possibili indirizzi IPv6, puoi limitare la sottorete a una dimensione standard di /64 per semplicità.

Utilizzando i byte precedentemente generati con la dimensione della sottorete /64, il prefisso risultante sarà il seguente:

Unique Local IPv6 Address Prefix
fd24:609a:6c18::/64

Questo intervallo fd24:609a:6c18::/64 è ciò che utilizzerai per assegnare i singoli indirizzi IP alle interfacce del tunnel WireGuard sul server e sui peer. Per allocare un IP per il server, aggiungi un 1 dopo i caratteri :: finali. L'indirizzo risultante sarà fd24:609a:6c18::1/64. I peer possono utilizzare qualsiasi IP nell'intervallo, ma in genere incrementerai il valore di uno ogni volta che aggiungi un peer, ad es. fd24:609a:6c18::2/64. Prendere nota dell'IP e procedere alla configurazione del server WireGuard nella sezione successiva di questo tutorial.

Passaggio 3: creazione di una configurazione del server WireGuard

Prima di creare la configurazione del tuo server WireGuard, avrai bisogno delle seguenti informazioni:

  1. Assicurati di avere la chiave privata disponibile dal Passaggio 1: installazione di WireGuard e generazione di una coppia di chiavi.
  2. Se utilizzi WireGuard con IPv4, avrai bisogno dell'indirizzo IP che hai scelto per il server nel passaggio 2(a) — Scelta di un intervallo IPv4, che in questo esempio è 10.8.0.1/24< /mark>.
  3. Se stai utilizzando WireGuard con IPv6, avrai bisogno dell'indirizzo IP per il server che hai generato nel Passaggio 2(b) — Scelta di un intervallo IPv6. In questo esempio l'IP è fd24:609a:6c18::1/64.

Una volta che hai la chiave privata e gli indirizzi IP richiesti, crea un nuovo file di configurazione usando nano o il tuo editor preferito eseguendo il seguente comando:

  1. sudo nano /etc/wireguard/wg0.conf

Aggiungi le seguenti righe al file, sostituendo la tua chiave privata al posto del valore base64_encoded_private_key_goes_here evidenziato e l'indirizzo o gli indirizzi IP nella riga Indirizzo. Puoi anche modificare la riga ListenPort se desideri che WireGuard sia disponibile su una porta diversa:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true

La riga SaveConfig garantisce che quando un'interfaccia WireGuard viene arrestata, qualsiasi modifica venga salvata nel file di configurazione.

Salva e chiudi il file /etc/wireguard/wg0.conf. Se stai usando nano, puoi farlo con CTRL+X, quindi Y e ENTER per confermare. Ora disponi di una configurazione iniziale del server su cui puoi costruire a seconda di come prevedi di utilizzare il tuo server VPN WireGuard.

Passaggio 4: regolazione della configurazione di rete del server WireGuard

Se utilizzi WireGuard per connettere un peer al server WireGuard per accedere solo ai servizi sul server, non è necessario completare questa sezione. Se desideri instradare il traffico Internet del tuo peer WireGuard attraverso il server WireGuard, dovrai configurare l'inoltro IP seguendo questa sezione del tutorial.

Per configurare l'inoltro, apri il file /etc/sysctl.conf sul tuo server Wireguard utilizzando nano o il tuo editor preferito:

  1. sudo nano /etc/sysctl.conf

Se utilizzi IPv4 con WireGuard, aggiungi la seguente riga in fondo al file:

net.ipv4.ip_forward=1

Se utilizzi IPv6 con WireGuard, aggiungi questa riga in fondo al file:

net.ipv6.conf.all.forwarding=1

Se utilizzi sia IPv4 che IPv6, assicurati di includere entrambe le righe. Salva e chiudi il file quando hai finito.

Per leggere il file e caricare i nuovi valori per la sessione del terminale corrente, eseguire:

  1. sudo sysctl -p
Output
net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1

Ora il tuo server WireGuard sarà in grado di inoltrare il traffico in entrata dal dispositivo Ethernet VPN virtuale ad altri sul server e da lì alla rete Internet pubblica. L'utilizzo di questa configurazione ti consentirà di instradare tutto il traffico Web dal tuo WireGuard Peer tramite l'indirizzo IP del tuo server e l'indirizzo IP pubblico del tuo client sarà effettivamente nascosto.

Tuttavia, prima che il traffico possa essere instradato correttamente attraverso il tuo server, dovrai configurare alcune regole del firewall. Queste regole assicureranno che il traffico da e verso il server e i peer WireGuard scorra correttamente.

Passaggio 5: configurazione del firewall del server WireGuard

In questa sezione, modificherai la configurazione del server WireGuard per aggiungere regole firewall che assicureranno che il traffico da e verso il server e i client sia instradato correttamente. Come nella sezione precedente, salta questo passaggio se stai utilizzando la tua VPN WireGuard solo per una connessione da macchina a macchina per accedere a risorse limitate alla tua VPN.

Per consentire il traffico VPN WireGuard attraverso il firewall del server, è necessario abilitare il mascheramento, che è un concetto di iptables che fornisce la traduzione dinamica degli indirizzi di rete (NAT) al volo per instradare correttamente le connessioni client.

Per prima cosa, trova l'interfaccia di rete pubblica del tuo server WireGuard utilizzando il sottocomando ip route:

  1. ip route list default

L'interfaccia pubblica è la stringa trovata all'interno dell'output di questo comando che segue la parola \dev. Ad esempio, questo risultato mostra l'interfaccia denominata eth0, evidenziata di seguito:

Output
default via 203.0.113.1 dev eth0 proto static

Prendi nota del nome del tuo dispositivo poiché lo aggiungerai alle regole iptables nel passaggio successivo.

Per aggiungere regole firewall al tuo server WireGuard, apri di nuovo il file /etc/wireguard/wg0.conf con nano o il tuo editor preferito.

  1. sudo nano /etc/wireguard/wg0.conf

In fondo al file, dopo la riga SaveConfig=true, incolla le seguenti righe:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Le righe PostUp verranno eseguite quando il server WireGuard avvia il tunnel VPN virtuale. Nell'esempio qui, aggiungerà tre regole ufw e iptables:

  • ufw route allow in on wg0 out on eth0 - Questa regola consentirà l'inoltro del traffico IPv4 e IPv6 che entra nella VPN wg0 all'interfaccia di rete eth0 sul server. Funziona insieme ai valori sysctl net.ipv4.ip_forward e net.ipv6.conf.all.forwarding che hai configurato nella sezione precedente.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE - Questa regola configura il mascheramento e riscrive il traffico IPv4 che entra nell'interfaccia VPN wg0 per rendere sembra provenire direttamente dall'indirizzo IPv4 pubblico del server WireGuard.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE - Questa regola configura il mascheramento e riscrive il traffico IPv6 che entra nell'interfaccia VPN wg0 per rendere sembra provenire direttamente dall'indirizzo IPv6 pubblico del server WireGuard.

Le regole PreDown vengono eseguite quando il server WireGuard interrompe il tunnel VPN virtuale. Queste regole sono l'inverso delle regole PostUp e funzionano per annullare le regole di inoltro e mascheramento per l'interfaccia VPN quando la VPN viene arrestata.

In entrambi i casi, modifica la configurazione per includere o escludere le regole IPv4 e IPv6 appropriate per la tua VPN. Ad esempio, se stai utilizzando solo IPv4, puoi escludere le righe con i comandi ip6tables.

Al contrario, se utilizzi solo IPv6, modifica la configurazione per includere solo i comandi ip6tables. Le righe ufw dovrebbero esistere per qualsiasi combinazione di reti IPv4 e IPv6. Salva e chiudi il file quando hai finito.

L'ultima parte della configurazione del firewall sul server WireGuard consiste nel consentire il traffico da e verso la porta UDP WireGuard stessa. Se non hai modificato la porta nel file /etc/wireguard/wg0.conf del server, la porta che aprirai è 51820. Se hai scelto una porta diversa durante la modifica della configurazione, assicurati di sostituirla nel seguente comando UFW.

Nel caso in cui ti sei dimenticato di aprire la porta SSH mentre segui il tutorial dei prerequisiti, aggiungila anche qui:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

Nota: se utilizzi un firewall diverso o hai personalizzato la configurazione UFW, potrebbe essere necessario aggiungere ulteriori regole firewall. Ad esempio, se decidi di incanalare tutto il tuo traffico di rete sulla connessione VPN, dovrai assicurarti che il traffico della porta 53 sia consentito per le richieste DNS e porte come 80 > e 443 rispettivamente per il traffico HTTP e HTTPS. Se ci sono altri protocolli che stai utilizzando sulla VPN, dovrai aggiungere regole anche per loro.

Dopo aver aggiunto queste regole, disattiva e riattiva UFW per riavviarlo e caricare le modifiche da tutti i file che hai modificato:

  1. sudo ufw disable
  2. sudo ufw enable

Puoi confermare che le regole sono in atto eseguendo il comando ufw status. Eseguilo e dovresti ricevere un output simile al seguente:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)

Il tuo server WireGuard è ora configurato per gestire correttamente il traffico della VPN, incluso l'inoltro e il mascheramento per i peer. Con le regole del firewall in atto, puoi avviare il servizio WireGuard stesso per ascoltare le connessioni peer.

Passaggio 6: avvio del server WireGuard

WireGuard può essere configurato per essere eseguito come un servizio systemd utilizzando il suo script wg-quick integrato. Sebbene tu possa utilizzare manualmente il comando wg per creare il tunnel ogni volta che desideri utilizzare la VPN, farlo è un processo manuale che diventa ripetitivo e soggetto a errori. Invece, puoi usare systemctl per gestire il tunnel con l'aiuto dello script wg-quick.

L'utilizzo di un servizio systemd significa che puoi configurare WireGuard per l'avvio all'avvio in modo da poterti connettere alla tua VPN in qualsiasi momento finché il server è in esecuzione. Per fare ciò, abilita il servizio wg-quick per il tunnel wg0 che hai definito aggiungendolo a systemctl:

  1. sudo systemctl enable wg-quick@wg0.service

Si noti che il comando specifica il nome del dispositivo del tunnel wg0 come parte del nome del servizio. Questo nome corrisponde al file di configurazione /etc/wireguard/wg0.conf. Questo approccio alla denominazione significa che puoi creare tutti i tunnel VPN separati che desideri utilizzando il tuo server.

Ad esempio, potresti avere un dispositivo tunnel e il nome di prod e il suo file di configurazione sarebbero /etc/wireguard/prod.conf. Ogni configurazione del tunnel può contenere diverse impostazioni IPv4, IPv6 e client firewall. In questo modo, puoi supportare connessioni peer multiple e diverse, ognuna con i propri indirizzi IP e regole di routing univoci.

Ora avvia il servizio:

  1. sudo systemctl start wg-quick@wg0.service

Ricontrolla che il servizio WireGuard sia attivo con il seguente comando. Dovresti vedere attivo (in esecuzione) nell'output:

  1. sudo systemctl status wg-quick@wg0.service
Output
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

L'output mostra i comandi ip utilizzati per creare il dispositivo virtuale wg0 e assegnargli gli indirizzi IPv4 e IPv6 che hai aggiunto al file di configurazione. Puoi utilizzare queste regole per risolvere i problemi del tunnel o con il comando wg stesso se desideri provare a configurare manualmente l'interfaccia VPN.

Con il server configurato e in esecuzione, il passaggio successivo consiste nel configurare il computer client come peer WireGuard e connettersi al server WireGuard.

Passaggio 7: configurazione di un peer WireGuard

La configurazione di un peer WireGuard è simile alla configurazione del server WireGuard. Una volta installato il software client, genererai una coppia di chiavi pubblica e privata, deciderai uno o più indirizzi IP per il peer, definirai un file di configurazione per il peer e poi avvierai il tunnel usando il wg- veloce script.

Puoi aggiungere tutti i peer che desideri alla tua VPN generando una coppia di chiavi e una configurazione utilizzando i seguenti passaggi. Se aggiungi più peer alla VPN, assicurati di tenere traccia dei loro indirizzi IP privati per evitare collisioni.

Per configurare il peer WireGuard, assicurati di aver installato il pacchetto WireGuard utilizzando i seguenti comandi apt. Sulla peer run di WireGuard:

  1. sudo apt update
  2. sudo apt install wireguard

Creazione della coppia di chiavi del peer WireGuard

Successivamente, dovrai generare la coppia di chiavi sul peer utilizzando gli stessi passaggi che hai utilizzato sul server. Dal tuo computer locale o server remoto che fungerà da peer, procedi e crea la chiave privata per il peer usando i seguenti comandi:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Ancora una volta riceverai una singola riga di output codificato base64, che è la chiave privata. Una copia dell'output è memorizzata anche in /etc/wireguard/private.key. Prendi nota con attenzione della chiave privata che viene emessa poiché dovrai aggiungerla al file di configurazione del peer WireGuard più avanti in questa sezione.

Quindi utilizzare il seguente comando per creare il file della chiave pubblica:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Riceverai nuovamente una singola riga di output codificato base64, che è la chiave pubblica per il tuo peer WireGuard. Copialo da qualche parte per riferimento, poiché dovrai distribuire la chiave pubblica al server WireGuard per stabilire una connessione crittografata.

Creazione del file di configurazione del peer WireGuard

Ora che disponi di una coppia di chiavi, puoi creare un file di configurazione per il peer che contenga tutte le informazioni necessarie per stabilire una connessione al server WireGuard.

Avrai bisogno di alcune informazioni per il file di configurazione:

  • La chiave privata codificata base64 che hai generato sul peer.
  • Gli intervalli di indirizzi IPv4 e IPv6 definiti sul server WireGuard.
  • La chiave pubblica codificata base64 dal server WireGuard.
  • L'indirizzo IP pubblico e il numero di porta del server WireGuard. Di solito questo sarà l'indirizzo IPv4, ma se il tuo server ha un indirizzo IPv6 e il tuo computer client ha una connessione IPv6 a Internet puoi usare questo invece di IPv4.

Con tutte queste informazioni a portata di mano, apri un nuovo file /etc/wireguard/wg0.conf sulla macchina WireGuard Peer utilizzando nano o il tuo editor preferito:

  1. sudo nano /etc/wireguard/wg0.conf

Aggiungi le seguenti righe al file, sostituendo i vari dati nelle sezioni evidenziate come richiesto:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.**2**/24 Address = fd24:609a:6c18::**2**/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820

Nota come la prima riga Address utilizza un indirizzo IPv4 dalla sottorete 10.8.0.0/24 che hai scelto in precedenza. Questo indirizzo IP può essere qualsiasi cosa nella sottorete purché sia diverso dall'IP del server. Incrementare gli indirizzi di 1 ogni volta che aggiungi un peer è generalmente il modo più semplice per allocare gli IP.

Allo stesso modo, nota come la seconda riga Address utilizza un indirizzo IPv6 dalla sottorete che hai generato in precedenza e incrementa l'indirizzo del server di uno. Ancora una volta, qualsiasi IP nell'intervallo è valido se decidi di utilizzare un indirizzo diverso.

L'altra parte degna di nota del file è l'ultima riga AllowedIPs. Questi due intervalli IPv4 e IPv6 indicano al peer di inviare il traffico sulla VPN solo se il sistema di destinazione ha un indirizzo IP in entrambi gli intervalli. Utilizzando la direttiva AllowedIPs, puoi limitare la VPN sul peer in modo che si connetta solo ad altri peer e servizi sulla VPN, oppure puoi configurare l'impostazione per eseguire il tunneling di tutto il traffico sulla VPN e utilizzare il server WireGuard come porta d'ingresso.

Se utilizzi solo IPv4, ometti l'intervallo fd24:609a:6c18::/64 finale (inclusa la virgola ,). Viceversa, se utilizzi solo IPv6, includi solo il prefisso fd24:609a:6c18::/64 e tralascia l'intervallo IPv4 10.8.0.0/24.

In entrambi i casi, se desideri inviare tutto il traffico del tuo peer sulla VPN e utilizzare il server WireGuard come gateway per tutto il traffico, puoi utilizzare 0.0.0.0/0, che rappresenta l'intero spazio degli indirizzi IPv4 e ::/0 per l'intero spazio degli indirizzi IPv6.

(Facoltativo) Configurazione di un peer per instradare tutto il traffico attraverso il tunnel

Se hai scelto di instradare tutto il traffico del peer sul tunnel utilizzando le route 0.0.0.0/0 o ::/0 e il peer è un sistema remoto, allora sarà necessario completare i passaggi in questa sezione. Se il tuo peer è un sistema locale, allora è meglio saltare questa sezione.

Per i peer remoti a cui accedi tramite SSH o qualche altro protocollo utilizzando un indirizzo IP pubblico, dovrai aggiungere alcune regole extra al file wg0.conf del peer. Queste regole garantiranno che tu possa ancora connetterti al sistema peer dall'esterno del tunnel quando è connesso. Altrimenti, quando il tunnel viene stabilito, tutto il traffico che normalmente verrebbe gestito sull'interfaccia di rete pubblica non verrà instradato correttamente per bypassare l'interfaccia del tunnel wg0, portando a un sistema remoto inaccessibile.

Innanzitutto, dovrai determinare l'indirizzo IP che il sistema peer utilizza come gateway predefinito. Esegui il seguente comando ip route:

  1. ip route list table main default

Riceverai un output come il seguente:

Output
default via 203.0.113.1 dev eth0 proto static

Prendi nota dell'indirizzo IP 203.0.113.1 evidenziato del gateway per un uso successivo e del dispositivo eth0. Il nome del tuo dispositivo potrebbe essere diverso. In tal caso, sostituiscilo al posto di eth0 nei seguenti comandi.

Successivamente, trova l'IP pubblico per il sistema peer esaminando il dispositivo con il comando ip address show:

  1. ip -brief address show eth0

Riceverai un output come il seguente:

Output
eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

In questo output di esempio, l'IP 203.0.113.5 evidenziato (senza il /20 finale) è l'indirizzo pubblico assegnato al eth0 dispositivo che dovrai aggiungere alla configurazione peer WireGuard.

Ora apri il file /etc/wireguard/wg0.conf di WireGuard Peer con nano o il tuo editor preferito.

  1. sudo nano /etc/wireguard/wg0.conf

Prima della riga [Peer], aggiungi le seguenti 4 righe:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

Queste linee creeranno una regola di routing personalizzata e aggiungeranno un percorso personalizzato per garantire che il traffico pubblico verso il sistema peer utilizzi il gateway predefinito.

  • PostUp=ip rule add table 200 from 203.0.113.5 - Questo comando crea una regola che controlla eventuali voci di instradamento nella tabella numerata 200 quando l'IP corrisponde all'indirizzo 203.0.113.5 pubblico del sistema peer.
  • PostUp=ip route add table 200 default via 203.0.113.1 - Questo comando garantisce che tutto il traffico elaborato dalla tabella 200 usa il gateway 203.0.113.1 per il routing, invece dell'interfaccia WireGuard.

Le righe PreDown rimuovono la regola personalizzata e instradano quando il tunnel viene chiuso.

Nota: il numero di tabella 200 è arbitrario quando si costruiscono queste regole. Puoi usare un valore compreso tra 2 e 252, oppure puoi usare un nome personalizzato aggiungendo un'etichetta al file /etc/iproute2/rt_tables e poi facendo riferimento al nome invece che al valore numerico.

Per ulteriori informazioni su come funzionano le tabelle di routing in Linux, visitare la Guida all'amministrazione della rete a livello IP con Linux.

Se stai instradando tutto il traffico del peer sulla VPN, assicurati di aver configurato le regole sysctl e iptables corrette sul server WireGuard nel Passaggio 5 - Configurazione del firewall del server WireGuard .

(Facoltativo) Configurazione dei resolver DNS del peer WireGuard

Se stai utilizzando il server WireGuard come gateway VPN per tutto il traffico del tuo peer, dovrai aggiungere una riga alla sezione [Interface] che specifichi i resolver DNS. Se non aggiungi questa impostazione, le tue richieste DNS potrebbero non essere protette dalla VPN o potrebbero essere rivelate al tuo provider di servizi Internet (ISP) o ad altre terze parti.

Se utilizzi WireGuard solo per accedere alle risorse sulla rete VPN o in una configurazione peer-to-peer, puoi saltare questa sezione.

Per aggiungere resolver DNS alla configurazione del tuo peer, determina innanzitutto quali server DNS sta utilizzando il tuo server WireGuard. Esegui il seguente comando sul server WireGuard, sostituendo il nome del tuo dispositivo ethernet al posto di eth0 se è diverso da questo esempio:

  1. resolvectl dns eth0

Dovresti ricevere un output come il seguente:

Output
Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

Gli indirizzi IP che vengono restituiti sono i resolver DNS utilizzati dal server. Puoi scegliere di utilizzarne uno o tutti oppure solo IPv4 o IPv6 a seconda delle tue esigenze. Prendi nota dei resolver che utilizzerai.

Successivamente, dovrai aggiungere i resolver scelti al file di configurazione del peer WireGuard. Tornando al WireGuard Peer, apri il file /etc/wireguard/wg0.conf usando nano o il tuo editor preferito:

  1. sudo nano /etc/wireguard/wg0.conf

Prima della riga [Peer], aggiungi quanto segue:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Anche in questo caso, a seconda delle preferenze o dei requisiti per IPv4 e IPv6, è possibile modificare l'elenco in base alle proprie esigenze.

Dopo esserti connesso alla VPN nel passaggio successivo, puoi verificare che stai inviando query DNS tramite la VPN utilizzando un sito come DNS leak test.com.

Puoi anche controllare che il tuo peer stia usando i resolver configurati con il comando resolvectl dns come se avessi eseguito sul server. Dovresti ricevere un output come il seguente, che mostra i resolver DNS che hai configurato per il tunnel VPN:

Output
Global: 67.207.67.2 67.207.67.3 . . .

Con tutte queste impostazioni del resolver DNS, ora sei pronto per aggiungere la chiave pubblica del peer al server e avviare il tunnel WireGuard sul peer.

Passaggio 8: aggiunta della chiave pubblica del peer al server WireGuard

Prima di connettere il peer al server, è importante aggiungere la chiave pubblica del peer al server WireGuard. Questo passaggio assicura che sarai in grado di connetterti e instradare il traffico sulla VPN. Se non si completa questo passaggio, il server WireGuard non consentirà al peer di inviare o ricevere traffico attraverso il tunnel.

Assicurati di avere una copia della chiave pubblica codificata base64 per il peer WireGuard eseguendo:

  1. sudo cat /etc/wireguard/public.key
Output
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Ora accedi al server WireGuard ed esegui il seguente comando:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

Si noti che la parte allowed-ips del comando accetta un elenco separato da virgole di indirizzi IPv4 e IPv6. Puoi specificare singoli IP se desideri limitare l'indirizzo IP che un peer può assegnare a se stesso o un intervallo come nell'esempio se i tuoi peer possono utilizzare qualsiasi indirizzo IP nell'intervallo VPN. Si noti inoltre che due peer non possono avere la stessa impostazione allowed-ips.

Se desideri aggiornare allowed-ips per un peer esistente, puoi eseguire nuovamente lo stesso comando, ma modificare gli indirizzi IP. Sono supportati più indirizzi IP. Ad esempio, per modificare il peer WireGuard che hai appena aggiunto per aggiungere un IP come 10.8.0.100 al 10.8.0.2 esistente e fd24:609a:6c18: :2 IP, dovresti eseguire quanto segue:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

Dopo aver eseguito il comando per aggiungere il peer, controlla lo stato del tunnel sul server utilizzando il comando wg:

  1. sudo wg
Output
interface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

Nota come la riga peer mostra la chiave pubblica del peer WireGuard e gli indirizzi IP o gli intervalli di indirizzi che è consentito utilizzare per assegnarsi un IP.

Ora che hai definito i parametri di connessione del peer sul server, il passo successivo è avviare il tunnel sul peer.

Passaggio 9: connessione del peer WireGuard al tunnel

Ora che il tuo server e il tuo peer sono entrambi configurati per supportare la tua scelta di IPv4, IPv6, inoltro di pacchetti e risoluzione DNS, è il momento di connettere il peer al tunnel VPN.

Poiché potresti volere che la VPN sia attiva solo per determinati casi d'uso, utilizzeremo il comando wg-quick per stabilire la connessione manualmente. Se desideri automatizzare l'avvio del tunnel come hai fatto sul server, segui questi passaggi nella sezione Passaggio 6 — Avvio del server WireGuard invece di utilizzare il comando wq-quick.

Nel caso in cui tu stia instradando tutto il traffico attraverso la VPN e hai impostato l'inoltro DNS, dovrai installare l'utility resolvconf sul peer WireGuard prima di avviare il tunnel. Esegui il seguente comando per configurarlo:

  1. sudo apt install resolvconf

Per avviare il tunnel, esegui quanto segue sul peer WireGuard:

  1. sudo wg-quick up wg0

Riceverai un output come il seguente:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x

Nota gli indirizzi IPv4 e IPv6 evidenziati che hai assegnato al peer.

Se imposti gli AllowedIPs sul peer su 0.0.0.0/0 e ::/0 (o usi intervalli diversi da quelli che hai scelto per la VPN), il tuo output sarà simile al seguente:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

In questo esempio, nota le route evidenziate aggiunte dal comando, che corrispondono a AllowedIPs nella configurazione del peer.

Puoi controllare lo stato del tunnel sul peer usando il comando wg:

  1. sudo wg
Output
interface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent

Puoi anche controllare nuovamente lo stato sul server e riceverai un output simile.

Verifica che il tuo peer stia utilizzando la VPN utilizzando i comandi ip route e ip -6 route. Se stai utilizzando la VPN come gateway per tutto il tuo traffico Internet, verifica quale interfaccia verrà utilizzata per il traffico destinato a 1.1.1.1 e 2606:4700:4700::1111 di CloudFlare. codice> risolutori DNS.

Se utilizzi WireGuard solo per accedere alle risorse sulla VPN, sostituisci un indirizzo IPv4 o IPv6 valido come il gateway stesso in questi comandi. Ad esempio 10.8.0.1 o fd24:609a:6c18::1.

  1. ip route get 1.1.1.1
Output
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache

Nota che viene utilizzato il dispositivo wg0 e l'indirizzo IPv4 10.8.0.2 che hai assegnato al peer. Allo stesso modo, se stai utilizzando IPv6, esegui quanto segue:

  1. ip -6 route get 2606:4700:4700::1111
Output
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

Nota di nuovo l'interfaccia wg0 e l'indirizzo IPv6 fd24:609a:6c18::2 che hai assegnato al peer.

Se il tuo peer ha un browser installato, puoi anche visitare ipv6-test.com per confermare che il tuo peer sta instradando il suo traffico sulla VPN.

Una volta che sei pronto per disconnetterti dalla VPN sul peer, usa il comando wg-quick:

  1. sudo wg-quick down wg0

Riceverai un output come il seguente che indica che il tunnel VPN è chiuso:

Output
[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f

Se imposti gli AllowedIPs sul peer su 0.0.0.0/0 e ::/0 (o usi intervalli diversi da quelli che hai scelto per la VPN), il tuo output sarà simile al seguente:

Output
[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

Per riconnetterti alla VPN, esegui di nuovo il comando wg-quick up wg0 sul peer. Se desideri rimuovere completamente la configurazione di un peer dal server WireGuard, puoi eseguire il seguente comando, assicurandoti di sostituire la chiave pubblica corretta per il peer che desideri rimuovere:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

In genere sarà necessario rimuovere una configurazione peer solo se il peer non esiste più o se le sue chiavi di crittografia sono compromesse o modificate. Altrimenti è meglio lasciare la configurazione in atto in modo che il peer possa riconnettersi alla VPN senza dover aggiungere ogni volta la sua chiave e allowed-ips.

Conclusione

In questo tutorial, hai installato il pacchetto e gli strumenti WireGuard su entrambi i sistemi server e client Debian 11. Hai configurato le regole del firewall per WireGuard e configurato le impostazioni del kernel per consentire l'inoltro dei pacchetti utilizzando il comando sysctl sul server. Hai imparato come generare chiavi di crittografia WireGuard private e pubbliche e come configurare il server e il peer (o i peer) per connettersi tra loro.

Se la tua rete utilizza IPv6, hai anche imparato a generare un intervallo di indirizzi locali univoco da utilizzare con le connessioni peer. Infine, hai imparato come limitare il traffico che deve passare sulla VPN limitando i prefissi di rete che il peer può utilizzare, nonché come utilizzare il server WireGuard come gateway VPN per gestire tutto il traffico Internet per i peer.

Se desideri saperne di più su WireGuard, incluso come configurare tunnel più avanzati o utilizzare WireGuard con i container, visita la documentazione ufficiale di WireGuard.


Tutti i diritti riservati. © Linux-Console.net • 2019-2024