Installare WireGuard su CentOS 8 — guida passo passo

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 eseguonowg 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.
Materiali simili

Cambiare browser predefinito in Windows 11

Btrfs: pooling e mirroring dei dischi su Linux

CyanogenMod 12.1 su Lenovo A2010 – Guida

Animare testo e emoji in Messaggi (iPhone iOS 18)

PWA in Firefox su Windows: Taskbar Tabs
