Ricerca nel sito web

Come configurare Wireguard VPN su CentOS 8


Su questa pagina

  1. Passaggio 1 - Aggiorna il sistema
  2. Passaggio 2 - Installa e abilita il repository EPEL
  3. Passaggio 3 - Installa Wireguard
  4. Passaggio 4: configurazione del server Wireguard
  5. Passaggio 5 - Configura il firewall
  6. Passaggio 6: attiva l'inoltro IPv4
  7. Passaggio 7 - Attiva e avvia il servizio Wireguard
  8. Passaggio 8 - Installa e configura il client WireGuard
  9. Passaggio 9 - Configura il server per aggiungere il client
  10. Passaggio 10 - Prova
  11. Conclusione

Wireguard è un'implementazione VPN multipiattaforma open source che utilizza la crittografia all'avanguardia. È più veloce, più semplice e più funzionale dei protocolli IPSec e OpenVPN. È progettata come VPN generica per funzionare su interfacce e supercomputer incorporati e funziona su Linux, Windows, macOS, iOS, Android, BSD e varie altre piattaforme.

Questo tutorial spiegherà 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 il sistema

Prima di procedere oltre, è indispensabile aggiornare il sistema per installare gli ultimi aggiornamenti.

$ sudo dnf update

Passaggio 2: installare e abilitare il repository EPEL

I pacchetti Wireguard richiesti possono essere trovati nel repository EPEL, quindi dobbiamo 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.

Passaggio 3: installare 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: configurare il 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 nella directory /etc/wireguard.

Successivamente, crea una coppia di chiavi pubblica/privata 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.

Successivamente, 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 che dovrebbe ascoltare le connessioni in entrata e i propri indirizzi IP VPN.

Impostiamo anche SaveConfig su true. Questo dirà al servizio Wireguard di salvare automaticamente la sua configurazione attiva in questo file all'arresto.

Premi Ctrl + W per chiudere il file e inserisci Y quando ti viene chiesto di salvare il file.

Passaggio 5: configurare il 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

Incollare il seguente codice 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 inserisci Y quando ti viene chiesto di salvare il file.

Successivamente, 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 venga 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 attuali regole del firewall 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 il file /etc/sysctl.d/99-custom.conf.

$ sudo nano /etc/sysctl.d/99-custom.conf

Incollare il seguente codice 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 inserisci Y quando ti viene chiesto di salvare il file.

L'ambito del codice nel file sopra è al di fuori dell'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 alle interfacce wg0 e eth0 di comunicare tra loro. Quindi dobbiamo aggiungere l'interfaccia Wireguard alla rete interna e attivare il mascheramento.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Passaggio 7: abilitare e avviare il servizio Wireguard

Successivamente, dobbiamo abilitare e avviare il servizio Wireguard.

$ sudo systemctl enable 
$ sudo systemctl start 

Puoi verificare se l'interfaccia Wireguard, wg0 è attiva e funzionante utilizzando il seguente comando.

$ 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: installare e configurare il 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

Nota la chiave privata che ottieni alla fine. Successivamente, dobbiamo modificare il file di configurazione che abbiamo appena creato.

$ sudo nano /etc/wireguard/wg0.conf

Aggiungere 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

Si noti che abbiamo assegnato l'IP privato 192.168.10.1 al server e 192.168.10.2 al client. Abbiamo anche aggiunto la chiave privata del client al file.

La sezione [Peer] è dove inserisci la configurazione dei 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 attiva la connessione.

Premi Ctrl + W per chiudere il file e inserisci Y quando ti viene chiesto di salvare il file.

Ora è il momento di abilitare e avviare il client VPN.

$ sudo systemctl enable 
$ sudo systemctl start 
$ sudo systemctl status 

Passaggio 9: configurare il server per aggiungere il client

Ora, dobbiamo aggiungere nuovamente la configurazione dei client al server per informarlo del client.

Interrompi prima il servizio Wireguard.

$ sudo systemctl stop 

Aprire il file wg0.conf per la modifica.

$ sudo nano /etc/wireguard/wg0.conf

Aggiungere 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 inserisci Y quando ti viene chiesto di salvare il file.

Le sezioni [Peer] definiscono gli altri membri della rete VPN. Puoi aggiungerne quanti ne hai bisogno.

Contengono la loro chiave pubblica, che deve corrispondere alla chiave privata del peer nella sezione [Interface].

Si noti che qualsiasi connessione in entrata viene prima autenticata rispetto a una delle chiavi pubbliche. Se la connessione non proviene da un peer verificato, i pacchetti in arrivo vengono 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 

Passaggio 10: prova

Controlliamo 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.