Wireguard è un'implementazione VPN multipiattaforma open source che utilizza una crittografia all'avanguardia. È più veloce, più semplice e più funzionale dei protocolli IPSec e OpenVPN. È progettata come VPN per uso generico per l'esecuzione su interfacce e supercomputer incorporati e funziona su Linux, Windows, macOS, iOS, Android, BSD e varie altre piattaforme.
Questo tutorial tratterà come installare Wireguard VPN su un server basato su CentOS 8 e come connettersi ad esso utilizzando un client Linux (CentOS/Fedora/Ubuntu).
Passaggio 1 - Aggiorna sistema
Prima di procedere oltre, è indispensabile aggiornare il sistema per installare gli ultimi aggiornamenti.
$ sudo dnf update
Passaggio 2:installazione e abilitazione del repository EPEL
I pacchetti Wireguard richiesti possono essere trovati nel repository EPEL, quindi è necessario installarlo e abilitarlo.
$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools
Abbiamo anche abilitato il repository PowerTools poiché i pacchetti EPEL dipendono da esso.
Fase 3 - Installa Wireguard
Abilita il repository Wireguard.
$ sudo dnf copr enable jdoss/wireguard
Installa Wireguard.
$ sudo dnf install wireguard-dkms wireguard-tools
Questo passaggio installa anche il compilatore GNU GCC necessario per creare i moduli del kernel Linux.
Passaggio 4:configurazione del server Wireguard
Crea un file di configurazione vuoto sul server per le impostazioni di Wireguard con le autorizzazioni appropriate.
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
Il comando Touch crea il file wg0-server.conf
nel /etc/wireguard
directory.
Quindi, crea una coppia di chiavi privata/pubblica per il server Wireguard.
$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
Questo crea sia la chiave pubblica che quella privata per Wireguard e le scrive nei rispettivi file.
Visualizza la chiave privata che abbiamo appena creato.
$ sudo cat privatekey
Prendi nota della chiave e copiala perché ci servirà per configurare Wireguard.
Quindi, modifica il file di configurazione.
$ sudo nano /etc/wireguard/wg0.conf
Aggiungi il seguente codice.
[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
## VPN server port - You can choose any port ##
ListenPort = 37822
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true
Ogni configurazione ha una sezione chiamata [Interface]
dove è definita la parte server.
Contiene la chiave privata del server WireGuard locale, la porta UDP su cui dovrebbe ascoltare le connessioni in entrata e i propri indirizzi IP VPN.
Abbiamo anche impostato SaveConfig
su true
. Questo dirà al servizio Wireguard di salvare automaticamente la sua configurazione attiva su questo file allo spegnimento.
Premi Ctrl + W per chiudere il file e immettere Y quando viene richiesto di salvare il file.
Passaggio 5:configurazione del firewall
Dobbiamo aprire la porta che abbiamo scelto per Wireguard.
Innanzitutto, dobbiamo definire il servizio Wireguard per il firewall. Per farlo, crea un file wireguard.xml
con l'editor Nano.
$ sudo nano /etc/firewalld/services/wireguard.xml
Incolla il codice seguente nel file.
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>wireguard</short>
<description>WireGuard open UDP port 37822 for client connections</description>
<port protocol="udp" port="37822"/>
</service>
Premi Ctrl + W per chiudere il file e immettere Y quando viene richiesto di salvare il file.
Quindi, abilita il servizio Wireguard nel firewall.
$ sudo firewall-cmd --permanent --add-service=wireguard
Attiva il mascheramento in modo che tutto il traffico in entrata e in uscita da 192.168.10.0/24 instradato tramite il nostro indirizzo IP pubblico del server 203.1.114.98/24 .
$ sudo firewall-cmd --permanent --add-masquerade
Infine, ricarica il firewall per attivare le regole.
$ sudo firewall-cmd --reload
Elenca le regole firewall correnti per confermare.
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: wireguard ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Passaggio 6:attiva l'inoltro IPv4
Crea /etc/sysctl.d/99-custom.conf
file.
$ sudo nano /etc/sysctl.d/99-custom.conf
Incolla il codice seguente nel file.
## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
## for IPv4 ##
net.ipv4.ip_forward = 1
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
## for IPv6 ##
net.ipv6.conf.all.forwarding = 1
Premi Ctrl + W per chiudere il file e immettere Y quando viene richiesto di salvare il file.
L'ambito del codice nel file sopra non rientra nell'ambito di questo tutorial, quindi per ora, usalo così com'è.
Ricarica le modifiche.
$ sudo sysctl -p /etc/sysctl.d/99-custom.conf
Per impostazione predefinita, il firewall non consente wg0
e eth0
le interfacce parlano tra loro. Quindi dobbiamo aggiungere l'interfaccia Wireguard alla rete interna e attivare il masquerading.
$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade
Passaggio 7 - Abilita e avvia il servizio Wireguard
Successivamente, dobbiamo abilitare e avviare il servizio Wireguard.
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
Puoi verificare se l'interfaccia Wireguard, wg0
è attivo e funzionante utilizzando il comando seguente.
$ sudo wg
interface: wg0
public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
private key: (hidden)
listening port: 37822
$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 192.168.10.1/24 scope global wg0
valid_lft forever preferred_lft forever
Passaggio 8:installazione e configurazione del client WireGuard
Puoi trovare le istruzioni di installazione per il client Wireguard per la tua distribuzione Linux dalla loro pagina di installazione ufficiale.
Una volta installato il client, è necessario creare il file di configurazione del client.
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey
Prendi nota della chiave privata che ottieni alla fine. Successivamente, dobbiamo modificare il file di configurazione che abbiamo appena creato.
$ sudo nano /etc/wireguard/wg0.conf
Aggiungi le seguenti direttive al file.
[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
## client ip address ##
Address = 192.168.10.2/24
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
## set ACL ##
AllowedIPs = 192.168.10.0/24
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
## Key connection alive ##
PersistentKeepalive = 15
Tieni presente che abbiamo assegnato l'IP privato 192.168.10.1 al server e 192.168.10.2 al cliente. Abbiamo anche aggiunto la chiave privata del cliente al file.
Il [Peer]
la sezione è dove si inserisce la configurazione del server a cui si connetterà il client. Qui abbiamo aggiunto la chiave pubblica, l'IP pubblico e un insieme di IP consentiti che contiene l'IP privato del nostro server. PersistentKeepalive
dice a WireGuard di inviare un pacchetto UDP ogni 15 secondi, questo è utile se sei dietro un NAT e vuoi mantenere viva la connessione.
Premi Ctrl + W per chiudere il file e immettere Y quando viene richiesto di salvare il file.
Ora è il momento di abilitare e avviare il client VPN.
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]
Passaggio 9 - Configura il server per aggiungere il client
Ora, dobbiamo aggiungere di nuovo la configurazione del client al server per fargli sapere del client.
Interrompi prima il servizio Wireguard.
$ sudo systemctl stop [email protected]
Apri il file wg0.conf per la modifica.
$ sudo nano /etc/wireguard/wg0.conf
Aggiungi il codice seguente alla fine del file.
[Peer]
## client VPN public key ##
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
## client VPN IP address (note /32 subnet) ##
AllowedIPs = 192.168.10.2/32
Premi Ctrl + W per chiudere il file e immettere Y quando viene richiesto di salvare il file.
Il [Peer]
le sezioni definiscono gli altri membri della rete VPN. Puoi aggiungerne quanti ne desideri.
Contengono la loro chiave pubblica, che deve corrispondere alla chiave privata del peer nel suo [Interface]
sezione.
Si noti che qualsiasi connessione in entrata viene prima autenticata su una delle chiavi pubbliche. Se la connessione non proviene da un peer verificato, i pacchetti in arrivo vengono semplicemente ignorati silenziosamente. Poiché le connessioni da host che non possiedono una chiave privata corrispondente non ricevono alcuna risposta, una VPN WireGuard non solo fornisce comunicazioni crittografate, ma rimane anche nascosta agli estranei.
Riavvia il servizio Wireguard.
$ sudo systemctl start [email protected]
Fase 10:verifica
Verifichiamo se sia il client che il server sono connessi in modo sicuro tramite VPN. Per testare la connessione, esegui i seguenti comandi sul tuo client.
$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms
--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms
$ sudo wg
interface: wg0
public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
private key: (hidden)
listening port:
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
endpoint: 203.1.114.98:37822
allowed ips: 192.168.10.0/24
latest handshake: 1 minute, 40 seconds ago
transfer: 938 B received, 45.67 KiB sent
persistent: keepalive: every 15 seconds
Conclusione
Questo è tutto ciò che c'è in questo tutorial. Ora dovresti avere un server VPN basato su Wireguard basato su un server CentOS 8. Se hai domande, chiedile nei commenti qui sotto.