Questo tutorial ti mostrerà come configurare il tuo server VPN WireGuard su Debian 11 bullseye e Debian 10 Buster. WireGuard è realizzato appositamente per il kernel Linux. Funziona all'interno del kernel Linux e ti consente di creare tunnel VPN veloci, moderni e sicuri.
Caratteristiche di WireGuard VPN
- Leggero e velocità super veloce, che soffia OpenVPN fuori dall'acqua.
- Multipiattaforma. WireGuard può essere eseguito su Linux, BSD, macOS, Windows, Android, iOS e OpenWRT.
- L'autenticazione dell'utente avviene tramite lo scambio di chiavi pubbliche, in modo simile alle chiavi SSH.
- Assegna indirizzi IP tunnel statici ai client VPN. Ad alcune persone potrebbe non piacere, ma in alcuni casi può essere utile.
- I dispositivi mobili possono passare dalla rete Wi-Fi a quella mobile senza interruzioni senza interrompere la connettività.
- Mira a sostituire OpenVPN e IPSec nella maggior parte dei casi d'uso.
Requisiti
Per seguire questo tutorial, avrai bisogno di un VPS (Virtual Private Server) che possa accedere liberamente ai siti web bloccati (fuori dal tuo paese o sistema di filtraggio Internet). Raccomando Kamatera VPS, che include:
- 30 giorni di prova gratuita.
- A partire da $ 4 al mese (1 GB di RAM)
- VPS basato su KVM ad alte prestazioni
- 9 data center in tutto il mondo, inclusi Stati Uniti, Canada, Regno Unito, Germania, Paesi Bassi, Hong Kong e Israele.
Segui il tutorial collegato di seguito per creare il tuo server VPS Linux su Kamatera.
- Come creare un server VPS Linux su Kamatera
Una volta che hai un VPS che esegue Debian, segui le istruzioni seguenti.
Questo tutorial presuppone che il server VPN e il client VPN eseguano entrambi Debian sistema operativo.
Fase 1:Installa WireGuard su Debian Server e Desktop
Accedi al tuo server Debian. WireGuard è incluso in Debian 11 (Bullseye) repository, quindi puoi eseguire i seguenti comandi per installarlo.
sudo apt aggiornamentiudo apt install wireguard wireguard-tools linux-headers-$(uname -r)
Debian 10 gli utenti devono aggiungere il repository di backport con il seguente comando.
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list
Quindi installa WireGuard.
sudo apt updateudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)
Usa gli stessi comandi per installare WireGuard sul tuo computer Debian locale (il client VPN). Nota che devi anche installare openresolv
pacchetto sul client per configurare il server DNS.
sudo apt install openresolv
Fase 2:genera una coppia di chiavi pubblica/privata
Server
Eseguire il seguente comando sul server Debian per creare una coppia di chiavi pubblica/privata, che verrà salvata in /etc/wireguard/
directory.
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Cliente
Eseguire il comando seguente per creare una coppia di chiavi pubblica/privata sul computer Debian locale (il client VPN).
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
Fase 3:crea il file di configurazione WireGuard
Server
Usa un editor di testo da riga di comando come Nano per creare un file di configurazione WireGuard sul server Debian. wg0
sarà il nome dell'interfaccia di rete.
sudo nano /etc/wireguard/wg0.conf
Copia il testo seguente e incollalo nel tuo file di configurazione. Devi utilizzare la tua chiave privata del server e la chiave pubblica del client.
[Interfaccia]Indirizzo =10.10.10.1/24ListenPort =51820PrivateKey =cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=[Peer]PublicKey =AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4 =10.2=Consentito>
Dove:
- Indirizzo :Specificare l'indirizzo IP privato del server VPN. Qui sto usando l'intervallo di rete 10.10.10.0/24, quindi non entrerà in conflitto con l'intervallo di rete domestica. (La maggior parte dei router domestici utilizza 192.168.0.0/24 o 192.168.1.0/24). 10.10.10.1 è l'indirizzo IP privato per il server VPN.
- Chiave privata :La chiave privata del server VPN, che può essere trovata in
/etc/wireguard/server_private.key
file sul server. - ListenPort :il server VPN WireGuard sarà in ascolto sulla porta UDP 51820, che è l'impostazione predefinita.
- Chiave pubblica :la chiave pubblica del client VPN, che può essere trovata in
/etc/wireguard/client_public.key
file sul computer client. - IP consentiti :indirizzi IP che il client VPN può utilizzare. In questo esempio, il client può utilizzare solo l'indirizzo IP 10.10.10.2 all'interno del tunnel VPN.
Salva e chiudi il file. (Per salvare un file nell'editor di testo Nano, premi Ctrl+O
, quindi premere Invio per confermare. Premi Ctrl+X
per uscire.)
Modifica la modalità di autorizzazione dei file in modo che solo l'utente root possa leggere i file.
sudo chmod 600 /etc/wireguard/ -R
Cliente
Usa un editor di testo da riga di comando come Nano per creare un file di configurazione WireGuard sul tuo computer Debian locale. wg-client0
sarà il nome dell'interfaccia di rete.
sudo nano /etc/wireguard/wg-client0.conf
Copia il testo seguente e incollalo nel tuo file di configurazione. È necessario utilizzare la chiave privata del client e la chiave pubblica del server.
[Interface] Indirizzo =10.10.10.2/24DNS =10.10.10.1PrivateKey =COFA + x5UvHF + a3xJ6enLatG + DoE3I5PhMgKrMKkUyXI =[Peer] =PublicKey kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0 =AllowedIPs =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
Dove:
- Indirizzo :Specifica l'indirizzo IP privato del client VPN.
- DNS :specificare 10.10.10.1 (il server VPN) come server DNS. Sarà configurato tramite
resolvconf
comando. Puoi anche specificare più server DNS per la ridondanza in questo modo:DNS = 10.10.10.1 8.8.8.8
- Chiave privata :La chiave privata del client, che può essere trovata in
/etc/wireguard/client_private.key
file sul computer client. - Chiave pubblica :la chiave pubblica del server, che può essere trovata in
/etc/wireguard/server_public.key
file sul server. - IP consentiti :0.0.0.0/0 rappresenta l'intera Internet, il che significa che tutto il traffico verso Internet deve essere instradato tramite la VPN.
- Endpoint :l'indirizzo IP pubblico e il numero di porta del server VPN. Sostituisci 12.34.56.78 con il vero indirizzo IP pubblico del tuo server.
- PersistentKeepalive :invia un pacchetto vuoto autenticato al peer ogni 25 secondi per mantenere attiva la connessione. Se PersistentKeepalive non è abilitato, il server VPN potrebbe non essere in grado di eseguire il ping del client VPN.
Salva e chiudi il file.
Modifica la modalità file in modo che solo l'utente root possa leggere i file.
sudo chmod 600 /etc/wireguard/ -R
Fase 4:abilita l'inoltro IP sul server
Affinché il server VPN instrada i pacchetti tra i client VPN e Internet, è necessario abilitare l'inoltro IP. Modifica sysctl.conf
file.
sudo nano /etc/sysctl.conf
Aggiungi la seguente riga alla fine di questo file.
net.ipv4.ip_forward =1
Salva e chiudi il file. Quindi applica le modifiche con il comando seguente. Il -p l'opzione caricherà le impostazioni di sysctl da /etc/sysctl.conf file. Questo comando conserverà le nostre modifiche durante i riavvii del sistema.
sudo sysctl -p
Fase 5:Configura IP Masquerading sul server
Abbiamo bisogno di impostare il mascheramento IP nel firewall del server, in modo che il server diventi un router virtuale per i client VPN. Userò UFW, che è un front-end per il firewall iptables. Installa UFW su Debian con:
sudo apt install ufw
Innanzitutto, devi consentire il traffico SSH.
sudo ufw allow 22/tcp
Quindi, trova il nome dell'interfaccia di rete principale del tuo server.
indirizzo IP
Come puoi vedere, si chiama ens3
sul mio server Debian.
Per configurare il mascheramento IP, dobbiamo aggiungere il comando iptables in un file di configurazione UFW.
sudo nano /etc/ufw/before.rules
Per impostazione predefinita, ci sono alcune regole per il filter
tavolo. Aggiungi le seguenti righe alla fine di questo file. Sostituisci ens3
con il tuo nome di interfaccia di rete.
# regole tabella NAT*nat:POSTROUTING ACCEPT [0:0]-A POSTROUTING -o ens3 -j MASQUERADE# Termina ogni tabella con la riga 'COMMIT' o queste regole non verranno elaborateCOMMIT
Nell'editor di testo Nano, puoi andare alla fine del file premendo Ctrl+W
, quindi premendo Ctrl+V
.
Le righe precedenti verranno aggiunte (-A ) una regola fino alla fine di POSTROUTING catena di nat tavolo. Collegherà la tua rete privata virtuale con Internet. E nascondi anche la tua rete dal mondo esterno. Quindi Internet può vedere solo l'IP del tuo server VPN, ma non può vedere l'IP del tuo client VPN, proprio come il tuo router domestico nasconde la tua rete domestica privata.
Per impostazione predefinita, UFW vieta l'inoltro dei pacchetti. Possiamo consentire l'inoltro per la nostra rete privata. Trova il ufw-before-forward
catena in questo file e aggiungi le 3 righe seguenti, che accetteranno l'inoltro di pacchetti se l'IP di origine o di destinazione è nel 10.10.10.0/24
intervallo.
# consente l'inoltro per la rete attendibile-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
Salva e chiudi il file. Quindi abilita UFW.
sudo ufw abilita
Se hai abilitato UFW in precedenza, puoi utilizzare systemctl per riavviare UFW.
sudo systemctl riavvia ufw
Ora se elenchi le regole nella catena POSTROUTING della tabella NAT usando il seguente comando:
sudo iptables -t nat -L POSTROUTING
Puoi vedere la regola della Masquerade.
Fase 6:installa un risolutore DNS sul server
Poiché abbiamo specificato il server VPN come server DNS per il client, è necessario eseguire un risolutore DNS sul server VPN. Possiamo installare il server DNS bind9.
sudo apt install bind9
Una volta installato, BIND si avvierà automaticamente. Puoi verificarne lo stato con:
stato systemctl bind9
Esempio di output:
● named.service - BIND Domain Name Server Caricato:caricato (/lib/systemd/system/named.service; abilitato; preimpostazione del fornitore:abilitato) Attivo:attivo (in esecuzione) da Sun 2020-05-17 08:11 :26 UTC; 37 secondi fa Docs:man:named(8) PID principale:13820 (named) Task:5 (limite:1074) Memoria:14.3M CGroup:/system.slice/named.service └─13820 /usr/sbin/named -f -u vincolare
Se non è in esecuzione, avvialo con:
sudo systemctl avvia bind9
Modifica il file di configurazione del server BIND DNS.
sudo nano /etc/bind/named.conf.options
Aggiungi la riga seguente per consentire ai client VPN di inviare query DNS ricorsive.
consenti ricorsione { 127.0.0.1; 10.10.10.0/24; };
Salva e chiudi il file. Riavvia BIND9 per rendere effettive le modifiche.
sudo systemctl restart bind9
Quindi devi eseguire il comando seguente per consentire ai client VPN di connettersi alla porta 53.
sudo ufw insert 1 consenti l'ingresso da 10.10.10.0/24
Passaggio 7:apri la porta WireGuard nel firewall
Esegui il comando seguente per aprire la porta UDP 51820 sul server.
sudo ufw allow 51820/udp
Fase 8:avvia WireGuard
server
Esegui il seguente comando sul server per avviare WireGuard.
sudo wg-quick up /etc/wireguard/wg0.conf
Per fermarlo, esegui
sudo wg-quick down /etc/wireguard/wg0.conf
Puoi anche utilizzare il servizio systemd per avviare WireGuard.
sudo systemctl start [email protetta]
Abilita l'avvio automatico all'avvio del sistema.
sudo systemctl enable [email protected]
Controlla il suo stato con il seguente comando. Il suo stato dovrebbe essere active (exited)
.
stato systemctl [email protetta]
Ora il server WireGuard è pronto per accettare connessioni client.
Cliente
Avvia WireGuard.
sudo systemctl start [email protetta]
Abilita l'avvio automatico all'avvio del sistema.
sudo systemctl enable [email protected]
Controlla il suo stato:
stato systemctl [email protetta]
Ora vai su questo sito web:http://icanhazip.com/
per controllare il tuo indirizzo IP pubblico. Se tutto è andato bene, dovrebbe visualizzare l'indirizzo IP pubblico del tuo server VPN invece dell'indirizzo IP pubblico del tuo computer client.
Puoi anche eseguire il comando seguente per ottenere l'indirizzo IP pubblico corrente.
curl https://icanchazip.com
Suggerimenti per la risoluzione dei problemi
Test ping
Puoi eseguire il ping dal server VPN al client VPN (ping 10.10.10.2
) per vedere se il tunnel funziona. Se vedi il seguente messaggio di errore nel ping,
ping:sendmsg:chiave richiesta non disponibile
potrebbe essere che il AllowedIPs
parametro è sbagliato, come un errore di battitura.
Se il messaggio di errore ping è
ping:sendmsg:indirizzo di destinazione richiesto
potrebbe essere che la chiave privata/pubblica sia sbagliata nei tuoi file di configurazione.
Impossibile navigare in Internet
Se il tunnel VPN viene stabilito correttamente, ma l'indirizzo IP pubblico del client non cambia, è perché la regola di mascheramento o inoltro nel file di configurazione UFW non funziona. Una volta ho avuto un errore di battitura in /etc/ufw/before.rules
file, che ha impedito al mio computer di navigare in Internet.
Tieni presente che non consiglio di utilizzare SaveConfig=true
nel [Interface]
sezione del file di configurazione di WireGuard. SaveConfig
dice a WireGuard di salvare la configurazione di runtime allo spegnimento. Quindi, se aggiungi ulteriori [Peer]
nel file di configurazione e quindi riavvia WireGuard, le tue configurazioni appena aggiunte verranno sovrascritte.
Abilita l'accesso al debug nel kernel Linux
Se utilizzi il kernel Linux 5.6+, puoi abilitare la registrazione del debug per WireGuard con il comando seguente.
sudo su -echo module wireguard +p> /sys/kernel/debug/dynamic_debug/control
Quindi puoi visualizzare i log di debug con
sudo dmesg -wH
o
sudo journalctl -kf
Riavvia
Se la tua VPN continua a non funzionare, prova a riavviare il server VPN.
sudo systemctl restart [email protetta]
Quindi arresta il client VPN.
sudo systemctl stop [email protetta]
E aggiorna i pacchetti software sul client VPN.
sudo apt update; sudo apt aggiornamento
Quindi, riavvia il client VPN.
sudo shutdown -r nowsudo systemctl start [email protected]
Aggiunta di client VPN aggiuntivi
WireGuard è progettato per associare un indirizzo IP a un client VPN. Per aggiungere più client VPN, devi creare una coppia di chiavi privata/pubblica univoca per ciascun client, quindi aggiungere la chiave pubblica di ciascun client VPN nel file di configurazione del server (/etc/wireguard/wg0.conf
) in questo modo:
[Interface] Indirizzo =10.10.10.1/24PrivateKey =UIFH + XXjJ0g0uAZJ6vPqsbb / o68SYVQdmYJpy / FlGFA =ListenPort =51820 [Peer] =PublicKey 75VNV7HqFh + 3QIT5OHZkcjWfbjx8tc6Ck62gZJT / KRA =AllowedIPs =10.10.10.2/32[Peer]PublicKey =YYh4 / 1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=IP consentiti =10.10.10.3/32[Peer]PublicKey =EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=IP consentiti =10.10.10.4/32
Ogni client VPN avrà un indirizzo IP privato statico (10.10.10.2, 10.10.10.3, 10.10.10.4, ecc.). Riavvia il server WireGuard per rendere effettive le modifiche.
sudo systemctl restart [email protetta]
Quindi aggiungi la configurazione WireGuard su ciascun client VPN come al solito.
Routing delle policy, tunneling diviso e kill switch VPN
Ora ti mostrerò come utilizzare il instradamento delle norme , tunnel diviso e kill switch VPN con WireGuard VPN. Nota che non è consigliabile usarli insieme. Se utilizzi il routing dei criteri, non dovresti abilitare lo split tunneling o il kill switch VPN e viceversa.
Indirizzamento delle politiche
Per impostazione predefinita, tutto il traffico sul client VPN verrà instradato attraverso il server VPN. A volte potresti voler instradare solo un tipo specifico di traffico, in base al protocollo del livello di trasporto e alla porta di destinazione. Questo è noto come policy routing.
L'instradamento delle politiche è configurato sul computer client e dobbiamo interrompere il processo del client WireGuard.
sudo systemctl stop [email protetta]
Quindi modifica il file di configurazione del client.
sudo nano /etc/wireguard/wg-client0.conf
Ad esempio, se aggiungi le seguenti 3 righe in [interface]
sezione, quindi WireGuard creerà una tabella di routing denominata "1234" e aggiungerà la regola IP nella tabella di routing. In questo esempio, il traffico verrà instradato attraverso il server VPN solo quando TCP viene utilizzato come protocollo del livello di trasporto e la porta di destinazione è 25, ovvero quando il computer client invia e-mail.
Table =1234PostUp =regola ip aggiungi ipproto tcp dport 25 table 1234PreDown =regola ip elimina ipproto tcp dport 25 table 1234
Salva e chiudi il file. Quindi riavvia il client WireGuard.
sudo systemctl start [email protetta]
Traforo diviso
Per impostazione predefinita, tutto il traffico sul client VPN verrà instradato attraverso il server VPN. Ecco come abilitare lo split tunneling, quindi solo il traffico verso il 10.10.10.0/24
L'intervallo IP sarà incanalato tramite WireGuard VPN. Ciò è utile quando desideri creare una rete privata per diversi server cloud, perché i client VPN verranno eseguiti su server cloud e se utilizzi un tunnel VPN completo, probabilmente perderai la connessione ai server cloud.
Modifica il file di configurazione del client.
sudo nano /etc/wireguard/wg-client0.conf
Cambia
IP consentiti =0.0.0.0/0
A
IP consentiti =10.10.10.0/24
Quindi il traffico verrà instradato tramite VPN solo quando l'indirizzo di destinazione è nell'intervallo IP 10.10.10.0/24. Salva e chiudi il file. Quindi riavvia il client WireGuard.
sudo systemctl restart [email protetta]
VPN Kill Switch
Per impostazione predefinita, il tuo computer può accedere a Internet tramite il normale gateway quando la connessione VPN viene interrotta. Potresti voler abilitare la funzione kill switch, che impedisce il flusso di pacchetti non crittografati attraverso interfacce non WireGuard.
Interrompi il processo del client WireGuard.
sudo systemctl stop [email protetta]
Modifica il file di configurazione del client.
sudo nano /etc/wireguard/wg-client0.conf
Aggiungi le seguenti due righe in [interface]
sezione.
PostUp =iptables -I OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j RIFIUTA
In questo modo:
[Interface]Address =10.10.10.2/24DNS =10.10.10.1PrivateKey =cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=PostUp =iptables -I OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j RIFIUTA [Peer]PublicKey =kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=IP consentiti =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
Salva e chiudi il file. Quindi avvia il client WireGuard.
sudo systemctl start [email protetta]
Installazione del kernel Linux 5.x su Debian 10
L'attuale versione del kernel Linux su Debian 10 è 4.19. Nel passaggio 1, abbiamo aggiunto il repository backport su Debian 10. Il repository backport include il kernel Linux 5.10, al momento della stesura di questo articolo. Probabilmente saprai che il modulo wireguard è incluso nel kernel Linux a partire dalla versione 5.4. Se installiamo il kernel Linux 5.10 su Debian 10, non è necessario creare il modulo wireguard quando il sistema sta aggiornando il kernel Linux. In effetti, il mio server Debian 10 una volta ha avuto un problema nella creazione del modulo wireguard con wireguard-dkms.
Nota che quando leggerai questo articolo, il repository di backport Debian 10 potrebbe aver rimosso il kernel 5.10 e incluso il kernel 5.11. Sostituisci semplicemente 5.8 con 5.9 nei seguenti comandi.
Per installare il kernel Linux 5.8 sui server cloud Debian 10, eseguire il comando seguente.
sudo apt install linux-image-5.10.0-0.bpo.7-cloud-amd64 linux-headers-5.10.0-0.bpo.7-cloud-amd64
Per installare il kernel Linux 5.8 su un PC Debian 10, eseguire il comando seguente.
sudo apt install linux-image-5.10.0-0.bpo.7-amd64 linux-headers-5.10.0-0.bpo.7-amd64
Quindi riavvia il tuo Debian 10 box.
sudo shutdown -r ora
Controlla la versione del tuo kernel Linux.
uname -r
Esempio di output
5.10.0-0.bpo.7-cloud-amd64
Anche se non abbiamo più bisogno di wireguard-dkms
pacchetto, è una dipendenza per il wireguard
pacchetto, quindi non possiamo rimuoverlo dal sistema. Probabilmente vedrai il seguente errore durante l'aggiornamento di wireguard
pacchetto.
Errore! Il dkms.conf per questo modulo include una direttiva BUILD_EXCLUSIVE che non corrisponde a questo kernel/arch. Ciò indica che non dovrebbe essere compilato
Questo indica wireguard-dkms
sta cercando di costruire il wireguard
modulo nel kernel Linux, ma Linux 5.10 include un wireguard
nativo modulo, quindi l'operazione di compilazione è impedita e puoi ignorare questo errore.