Ricerca nel sito web

Come installare Wireguard VPN su Debian 11


Su questa pagina

  1. Prerequisiti
  2. Installazione di Wireguard
  3. Generazione della coppia di chiavi pubblica/privata
    1. Generazione della coppia di chiavi per il server Wireguard
    2. Generazione della coppia di chiavi per il cliente

    Wireguard è un protocollo VPN gratuito e open source alternativo a IPSec, IKEv2 e OpenVPN. Wiruguard è progettato per i sistemi operativi Linux e Unix. Funziona sullo spazio del kernel Linux, il che rende Wireguard più veloce e affidabile. Wireguard viene utilizzato per creare connessioni tunnel sicure tra due o più computer.

    Wireguard mira a sostituire i protocolli VPN come IPSec, IKEv2 e OpenVPN. Wireguard è più leggero, più veloce, facile da installare e più efficiente. Allo stesso tempo, Wiregurad non ha sacrificato l'aspetto della sicurezza del protocollo VPN. Wireguard supporta la moderna crittografia all'avanguardia come il framework del protocollo Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF e costruzioni sicure e affidabili.

    Rispetto ad altri protocolli VPN come OpenVPN, IPSec e IKEv2, wireguard è un nuovo protocollo VPN. Wireguard è stato rilasciato nel 2015 da Jason A. Donenfeld come protocollo VPN alternativo, è stato unito al kernel Linux v5.6 da Linus Torvalds nel 2020 e nello stesso anno è stato portato anche su FreeBSD 13.

    In questo tutorial, installerai e configurerai un server VPN tramite Wireguard sui server Debian 11. Configura un server VPN Wireguard con il server Debian 11, quindi configura un computer client per connettersi al server VPN Wireguard.

    Per quanto riguarda la macchina client, puoi usare qualsiasi distribuzione Linux, ma questo esempio usa una macchina Debian.

    Prerequisiti

    Per iniziare con questo tutorial, devi avere i seguenti requisiti:

    • Un server Debian 11 - Questo esempio utilizza un server Debian con nome host wireguard-server e un indirizzo IP statico esterno SERVER-IP.
    • Una macchina Linux che verrà utilizzata come client: è possibile utilizzare qualsiasi distribuzione Linux, ma questo esempio utilizza una macchina Debian con nome host client1.
    • Un utente non root con privilegi di amministratore sudo/root.

    Se tutti questi requisiti sono pronti, iniziamo.

    Installazione di Wireguard

    Prima di installare Wireguard, eseguire il comando apt di seguito per aggiornare e aggiornare l'indice dei pacchetti Debian.

    sudo apt update

    Una volta aggiornati i repository Debian, esegui il comando apt di seguito per installare il pacchetto Wireguard sul tuo server Debian. Questo installerà anche il pacchetto wireguard-tools che verrà utilizzato per gestire l'installazione del server Wireguard.

    sudo apt install wireguard

    Quando viene richiesta la conferma, inserire y per confermare e premere INVIO per procedere. Ora dovrebbe iniziare l'installazione.

    Con Wireguard installato sul tuo server, sei pronto per generare coppie di chiavi pubbliche e private per il server e il client Wireguard.

    Generazione coppia di chiavi pubblica/privata

    In questo passaggio, genererai una coppia di chiavi pubblica e privata per il server Wireguard e il computer client. E questo può essere fatto tramite la riga di comando wg fornita dal pacchetto wireguard-tools.

    La coppia di chiavi per il server verrà utilizzata dal server Wireguard e la macchina client utilizzerà la coppia di chiavi per il client. Se hai più macchine client, devi generare più coppie di chiavi per i tuoi clienti.

    Generazione coppia di chiavi per Wireguard Server

    Esegui il seguente comando wg genkey per generare la chiave privata per il server Wireguard. Quindi, modifica l'autorizzazione della chiave privata in 0400, che disabiliterà l'accesso in lettura e scrittura per il gruppo e altri.

    In questo esempio, genererai la chiave privata /etc/wireguard/server.key.

    wg genkey | sudo tee /etc/wireguard/server.key
    sudo chmod 0400 /etc/wireguard/server.key

    Riceverai quindi una chiave base64 casuale di output sullo schermo del tuo terminale.

    Successivamente, esegui il comando seguente wg pubkey per generare la nuova chiave pubblica del server per /etc/wireguard/server.pub. La chiave pubblica del server deriva dalla chiave privata del server /etc/wireguard/server.key.

    sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

    Riceverai quindi un output di una chiave pubblica base64 casuale sul tuo terminale.

    Ora che hai generato coppie di chiavi pubbliche e private per il server Wireguard. La chiave privata si trova in /etc/wireguard/server.key, mentre la chiave pubblica si trova in /etc/wireguard/server.pub .

    Eseguire il comando cat seguente per mostrare e verificare la coppia di chiavi generata per il server Wireguard.

    cat /etc/wireguard/server.key
    cat /etc/wireguard/server.pub

    Generazione della coppia di chiavi per il client

    Per la coppia di chiavi client, puoi generarla su qualsiasi macchina (server o client Wireguard) con gli strumenti wireguard installati. In questo passaggio, genererai una coppia di chiavi client dal server Wireguard.

    Il processo per generare una coppia di chiavi per server e client è lo stesso, utilizzando il comando wg genkey per generare la chiave privata e utilizzando wg pubkey per generare la chiave pubblica , che deriva dalla chiave privata.

    Ora esegui il comando seguente per creare una nuova directory /etc/wireguard/clients. Questa directory verrà utilizzata per memorizzare la coppia di chiavi del client.

    mkdir -p /etc/wireguard/clients

    Esegui il seguente comando wg genkey per generare la chiave privata del client per /etc/wireguard/clients/client1.key. Quindi, genera la chiave pubblica del client tramite il comando wg pubkey in /etc/wireguard/clients/client1.pub.

    wg genkey | tee /etc/wireguard/clients/client1.key
    cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub

    Ora che la coppia di chiavi client è stata generata, la chiave pubblica si trova in /etc/wireguard/clients/client1.pub e la chiave privata è /etc/wireguard/clients/client1.key. Esegui il comando seguente per mostrare e verificare la coppia di chiavi generata.

    cat /etc/wireguard/clients/client1.key
    cat /etc/wireguard/clients/client1.pub

    Configurazione del server Wireguard

    In questo passaggio creerai un nuovo file di configurazione per il server Wireguard. Ma prima, devi decidere quali sottoreti utilizzerai per il server VPN Wireguard. Puoi anche decidere se abilitare o disabilitare IPv6 per il tuo Wireguard VPN Server.

    In questo esempio, il server Wireguard VPN avrà indirizzi IP con la sottorete 10.8.0.2/24 e disabiliterà l'IPv6 per Wireguard VPN.

    Crea un nuovo file di configurazione Wireguard /etc/wireguard/wg0.conf utilizzando il comando nano editor di seguito.

    sudo nano /etc/wireguard/wg0.conf

    Innanzitutto, aggiungi le seguenti righe al file per definire i dettagli del server Wirguard. E assicurati di cambiare la PrivateKey con la chiave privata del server Wirguard server.key. Con questo, l'interfaccia del server Wireguard verrà eseguita sull'indirizzo IP 10.8.0.1, aprirà la porta UDP 51820 disponibile per la connessione dei client e il parametro SaveConfig assicurerà che qualsiasi modifica venga salvata nel file di configurazione, anche quando l'interfaccia Wireguard è spento.

    [Interface]
    # Wireguard Server private key - server.key
    PrivateKey = SIybp8GHtKIPtHPBOQFP1kbQg4UCLCMyNIfCLBQR2EA=

    # Wireguard interface will be run at 10.8.0.1
    Address = 10.8.0.1/24

    # Clients will connect to UDP port 51820
    ListenPort = 51820

    # Ensure any changes will be saved to the Wireguard config file
    SaveConfig = true

    Successivamente, aggiungi le righe seguenti per definire la connessione client peer. Modificare il parametro PublicKey con la chiave pubblica client client1.pub. E il parametro AllowedIPs specificherà quale client Wireguard ha consentito l'accesso a questo peer. In questo esempio, solo i client con IP 10.8.0.2 potranno accedere a questa connessione peer. Tuttavia, puoi anche consentire l'intervallo di sottoreti come 10.8.0.0/24.

    [Peer]
    # Wireguard client public key - client1.pub
    PublicKey = ENokvIsS2euXrmM4OVFHPmTdCZ4wfEIR/UHuGCW64lw=

    # clients' VPN IP addresses you allow to connect
    # possible to specify subnet ⇒ [10.8.0.0/24]
    AllowedIPs = 10.8.0.2/24

    Salva il file ed esci dall'editor al termine.

    Con il file di configurazione del server Wireguard creato e la connessione peer client aggiunta, dovrai configurare il port forwarding sul server Weireguard e impostare il firewall per configurare il routing del traffico.

    Abilita il port forwarding tramite /etc/sysctl.conf

    In questo passaggio, abiliterai il port forwarding sul server Wireguard tramite il file /etc/sysctl.conf. È possibile abilitare il port forwarding sia per IPv4 che per IPv6 sul server di protezione Wireguard.

    Per iniziare, apri il file di configurazione /etc/sysctl.conf usando il comando nano editor di seguito.

    sudo nano /etc/sysctl.conf

    Aggiungere le seguenti righe al file. Ciò abiliterà il port forwarding sul tuo server Wireguard. Puoi utilizzare sia IPv4 che IPv6 oppure puoi utilizzare IPv4 se IPv6 è disabilitato sul tuo server Wireguard.

    # Port Forwarding for IPv4
    net.ipv4.ip_forward=1

    # Port forwarding for IPv6
    net.ipv6.conf.all.forwarding=1

    Salva il file ed esci dall'editor al termine.

    Quindi, esegui l'utilità di comando sysctl di seguito per applicare le modifiche.

    sudo sysctl -p

    Riceverai un output come questo: il port forwarding dovrebbe essere abilitato immediatamente.

    Con il port forwarding abilitato sul server Wireguard, dovrai configurare il firewall che instraderà i traffici dei client Wireguard all'interfaccia di rete specifica.

    Configurazione del firewall per il server Wireguard

    In questo passaggio, configurerai il firewall che verrà utilizzato per il server Wireguard per instradare le connessioni client all'interfaccia di rete corretta che verrà utilizzata per l'accesso a Internet. Ciò consentirà anche ai client Wireguard di accedere a Internet tramite l'interfaccia specifica sul server Wireguard.

    Innanzitutto, esegui il comando apt di seguito per installare il pacchetto firewall ufw sul tuo server Debian.

    sudo apt install ufw

    Immettere y quando richiesto e premere INVIO per procedere.

    Dopo aver installato ufw, eseguire il comando seguente per aprire il servizio SSH e abilitare il firewall ufw.

    sudo ufw allow OpenSSH
    sudo ufw enable

    Quando viene richiesta la conferma per abilitare il firewall ufw, immettere y e premere INVIO. Il firewall ufw dovrebbe ora essere in esecuzione sul tuo sistema ed è anche abilitato.

    Ora verifica lo stato del firewall ufw tramite il comando seguente. Dovresti ricevere un output come Status: active, che significa che lo stato del firewall ufw è in esecuzione.

    sudo ufw status

    Con il firewall ufw in esecuzione, dovrai configurarlo per instradare le connessioni del client Wireguard all'interfaccia di rete specifica.

    Ora esegui il comando seguente per controllare l'interfaccia della tabella di routing predefinita sul server Wireguard. Principalmente, questo rileverà un'interfaccia utilizzata per accedere a Internet o dove l'indirizzo IP pubblico è disponibile su di essa.

    ip route list default

    Riceverai un output come questo: questo esempio è l'interfaccia eth0 è la tabella di routing predefinita per il server Wireguard. E questa è l'interfaccia utilizzata per accedere a Internet. Potresti avere un nome di interfaccia diverso.

    Successivamente, apri il file di configurazione del server Wireguard /etc/wireguard/wg0.conf utilizzando il comando nano editor di seguito.

    sudo nano /etc/wireguard/wg0.conf

    Aggiungi le seguenti righe alla sezione [Interface].

    [Interface]
    ...
    ....
    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

    Salva il file ed esci dall'editor al termine.

    • Il parametro PostUp verrà eseguito ogni volta che il server Wirguard avvia il tunnel VPN.
    • Il parametro PreDown verrà eseguito ogni volta che il server Wireguard interrompe il tunnel VPN.
    • Il comando ufw route allow in on wg0 out on eth0 consente di inoltrare il traffico proveniente dall'interfaccia wg0 all'interfaccia internet eth0.
    • Il comando iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE abiliterà il mascheramento e riscriverà il traffico IPv4 dall'interfaccia wg0 per farlo apparire come la connessione diretta dal server Wireguard.
    • Il comando ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE abiliterà il masquerading e riscriverà il traffico IPv46 dall'interfaccia wg0 per farlo apparire come la connessione diretta dal server Wireguard.

    Ora esegui il comando ufw seguente per aprire la porta UDP 51820 a cui saranno connessi i client.

    sudo ufw allow 51820/udp

    Infine, esegui il comando seguente per ricaricare il firewall ufw e applicare le modifiche. Quindi, verifica l'elenco delle regole ufw tramite il comando seguente.

    sudo ufw reload
    sudo ufw status

    Riceverai un output come questo screenshot: la porta UDP 51820 che il server Wireguard utilizzerà per le connessioni client aggiunte al firewall ufw.

    Ora hai abilitato il port forwarding e configurato il firewall sul server Wireguard. Ora sei pronto per avviare il server Wireguard.

    Avvio del server Wireguard

    In questo passaggio, avvierai e abiliterai il server Wireguard. Verificherai anche il server Wireguard e verificherai l'interfaccia wg0 che verrà creata dal servizio Wireguard.

    Eseguire l'utilità di comando systemctl di seguito per avviare e abilitare il servizio Wireguard. Il servizio [email  creerà e abiliterà l'interfaccia Wireguard wg0 sul tuo server Wireguard.

    sudo systemctl start 

    Ora verifica il servizio Wireguard tramite il comando seguente.

    sudo systemctl status 

    Riceverai un output simile allo screenshot seguente: il servizio Wireguard [email  è in esecuzione ed è abilitato. Ciò significa anche che l'interfaccia wg0 è stata creata ed è in esecuzione.

    Esegui il comando seguente per verificare l'interfaccia wg0 sul tuo server Wireguard.

    ip a show wg0

    Dovresti ricevere un output come questo: l'interfaccia Wireguard wg0 ottiene un indirizzo IP 10.8.0.1, come descritto nel file di configurazione di Wireguard /etc/wireguard/wg0.conf.

    Inoltre, puoi anche avviare e arrestare Wireguard tramite il comando wg-quick come di seguito. Il comando wg-quick up avvierà il server Wireguard e il comando wg-quick down arresterà il server Wireguard.

    sudo wg-quick up /etc/wireguard/wg0.conf
    sudo wg-quick down /etc/wireguard/wg0.conf

    Con il server Wireguard in esecuzione, dovrai configurare il computer client e collegarlo al server Wireguard.

    Configurazione della macchina client e connessione al server Wireguard

    In questo passaggio, configurerai la macchina client installando gli strumenti Worguard, creando una nuova configurazione Wireguard per il client, connettendoti al server VPN Wireguard e infine verificando la connessione e assicurandoti che la macchina client possa raggiungere Internet e la rete VPN locale. .

    Installa il pacchetto wireguard-tools sul computer client. Questo utilizza una Debian come client, quindi verrà utilizzato il comando APT.

    sudo apt install wireguard-tools

    L'installazione dovrebbe iniziare automaticamente.

    Dopo l'installazione di wireguard-tools, crea un nuovo file di configurazione /etc/wireguard/wg-client1.conf utilizzando il comando nano editor di seguito.

    sudo nano /etc/wireguard/wg-client1.conf

    Aggiungere le seguenti righe al file.

    [Interface]
    # Define the IP address for the client - must be matched with wg0 on Wireguard Server
    Address = 10.8.0.2/24

    # specific DNS Server
    DNS = 1.1.1.1

    # Private key for the client - client1.key
    PrivateKey = KPI59QH0jwc9wkUsW5Byci9ojXhz1322QXK52fQCE3E=

    [Peer]
    # Public key of the Wireguard server - server.pub
    PublicKey = Qt6oRLtlfAR490lTNb2K8TlbpwADV1j8NX7D5HY38EM=

    # Allow all traffic to be routed via Wireguard VPN
    AllowedIPs = 0.0.0.0/0

    # Public IP address of the Wireguard Server
    Endpoint = SERVER-IP:51820

    # Sending Keepalive every 25 sec
    PersistentKeepalive = 25

    Salva e chiudi il file al termine.

    Nella sezione [Interfaccia], è necessario definire quanto segue:

    • L'indirizzo IP del client deve corrispondere alla sottorete del server Wireguard. Il client Wireguard otterrà l'indirizzo IP 10.8.0.2 in questo esempio.
    • Specifica il server DNS per il client.
    • Modifica il parametro PrivateKey con la chiave privata del client che hai generato, client1.key.

      Nella sezione [Peer], devi aggiungere quanto segue:
    • Wireguard server chiave pubblica server.pub al parametro PublicKey.
    • Specifica gli IP consentiti per limitare l'accesso al peer VPN, puoi specificare le sottoreti delle reti o semplicemente inserire 0.0.0.0/0 per eseguire il tunneling di tutto il traffico sulla VPN.
    • Specificare il parametro Endpoint con l'indirizzo IP pubblico del server Wireguard o utilizzare un nome di dominio.

    Dopo aver creato la configurazione del client, eseguire il comando seguente per avviare Wireguard sul computer client.

    wg-quick up wg-client1

    Dovresti ricevere un output simile a questo screenshot: verrà creata la nuova interfaccia Wireguard wg-client1 e il computer client dovrebbe essere connesso al server Wireguard in esecuzione su SERVER-IP:51820.

    Eseguire il comando seguente per verificare l'interfaccia Wireguard wg-client1.

    ip a show wg-client1

    Dovresti ricevere un output come questo: l'interfaccia wg-client1 è attiva con un indirizzo IP 10.8.0.2, che fa parte della sottorete del server Wireguard 10.8.0.0/24.

    Puoi anche verificare la connessione Wireguard tramite il comando wg show.

    Esegui il seguente comando wg show sul computer client e dovresti ricevere un output come questo.

    wg show

    Se sei connesso al server Wireguard corretto, dovresti vedere l'indirizzo IP del server Wirguard nella sezione dell'endpoint e vedere la chiave pubblica del server Wirguard server.pub.

    Ora passa al server Wireguard ed esegui il comando wg show.

    wg show

    Dovresti ricevere un output simile a questo: nella sezione endpoint, vedrai l'indirizzo IP pubblico del client e nella sezione peer, vedrai la chiave pubblica del client client1.pub.

    Infine, esegui il comando seguente per assicurarti che il computer client possa accedere a Internet o alla sottorete della rete interna di Wireguard VPN.

    ping -c5 10.8.0.1
    ping -c5 1.1.1.1
    ping -c5 duckduckgo.com

    Di seguito è riportato l'output che dovresti ricevere:

    La macchina client può connettersi al server Wireguard con un indirizzo IP 10.8.0.1.

    La macchina client può accedere a Internet. Tutto il traffico viene instradato tramite l'indirizzo IP pubblico del server Wireguard.

    Ora, se vuoi arrestare Wrieguard sulla macchina client, puoi eseguire il comando wg-quick down qui sotto

    wg-quick down wg-client1

    Riceverai l'output in questo modo. Inoltre, l'interfaccia wg-client1 verrà rimossa dalla macchina client.

    Ora hai configurato Wirguard VPN sulla macchina client. Hai anche verificato la connessione tra la macchina client e il server Wireguard.

    Conclusione

    In questo tutorial, hai installato e configurato Wireguard VPN su un server Debian 11. Hai anche configurato una macchina Debian e ti sei connesso con successo al server VPN Wireguard.

    In dettaglio, hai installato il pacchetto VPN Wireguard, generato la coppia di chiavi chiave pubblica e privata sia per il server che per il client, configurato il firewall UFW per instradare il traffico VPN all'interfaccia di rete specifica e abilitato il port forwarding tramite /etc/sysctl.conf file.

    Con questo in mente, ora puoi aggiungere più client al tuo Wireguard VPN Server generando un'altra coppia di chiavi per il client, definendo la connessione peer sul server Wireguard, quindi creando un nuovo file di configurazione Wireguard che verrà utilizzato dalla macchina client. Per saperne di più su Wireguard, visita la documentazione ufficiale di Wireguard.