Guida alle tecnologie

Installare WireGuard su CentOS 8 — guida passo passo

7 min read VPN Aggiornato 25 Sep 2025
WireGuard su CentOS 8: installazione e configurazione
WireGuard su CentOS 8: installazione e configurazione

Server connesso tramite VPN WireGuard

WireGuard è un’implementazione VPN open source e multipiattaforma che utilizza crittografia moderna. È più veloce, più semplice e spesso più funzionale rispetto a IPSec e OpenVPN. È pensato come VPN general-purpose per dispositivi embedded e supercomputer e gira su Linux, Windows, macOS, iOS, Android, BSD e altre piattaforme.

Questa guida spiega come installare WireGuard su un server CentOS 8 e come connettersi da un client Linux (CentOS/Fedora/Ubuntu).

Prerequisiti

  • Accesso root o sudo sul server CentOS 8.
  • Interfaccia di rete pubblica (nell’esempio: eth0) e indirizzo IP pubblico (nell’esempio: 203.1.114.98).
  • Familiarità con comandi di base Linux e con l’editor nano.
  • Client Linux che supporta WireGuard.

Importante: conserva le chiavi private in un posto sicuro e non condividerle.

Step 1 - Aggiorna il sistema

Prima di procedere aggiorna il sistema per avere i pacchetti più recenti.

$ sudo dnf update

Step 2 - Installa e abilita il repository EPEL

I pacchetti necessari per WireGuard si trovano in EPEL, quindi installa e abilitalo.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Abbiamo anche abilitato il repository PowerTools poiché alcuni pacchetti EPEL dipendono da esso.

Step 3 - Installa WireGuard

Abilita il repository Copr per WireGuard.

$ sudo dnf copr enable jdoss/wireguard

Installa WireGuard.

$ sudo dnf install wireguard-dkms wireguard-tools

Questa operazione installa anche il compilatore GNU GCC necessario per compilare i moduli del kernel su cui WireGuard si basa.

Step 4 - Configura il server WireGuard

Crea la directory di configurazione e un file vuoto con permessi corretti.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Touch crea il file wg0.conf nella directory /etc/wireguard.

Genera 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 i file privatekey e publickey con le rispettive chiavi.

Visualizza la chiave privata appena creata.

$ sudo cat privatekey

Annota la chiave privata perché ti servirà nella configurazione.

Modifica il file di configurazione del server.

$ sudo nano /etc/wireguard/wg0.conf

Aggiungi il seguente contenuto (adatta gli indirizzi/porta se necessario):

