GNU/Linux >> Linux Esercitazione >  >> Debian

Configura il tuo server VPN WireGuard su Debian 11 e Debian 10

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.


Debian
  1. Configura un server VPN sul tuo PC Linux

  2. Come configurare WireGuard VPN su Ubuntu (una guida passo passo)

  3. Come configurare un server SFTP su Debian 11 Server

  4. Come configurare un server OpenVPN su Debian 10

  5. Configura un server di posta con PostfixAdmin su Debian 9

Configura il tuo risolutore DNS su Debian 10 Buster con BIND9

Configura il tuo server VPN WireGuard su CentOS/RHEL

Configura il tuo server VPN WireGuard su Ubuntu 20.04/18.04

Come creare il tuo server VPN IPsec in Linux

Come configurare un VPN Pptp sul proprio server Ubuntu?

Come configurare WireGuard VPN su Debian 11