Questo tutorial ti mostrerà come configurare il tuo server VPN WireGuard su CentOS/RHEL. WireGuard è realizzato appositamente per il kernel Linux. Funziona all'interno del kernel Linux e ti consente di creare tunnel VPN veloci, moderni e sicuri.
Caratteristiche di WireGuard VPN
- Leggero e velocità super veloce, che soffia OpenVPN fuori dall'acqua.
- Multipiattaforma. WireGuard può essere eseguito su Linux, BSD, macOS, Windows, Android, iOS e OpenWRT.
- L'autenticazione dell'utente avviene tramite lo scambio di chiavi pubbliche, in modo simile alle chiavi SSH.
- Assegna indirizzi IP tunnel statici ai client VPN. Ad alcune persone potrebbe non piacere, ma in alcuni casi può essere utile.
- I dispositivi mobili possono passare dalla rete Wi-Fi a quella mobile senza interruzioni senza interrompere la connettività.
- Mira a sostituire OpenVPN e IPSec nella maggior parte dei casi d'uso.
Requisiti
Per seguire questo tutorial, avrai bisogno di un VPS (Virtual Private Server) che possa accedere liberamente ai siti web bloccati (fuori dal tuo paese o sistema di filtraggio Internet). Raccomando Kamatera VPS, che include:
- 30 giorni di prova gratuita.
- A partire da $ 4 al mese (1 GB di RAM)
- VPS basato su KVM ad alte prestazioni
- 9 data center in tutto il mondo, inclusi Stati Uniti, Canada, Regno Unito, Germania, Paesi Bassi, Hong Kong e Israele.
Segui il tutorial collegato di seguito per creare il tuo server VPS Linux su Kamatera.
- Come creare un server VPS Linux su Kamatera
Una volta che hai un VPS che esegue CentOS/Alma Linux/Rocky Linux, segui le istruzioni seguenti.
Questo tutorial presuppone che il server VPN e il client VPN eseguano entrambi CentOS/RHEL sistema operativo.
Passaggio 1:installa WireGuard su server e desktop CentOS/RHEL
Accedi al tuo server CentOS/RHEL, quindi esegui i seguenti comandi per installare WireGuard.
CentOS 8
sudo dnf install elrepo-release epel-release -ysudo dnf install kmod-wireguard wireguard-tools -y
RHEL 8
sudo dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpmsudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest -8.noarch.rpmsudo dnf install kmod-wireguard wireguard-tools -y
CentOS/RHEL 7
sudo yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmsudo yum install yum-plugin-elreposudo yum install kmod-wireguard wireguard-tools -y
Quindi usa gli stessi comandi per installare WireGuard sul tuo computer CentOS/RHEL locale (il client VPN).
Fase 2:genera una coppia di chiavi pubblica/privata
Server
Crea una directory per WireGuard.
sudo mkdir -p /etc/wireguard/
Eseguire il comando seguente sul server CentOS/RHEL per creare una coppia di chiavi pubblica/privata, che verrà salvata in /etc/wireguard/
directory.
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Cliente
Crea una directory per WireGuard.
sudo mkdir -p /etc/wireguard/
Esegui il comando seguente per creare una coppia di chiavi pubblica/privata sul computer CentOS/RHEL locale (il client VPN).
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
Fase 3:crea il file di configurazione WireGuard
Server
Usa un editor di testo da riga di comando come Nano per creare un file di configurazione WireGuard sul server CentOS/RHEL. wg0
sarà il nome dell'interfaccia di rete.
sudo dnf install nanosudo nano /etc/wireguard/wg0.conf
Copia il testo seguente e incollalo nel tuo file di configurazione. Devi utilizzare la tua chiave privata del server e la chiave pubblica del client.
[Interfaccia]Indirizzo =10.10.10.1/24ListenPort =51820PrivateKey =cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=[Peer]PublicKey =AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4 =10.2=Consentito>
Dove:
- Indirizzo :Specificare l'indirizzo IP privato del server VPN. Qui sto usando l'intervallo di rete 10.10.10.0/24, quindi non entrerà in conflitto con l'intervallo di rete domestica. (La maggior parte dei router domestici utilizza 192.168.0.0/24 o 192.168.1.0/24). 10.10.10.1 è l'indirizzo IP privato per il server VPN.
- Chiave privata :La chiave privata del server VPN, che può essere trovata in
/etc/wireguard/server_private.key
file sul server. - ListenPort :il server VPN WireGuard sarà in ascolto sulla porta UDP 51820, che è l'impostazione predefinita.
- Chiave pubblica :la chiave pubblica del client VPN, che può essere trovata in
/etc/wireguard/client_public.key
file sul computer client. - IP consentiti :indirizzi IP che il client VPN può utilizzare. In questo esempio, il client può utilizzare solo l'indirizzo IP 10.10.10.2 all'interno del tunnel VPN.
Salva e chiudi il file. (Per salvare un file nell'editor di testo Nano, premi Ctrl+O
, quindi premere Invio per confermare. Premi Ctrl+X
per uscire.)
Modifica la modalità di autorizzazione dei file in modo che solo l'utente root possa leggere i file.
sudo chmod 600 /etc/wireguard/ -R
Cliente
Usa un editor di testo da riga di comando come Nano per creare un file di configurazione WireGuard sul tuo computer CentOS/RHEL locale. wg-client0
sarà il nome dell'interfaccia di rete.
sudo nano /etc/wireguard/wg-client0.conf
Copia il testo seguente e incollalo nel tuo file di configurazione. È necessario utilizzare la chiave privata del client e la chiave pubblica del server.
[Interface] Indirizzo =10.10.10.2/24DNS =10.10.10.1PrivateKey =COFA + x5UvHF + a3xJ6enLatG + DoE3I5PhMgKrMKkUyXI =[Peer] =PublicKey vxyo4l4I3jWK + KZquNIDJF / hzQq29DOIxSUOrfNZZCs =AllowedIPs =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
Dove:
- Indirizzo :Specifica l'indirizzo IP privato del client VPN.
- DNS :specificare 10.10.10.1 (il server VPN) come server DNS. Sarà configurato tramite
resolvconf
comando. Puoi anche specificare più server DNS per la ridondanza in questo modo:DNS = 10.10.10.1 8.8.8.8
- Chiave privata :La chiave privata del client, che può essere trovata in
/etc/wireguard/client_private.key
file sul computer client. - Chiave pubblica :la chiave pubblica del server, che può essere trovata in
/etc/wireguard/server_public.key
file sul server. - IP consentiti :0.0.0.0/0 rappresenta l'intera Internet, il che significa che tutto il traffico verso Internet deve essere instradato tramite la VPN.
- Endpoint :l'indirizzo IP pubblico e il numero di porta del server VPN. Sostituisci 12.34.56.78 con il vero indirizzo IP pubblico del tuo server.
- PersistentKeepalive :invia un pacchetto vuoto autenticato al peer ogni 25 secondi per mantenere attiva la connessione. Se PersistentKeepalive non è abilitato, il server VPN potrebbe non essere in grado di eseguire il ping del client VPN.
Salva e chiudi il file.
Modifica la modalità file in modo che solo l'utente root possa leggere i file.
sudo chmod 600 /etc/wireguard/ -R
Fase 4:abilita l'inoltro IP sul server
Affinché il server VPN instrada i pacchetti tra i client VPN e Internet, è necessario abilitare l'inoltro IP. Modifica sysctl.conf
file.
sudo nano /etc/sysctl.conf
Aggiungi la seguente riga alla fine di questo file.
net.ipv4.ip_forward =1
Salva e chiudi il file. Quindi applica le modifiche con il comando seguente. Il -p l'opzione caricherà le impostazioni di sysctl da /etc/sysctl.conf file. Questo comando conserverà le nostre modifiche durante i riavvii del sistema.
sudo sysctl -p
Fase 5:Configura IP Masquerading sul server
Esegui il comando seguente per abilitare il mascheramento IP per 10.10.10.0/24
sottorete nel firewall del server.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" indirizzo sorgente="10.10.10.0/24" masquerade'sudo systemctl reload firewalld
Questo nasconderà la tua rete VPN dal mondo esterno. Quindi Internet può vedere solo l'IP del tuo server VPN, ma non può vedere l'IP del tuo client VPN, proprio come il tuo router domestico nasconde la tua rete domestica privata.
Se il tuo CentOS/RHEL non riesce a trovare firewall-cmd
comando, è necessario installare firewalld e avviare il servizio.
sudo dnf install firewalldsudo systemctl start firewalld
Fase 6:installa un risolutore DNS sul server
Poiché specifichiamo il server VPN come server DNS per il client, è necessario eseguire un risolutore DNS sul server VPN. Possiamo installare il server DNS bind9.
sudo dnf install bind
Avvia BIND 9 con:
sudo systemctl start named
E abilita l'avvio automatico all'avvio:
sudo systemctl enable named
Puoi verificarne lo stato con:
stato systemctl denominato
Esempio di output:
● named.service - Berkeley Internet Name Domain (DNS) Caricato:caricato (/usr/lib/systemd/system/named.service; abilitato; preimpostazione del fornitore:disabilita> Attivo:attivo (in esecuzione) da Sun 2020-05 -17 11:07:34 EDT; 9 secondi fa Processo:7203 ExecStop=/bin/sh -c /usr/sbin/rndc stop> /dev/null 2>&1 || /bin/kill -TE> Processo:7218 ExecStart =/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited,> Processo:7215 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" =="yes" ]; il> PID principale:7220 (nome) Attività:4 (limite:5045) Memoria:55,5 M CGroup:/system.slice/named.service └─7220 /usr/sbin/named -u named -c /etc/named.conf -4
Suggerimento:se il comando precedente non si chiude immediatamente, premi Q.
Modifica il file di configurazione principale di BIND /etc/named.conf
.
sudo nano /etc/named.conf
Nelle options
clausola, puoi trovare le due righe seguenti.
porta di ascolto 53 { 127.0.0.1; };ascolta su v6 porta 53 { ::1; };
Questo rende named
ascolta solo su localhost. Se vuoi consentire ai client nella stessa rete di interrogare i nomi di dominio, commenta queste due righe. (aggiungi doppie barre all'inizio di ogni riga)
// porta in ascolto 53 { 127.0.0.1; };// ascolta su v6 porta 53 { ::1; };
Trova la riga seguente.
consenti-query { localhost; };
Aggiungi l'intervallo di rete 10.10.10.0/24 in modo che i client VPN possano inviare query DNS. Tieni presente che devi terminare ogni intervallo di rete con un punto e virgola.
consenti-query { localhost; 10.10.10.0/24; };
Salva e chiudi il file. Riavvia BIND9 per rendere effettive le modifiche.
sudo systemctl restart denominato
Quindi devi eseguire il comando seguente per consentire ai client VPN di connettersi alla porta 53.
sudo firewall-cmd --zone=public --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept'
Passaggio 7:apri la porta WireGuard nel firewall
Esegui il comando seguente per aprire la porta UDP 51820 sul server.
sudo firewall-cmd --permanent --add-port=51820/udpsudo systemctl ricarica firewalld
Fase 8:avvia WireGuard
server
Esegui il seguente comando sul server per avviare WireGuard.
sudo wg-quick up /etc/wireguard/wg0.conf
Per fermarlo, esegui
sudo wg-quick down /etc/wireguard/wg0.conf
Puoi anche utilizzare il servizio systemd per avviare WireGuard.
sudo systemctl start [email protetta]
Se l'avvio non è riuscito, dovresti controllare il registro per scoprire cosa c'è che non va.
sudo journalctl -eu [email protetta]
Abilita l'avvio automatico all'avvio del sistema con il comando seguente.
sudo systemctl enable [email protected]
Controlla il suo stato con il seguente comando. Il suo stato dovrebbe essere active (exited)
.
stato systemctl [email protetta]
Ora il server WireGuard è pronto per accettare connessioni client.
Cliente
Avvia WireGuard.
sudo systemctl start [email protetta]
Se l'avvio non è riuscito, dovresti controllare il registro per scoprire cosa c'è che non va.
sudo journalctl -eu [email protetta]
Se vedi il seguente errore nel registro, puoi provare a riavviare il sistema operativo.
Risposte RTNETLINK:operazione non supportata
Abilita l'avvio automatico all'avvio del sistema.
sudo systemctl enable [email protected]
Controlla il suo stato:
stato systemctl [email protetta]
Ora vai su questo sito web:http://icanhazip.com/
per controllare il tuo indirizzo IP pubblico. Se tutto è andato bene, dovrebbe visualizzare l'indirizzo IP pubblico del tuo server VPN invece dell'indirizzo IP pubblico del tuo computer client.
Puoi anche eseguire il comando seguente per ottenere l'indirizzo IP pubblico corrente.
curl https://icanchazip.com
Suggerimenti per la risoluzione dei problemi
Puoi eseguire il ping dal server VPN al client VPN (ping 10.10.10.2
) per vedere se il tunnel funziona. Se vedi il seguente messaggio di errore nel ping,
ping:sendmsg:chiave richiesta non disponibile
potrebbe essere che il AllowedIPs
parametro è sbagliato, come un errore di battitura.
Se il tunnel VPN viene stabilito correttamente, ma l'indirizzo IP pubblico del client non cambia, è perché il mascheramento nel firewall non funziona. Una volta ho avuto un errore di battitura nelle regole del firewall, che ha impedito al mio computer di navigare in Internet.
Tieni presente che non consiglio di utilizzare SaveConfig=true
nel [Interface]
sezione del file di configurazione di WireGuard. SaveConfig
dice a WireGuard di salvare la configurazione di runtime allo spegnimento. Quindi, se aggiungi ulteriori [Peer]
nel file di configurazione e quindi riavvia WireGuard, le tue configurazioni appena aggiunte verranno sovrascritte.
Se la tua VPN continua a non funzionare, prova a riavviare il server VPN.
sudo systemctl restart [email protetta]
Quindi arresta il client VPN.
sudo systemctl stop [email protetta]
E aggiorna i pacchetti software sul client VPN.
aggiornamento sudo dnf
Quindi, riavvia il client VPN.
sudo shutdown -r nowsudo systemctl start [email protected]
Aggiunta di client VPN aggiuntivi
WireGuard è progettato per associare un indirizzo IP a un client VPN. Per aggiungere più client VPN, devi creare una coppia di chiavi privata/pubblica univoca per ciascun client, quindi aggiungere la chiave pubblica di ciascun client VPN nel file di configurazione del server (/etc/wireguard/wg0.conf
) in questo modo:
[Interface] Indirizzo =10.10.10.1/24PrivateKey =UIFH + XXjJ0g0uAZJ6vPqsbb / o68SYVQdmYJpy / FlGFA =ListenPort =51820 [Peer] =PublicKey 75VNV7HqFh + 3QIT5OHZkcjWfbjx8tc6Ck62gZJT / KRA =AllowedIPs =10.10.10.2/32[Peer]PublicKey =YYh4 / 1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=IP consentiti =10.10.10.3/32[Peer]PublicKey =EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=IP consentiti =10.10.10.4/32
Ogni client VPN avrà un indirizzo IP privato statico (10.10.10.2, 10.10.10.3, 10.10.10.4, ecc.). Riavvia il server WireGuard per rendere effettive le modifiche.
sudo systemctl restart [email protetta]
Quindi aggiungi la configurazione WireGuard su ciascun client VPN come al solito.
Routing delle policy, tunneling diviso e kill switch VPN
Ora ti mostrerò come utilizzare il instradamento delle norme , tunnel diviso e kill switch VPN con WireGuard VPN. Nota che non è consigliabile usarli insieme. Se utilizzi il routing dei criteri, non dovresti abilitare lo split tunneling o il kill switch VPN e viceversa.
Indirizzamento delle politiche
Per impostazione predefinita, tutto il traffico sul client VPN verrà instradato attraverso il server VPN. A volte potresti voler instradare solo un tipo specifico di traffico, in base al protocollo del livello di trasporto e alla porta di destinazione. Questo è noto come policy routing.
Il routing dei criteri è configurato sul computer client e prima è necessario interrompere la connessione VPN.
sudo systemctl stop [email protetta]
Quindi modifica il file di configurazione del client.
sudo nano /etc/wireguard/wg-client0.conf
Ad esempio, se aggiungi le seguenti 3 righe in [interface]
sezione, quindi WireGuard creerà una tabella di routing denominata "1234" e aggiungerà la regola IP nella tabella di routing. In questo esempio, il traffico verrà instradato attraverso il server VPN solo quando TCP viene utilizzato come protocollo del livello di trasporto e la porta di destinazione è 25, ovvero quando il computer client invia e-mail.
Table =1234PostUp =regola ip aggiungi ipproto tcp dport 25 table 1234PreDown =regola ip elimina ipproto tcp dport 25 table 1234
Salva e chiudi il file. Quindi riavvia il client WireGuard.
sudo systemctl start [email protetta]
Traforo diviso
Per impostazione predefinita, tutto il traffico sul client VPN verrà instradato attraverso il server VPN. Ecco come abilitare lo split tunneling, quindi solo il traffico verso il 10.10.10.0/24
L'intervallo IP sarà incanalato tramite WireGuard VPN. Ciò è utile quando desideri creare una rete privata per diversi server cloud, perché i client VPN verranno eseguiti su server cloud e se utilizzi un tunnel VPN completo, probabilmente perderai la connessione ai server cloud.
Modifica il file di configurazione del client.
sudo nano /etc/wireguard/wg-client0.conf
Cambia
IP consentiti =0.0.0.0/0
A
IP consentiti =10.10.10.0/24
Quindi il traffico verrà instradato tramite VPN solo quando l'indirizzo di destinazione è nell'intervallo IP 10.10.10.0/24. Salva e chiudi il file. Quindi riavvia il client WireGuard.
sudo systemctl restart [email protetta]
VPN Kill Switch
Per impostazione predefinita, il tuo computer può accedere a Internet tramite il normale gateway quando la connessione VPN viene interrotta. Potresti voler abilitare la funzione kill switch, che impedisce il flusso di pacchetti non crittografati attraverso interfacce non WireGuard.
Interrompi il processo del client WireGuard.
sudo systemctl stop [email protetta]
Modifica il file di configurazione del client.
sudo nano /etc/wireguard/wg-client0.conf
Aggiungi le seguenti due righe in [interface]
sezione.
PostUp =iptables -I OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j RIFIUTA
In questo modo:
[Interface]Address =10.10.10.2/24DNS =10.10.10.1PrivateKey =cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=PostUp =iptables -I OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCALE -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m segno ! --mark $(wg mostra %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT[Peer]PublicKey =RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=AllowedIPs =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
Salva e chiudi il file. Quindi avvia il client WireGuard.
sudo systemctl start [email protetta]