[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

La sezione [Interface] contiene la chiave privata del server, la porta UDP su cui ascoltare e l’indirizzo IP VPN del server.

Nota: SaveConfig = true farà sì che il servizio aggiorni il file con lo stato attivo alla chiusura.

Salva e chiudi il file (in nano: Ctrl+W per uscire, conferma con Y quando richiesto).

Step 5 - Configura il firewall (firewalld)

Apri la porta UDP scelta per WireGuard e definisci un servizio firewalld.

$ sudo nano /etc/firewalld/services/wireguard.xml

Incolla questo XML (mantieni la porta che hai scelto):



  wireguard
  WireGuard open UDP port 37822 for client connections
  

Salva e chiudi il file.

Abilita il servizio WireGuard nel firewall in modo permanente.

$ sudo firewall-cmd --permanent --add-service=wireguard

Attiva il masquerading in uscita in modo che il traffico della rete 192.168.10.0/24 venga NATtato sull’IP pubblico del server (nell’esempio: 203.1.114.98).

$ sudo firewall-cmd --permanent --add-masquerade

Ricarica il firewall per applicare le regole.

$ sudo firewall-cmd --reload

Verifica le regole correnti:

$ 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: 

Importante: se la tua interfaccia pubblica non è eth0 sostituiscila con quella corretta.

Step 6 - Abilita l’inoltro IPv4 e altre opzioni sysctl

Crea un file sysctl per attivare l’inoltro IPv4 e altre ottimizzazioni.

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

Incolla il seguente contenuto:

## 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

Salva e chiudi il file. Ricarica le impostazioni:

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

Aggiungi l’interfaccia wg0 alla zona interna e abilita masquerading permanente per la zona interna:

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

Step 7 - Abilita e avvia il servizio WireGuard

Abilita e avvia il servizio con systemd:

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

Verifica lo stato dell’interfaccia e la chiave pubblica:

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0:  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

Step 8 - Installa e configura il client WireGuard (Linux)

Segui le istruzioni ufficiali per installare il client WireGuard sulla tua distribuzione. Dopo l’installazione, crea 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

Annota la chiave privata del client e modifica wg0.conf:

$ sudo nano /etc/wireguard/wg0.conf

Esempio di configurazione client:

[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

Spiegazione rapida:

  • Address: l’indirizzo privato del client nella rete VPN.
  • AllowedIPs: gli indirizzi raggiungibili tramite questo peer (qui la rete VPN privata).
  • Endpoint: IP pubblico del server e porta UDP.
  • PersistentKeepalive: mantiene viva la NAT inviando pacchetti periodici.

Abilita e avvia il client:

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl status wg-quick@wg0

Step 9 - Aggiungi il client nella configurazione del server

Per consentire al server di riconoscere il client, aggiungi una sezione [Peer] nel file /etc/wireguard/wg0.conf del server.

Arresta temporaneamente il servizio:

$ sudo systemctl stop wg-quick@wg0

Modifica il file di configurazione del server:

$ sudo nano /etc/wireguard/wg0.conf

Aggiungi alla fine:

[Peer]
## client VPN public key ##
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=

## client VPN IP address (note /32 subnet) ##
AllowedIPs = 192.168.10.2/32

Salva, chiudi e riavvia il servizio:

$ sudo systemctl start wg-quick@wg0

Nota: ogni peer è autenticato dalla sua chiave pubblica. Connessioni da host che non possiedono la chiave privata corrispondente vengono ignorate silenziosamente.

Step 10 - Testare la connessione

Sul client prova a pingare il server VPN:

$ 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

Se il ping funziona e vedi handshake/transfer nelle informazioni di wg, la VPN è operativa.

Sicurezza e hardening consigliati

  • Proteggi i file delle chiavi con permessi stretti (umask 077). Non trasferire le chiavi private via email o canali non sicuri.
  • Monitora i log di sistema (journalctl) per errori relativi a wg-quick.
  • Considera di usare autenticazione a livello applicazione e firewalling lato host per limitare servizi esposti.
  • Aggiorna regolarmente kernel e pacchetti DKMS per ricevere fix di sicurezza.

Quando WireGuard potrebbe non essere adatto

  • Se hai bisogno di funzionalità avanzate di policy routing o plugin di autenticazione integri (es. MFA centralizzato) che dipendono da specifici controller aziendali, potresti preferire soluzioni più ricche di feature.
  • In ambienti che richiedono compatibilità con hardware o appliance legacy che non supportano UDP-based tunnels, WireGuard può risultare incompatibile.

Approcci alternativi

  • OpenVPN: supporto maturo, molte opzioni di autenticazione e compatibilità con appliance più vecchie.
  • IPSec (strongSwan, Libreswan): ottimo per integrazioni con reti aziendali e gateway che richiedono standard IPsec.

Modello mentale / euristica per progettare la VPN

  • Separazione dei ruoli: server = punto d’ingresso e NAT, client = endpoint con chiavi private.
  • Indirizzi IP: usa una subnet dedicata alla VPN (qui 192.168.10.0/24). Mantieni un IP per server e uno per ogni client.
  • Chiavi: ogni peer ha la propria coppia di chiavi; il server memorizza solo le chiavi pubbliche dei peer.

Checklist per ruolo

  • Amministratore server:

    • Aggiornare il sistema e abilitare repository necessari.
    • Configurare firewall (servizio WireGuard, masquerade, zone e interfacce).
    • Generare chiavi server e mantenere i permessi adeguati.
    • Aggiungere peer con AllowedIPs /32.
    • Abilitare sysctl per ip_forward.
  • Amministratore client:

    • Generare coppia di chiavi client.
    • Creare wg0.conf con la chiave privata, Address e blocco [Peer] con PublicKey del server.
    • Avviare e testare la connessione.

Troubleshooting comune

  • Connessione assente: controlla che la porta UDP sia aperta e che il firewall non blocchi il traffico.
  • Nessun handshake: verifica che le chiavi pubbliche siano corrette su entrambi i lati e che l’Endpoint punti all’IP e porta corretti.
  • Problemi di routing: controlla AllowedIPs su client e server per assicurarti che includano le reti desiderate.

File di esempio e best practice

  • Mantieni un inventario delle chiavi pubbliche e degli indirizzi assegnati in un file sicuro.
  • Per aggiungere o rimuovere client in produzione usa script che aggiornano /etc/wireguard/wg0.conf e poi eseguono wg syncconf o riavviano il servizio in modo controllato.

Glossario rapido

  • Peer: un altro nodo WireGuard con cui il dispositivo può comunicare.
  • Endpoint: indirizzo IP pubblico e porta del peer remoto.
  • AllowedIPs: elenco di prefissi indirizzo che il peer può raggiungere attraverso la VPN.
  • PersistentKeepalive: intervallo (sec) per inviare pacchetti e mantenere NAT aperto.

Conclusione

Hai ora una VPN WireGuard funzionante su CentOS 8 e almeno un client Linux connesso. WireGuard fornisce un tunnel leggero, sicuro e performante; assicurati di gestire le chiavi con cura e di mantenere il sistema aggiornato.

Riassunto rapido:

  • Installa EPEL e abilitare Copr per WireGuard.
  • Genera coppie di chiavi per server e client.
  • Configura firewall, sysctl e avvia wg-quick.
  • Testa con ping e verifica lo stato con wg.

Se hai domande specifiche o vuoi uno script automatizzato per aggiungere/rimuovere peer, chiedi e posso fornire un esempio.

Autore
Redazione

Materiali simili

Cambiare browser predefinito in Windows 11
Windows

Cambiare browser predefinito in Windows 11

Btrfs: pooling e mirroring dei dischi su Linux
Linux

Btrfs: pooling e mirroring dei dischi su Linux

CyanogenMod 12.1 su Lenovo A2010 – Guida
Android

CyanogenMod 12.1 su Lenovo A2010 – Guida

Animare testo e emoji in Messaggi (iPhone iOS 18)
Guide iPhone

Animare testo e emoji in Messaggi (iPhone iOS 18)

PWA in Firefox su Windows: Taskbar Tabs
Browser

PWA in Firefox su Windows: Taskbar Tabs

Liberare spazio iPhone senza cancellare app
Smartphone

Liberare spazio iPhone senza cancellare app