Questo tutorial ti mostrerà come installare il server VPN OpenConnect su Ubuntu 16.04/18.04 . Server VPN OpenConnect, noto anche come ocserv , è un'implementazione open source del protocollo VPN Cisco AnyConnnect, popolare tra le aziende e le università. AnyConnect è un protocollo VPN basato su SSL che consente ai singoli utenti di connettersi a una rete remota.
Caratteristiche del server VPN OpenConnect:
- Leggero e veloce. Nel mio test, posso guardare YouTube in 4k con OpenConnect VPN. YouTube è bloccato nel mio Paese.
- Compatibile con il client Cisco AnyConnect
- Supporta l'autenticazione della password e l'autenticazione del certificato
- Facile da configurare
Mi piace particolarmente il fatto che, rispetto ad altre tecnologie VPN, sia molto facile e conveniente per l'utente finale utilizzare OpenConnect VPN. Ogni volta che installo una distribuzione Linux basata su Debian sul mio computer e desidero sbloccare rapidamente i siti Web o nascondere il mio indirizzo IP, installo il client OpenConnect e mi collego al server con solo due righe di comandi:
sudo apt install openconnect sudo openconnect -b vpn.mydomain.com
Il gnutls-bin
il pacchetto software fornisce strumenti per creare la tua CA e il certificato del server, ma otterremo e installeremo il certificato Let's Encrypt. Il vantaggio dell'utilizzo del certificato Let's Encrypt è che è gratuito, più facile da configurare e considerato affidabile dal software client VPN.
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 con Ubuntu 18.04, segui le istruzioni seguenti.
È inoltre necessario un nome di dominio per abilitare HTTPS per OpenConnect VPN. Ho registrato il mio nome di dominio da NameCheap perché il prezzo è basso e offrono protezione della privacy a Whois gratuita per tutta la vita.
Passaggio 1:installazione del server VPN OpenConnect su Ubuntu 16.04/18.04
Accedi al tuo server Ubuntu 16.04/18.04. Quindi usa apt
per installare ocserv
pacchetto, che è incluso nel repository di Ubuntu dal 16.04.
sudo apt install ocserv
Una volta installato, il server OpenConnect VPN viene avviato automaticamente. Puoi verificarne lo stato con:
systemctl status ocserv
Esempio di output:
● ocserv.service - OpenConnect SSL VPN server Loaded: loaded (/lib/systemd/system/ocserv.service; enabled; vendor preset: enabled Active: active (running) since Thu 2017-11-30 05:45:07 UTC; 11s ago Docs: man:ocserv(8) Main PID: 19235 (ocserv-main) CGroup: /system.slice/ocserv.service ├─19235 ocserv-main └─19242 ocserv-secm
Se non è in esecuzione, puoi avviarlo con:
sudo systemctl start ocserv
Per impostazione predefinita, il server VPN OpenConnect è in ascolto sulla porta TCP e UDP 443. Se viene utilizzato dal server Web, il server VPN non può essere avviato. Vedremo come modificare la porta nel file di configurazione di OpenConnect VPN in seguito.
Passaggio 2:installazione del client Let's Encrypt (Certbot) sul server Ubuntu 16.04/18.04
Esegui i seguenti comandi per installare l'ultima versione di certbot dal PPA ufficiale. proprietà-software-comuni è richiesto se si desidera installare i pacchetti da PPA. Potrebbe mancare sul tuo server Ubuntu.
sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot
Per controllare il numero di versione, esegui
certbot --version
Esempio di output:
certbot 0.31.0
Fase 3:ottenimento di un certificato TLS da Let's Encrypt
Plugin autonomo
Se non è presente alcun server Web in esecuzione sul server Ubuntu 16.04/18.04 e si desidera che il server OpenConnect VPN utilizzi la porta 443, è possibile utilizzare il plug-in autonomo per ottenere il certificato TLS da Let's Encrypt. Esegui il comando seguente. Non dimenticare di impostare un record per il tuo nome di dominio.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com
Spiegazione:
certonly
:Ottieni un certificato ma non installarlo.--standalone
:usa il plugin standalone per ottenere un certificato--preferred-challenges http
:Esegui http-01 challenge per convalidare il nostro dominio, che utilizzerà la porta 80. Per impostazione predefinita, il plug-in standalone eseguirà tls-sni challenge, che utilizza la porta 443. Poiché la porta 443 è già utilizzata dal server OpenConnect VPN, è necessario modificare il comportamento predefinito.--agree-tos
:Accetta i termini di servizio di Let's Encrypt.--email
:l'indirizzo e-mail viene utilizzato per la registrazione e il recupero dell'account.-d
:Specifica il tuo nome di dominio.
Come puoi vedere dallo screenshot seguente, ho ottenuto con successo il certificato.
Utilizzo del plug-in webroot
Se il tuo server Ubuntu 16.04/18.04 ha un server web in ascolto sulle porte 80 e 443 e vuoi che il server OpenConnect VPN utilizzi una porta diversa, allora è una buona idea usare il plugin webroot per ottenere un certificato perché il plugin webroot funziona con praticamente tutti i server web e non abbiamo bisogno di installare il certificato nel server web.
Innanzitutto, devi creare un host virtuale per vpn.example.com.
Apache
Se stai usando Apache, allora
sudo nano /etc/apache2/sites-available/vpn.example.com.conf
E incolla le seguenti righe nel file.
<VirtualHost *:80> ServerName vpn.example.com DocumentRoot /var/www/vpn.example.com </VirtualHost>
Salva e chiudi il file. Quindi crea la directory principale web.
sudo mkdir /var/www/vpn.example.com
Imposta www-data (utente Apache) come proprietario della radice web.
sudo chown www-data:www-data /var/www/vpn.example.com -R
Abilita questo host virtuale.
sudo a2ensite vpn.example.com
Ricarica Apache per rendere effettive le modifiche.
sudo systemctl reload apache2
Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere il certificato Let's Encrypt utilizzando il plug-in webroot.
sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
Nginx
Se stai usando Nginx, allora
sudo nano /etc/nginx/conf.d/vpn.example.com.conf
Incolla le seguenti righe nel file.
server { listen 80; server_name vpn.example.com; root /var/www/vpn.example.com/; location ~ /.well-known/acme-challenge { allow all; } }
Salva e chiudi il file. Quindi crea la directory principale web.
sudo mkdir -p /var/www/vpn.example.com
Imposta www-data (utente Nginx) come proprietario della radice web.
sudo chown www-data:www-data /var/www/vpn.example.com -R
Ricarica Nginx per rendere effettive le modifiche.
sudo systemctl reload nginx
Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere il certificato Let's Encrypt utilizzando il plug-in webroot.
sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
Fase 4:modifica del file di configurazione del server VPN OpenConnect
Modifica il file di configurazione di ocserv.
sudo nano /etc/ocserv/ocserv.conf
Innanzitutto, configura l'autenticazione della password. Per impostazione predefinita, è abilitata l'autenticazione della password tramite PAM (Pluggable Authentication Modules), che consente di utilizzare gli account di sistema Ubuntu per accedere dai client VPN. Questo comportamento può essere disabilitato commentando la riga seguente.
auth = "pam[gid-min=1000]"
Se desideriamo che gli utenti utilizzino account VPN separati anziché account di sistema per l'accesso, è necessario aggiungere la riga seguente per abilitare l'autenticazione della password con un file di password.
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
Dopo aver finito di modificare questo file di configurazione, vedremo come usare ocpasswd
strumento per generare il /etc/ocserv/ocpasswd
file, che contiene un elenco di nomi utente e password codificate.
Nota :Ocserv supporta l'autenticazione del certificato client, ma Let's Encrypt non emette il certificato client. Devi configurare la tua CA per emettere il certificato client.
Quindi, se non desideri che ocserv utilizzi la porta TCP e UDP 443, trova le due righe seguenti e modifica il numero di porta. Altrimenti lasciali soli.
tcp-port = 443 udp-port = 443
Quindi trova le due righe seguenti. Dobbiamo cambiarli.
server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem server-key = /etc/ssl/private/ssl-cert-snakeoil.key
Sostituisci l'impostazione predefinita con il percorso del certificato del server Let's Encrypt e il file della chiave del server.
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
Quindi, imposta il numero massimo di client. Il valore predefinito è 16. Impostato su zero per illimitato.
max-clients = 16
Imposta il numero di dispositivi da cui un utente può accedere contemporaneamente. Il valore predefinito è 2. Impostato su zero per illimitato.
max-same-clients = 2
Quindi, trova la riga seguente. Cambia false
su true
per abilitare il rilevamento MTU, che può ottimizzare le prestazioni VPN.
try-mtu-discovery = false
Successivamente, imposta il dominio predefinito su vpn.example.com.
default-domain = vpn.example.com
La configurazione della rete IPv4 è la seguente per impostazione predefinita. Ciò causerà problemi perché la maggior parte dei router domestici imposta anche l'intervallo di rete IPv4 su 192.168.1.0/24
.
ipv4-network = 192.168.1.0 ipv4-netmask = 255.255.255.0
Possiamo usare un altro intervallo di indirizzi IP privati (10.10.10.0/24) per evitare la collisione di indirizzi IP, quindi cambia il valore di ipv4-network
a
ipv4-network = 10.10.10.0
Ora decommenta la riga seguente per eseguire il tunneling di tutte le query DNS tramite la VPN.
tunnel-all-dns = true
Modifica l'indirizzo del risolutore DNS. Puoi utilizzare il server DNS pubblico di Google.
dns = 8.8.8.8
Nota :È buona norma eseguire il proprio resolver DNS sullo stesso server, soprattutto se si è un provider VPN. Se è presente un resolver DNS in esecuzione sullo stesso server, specifica il DNS come
dns = 10.10.10.1
10.10.10.1 è l'indirizzo IP del server OpenConnect VPN nella VPN LAN. Ciò accelererà un po' le ricerche DNS per i client perché viene eliminata la latenza di rete tra il server VPN e il risolutore DNS.
Quindi commenta tutti i parametri del percorso (aggiungi il simbolo # all'inizio delle quattro righe seguenti), che imposterà il server come gateway predefinito per i client.
route = 10.10.10.0/255.255.255.0 route = 192.168.0.0/255.255.0.0 route = fef4:db8:1000:1001::/64 no-route = 192.168.5.0/255.255.255.0
Salva e chiudi il file Quindi riavvia il server VPN per rendere effettive le modifiche.
sudo systemctl restart ocserv
Passaggio 5:correzione dell'errore di handshake DTLS
Su Ubuntu 16.04 e Ubuntu 18.04, ocserv daemon ocserv.socket
non rispetta il valore "listen-host" dal file di configurazione, che causerà il seguente errore quando i client si connettono al server VPN.
DTLS handshake failed: Resource temporarily unavailable, try again.
Per correggere questo errore, dobbiamo modificare il file ocserv.service. Per prima cosa copiamo il file originale in /lib/systemd/system/
directory in /etc/systemd/system/
directory, quindi modificarlo, perché non vogliamo che la nuova versione del pacchetto ocserv annulli le nostre modifiche. (Per ulteriori informazioni sui file delle unità di sistema, esegui man systemd.unit
.)
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service sudo nano /etc/systemd/system/ocserv.service
Commenta le due righe seguenti.
Requires=ocserv.socket Also=ocserv.socket
Salva e chiudi il file. Quindi ricarica systemd
sudo systemctl daemon-reload
Interrompi ocserv.socket e disabilitalo.
sudo systemctl stop ocserv.socket sudo systemctl disable ocserv.socket
Riavvia il servizio ocserv.
sudo systemctl restart ocserv.service
Il servizio ocserv systemd non genererà alcun messaggio se non si riavvia, quindi dobbiamo controllare lo stato per assicurarci che sia effettivamente in esecuzione.
systemctl status ocserv
Passaggio 6:creazione di account VPN
Ora usa lo strumento ocpasswd per generare account VPN.
sudo ocpasswd -c /etc/ocserv/ocpasswd username
Ti verrà chiesto di impostare una password per l'utente e le informazioni verranno salvate in /etc/ocserv/ocpasswd
file. Per reimpostare la password, esegui nuovamente il comando precedente.
Passaggio 7:abilita l'inoltro IP
Affinché il server VPN instrada i pacchetti tra il client VPN e il mondo esterno, è 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 8:Configura Firewall per IP Masquerading
Abbiamo bisogno di impostare il mascheramento IP nel firewall del server, in modo che il server diventi un router virtuale per i client VPN. Userò UFW, che è un front-end per il firewall iptables. Installa UFW su Ubuntu con:
sudo apt install ufw
Innanzitutto, devi consentire il traffico SSH.
sudo ufw allow 22/tcp
Quindi, trova il nome dell'interfaccia di rete principale del tuo server.
ip addr
Come puoi vedere, si chiama ens3
sul mio server Ubuntu.
Per configurare il mascheramento IP, dobbiamo aggiungere il comando iptables in un file di configurazione UFW.
sudo nano /etc/ufw/before.rules
Per impostazione predefinita, ci sono alcune regole per il filter
tavolo. Aggiungi le seguenti righe alla fine di questo file. Sostituisci ens3
con il tuo nome di interfaccia di rete.
# NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE # End each table with the 'COMMIT' line or these rules won't be processed COMMIT
Nell'editor di testo Nano, puoi andare alla fine del file premendo Ctrl+W
, quindi premendo Ctrl+V
.
Le righe precedenti verranno aggiunte (-A ) una regola fino alla fine di POSTROUTING catena di nat tavolo. Collegherà la tua rete privata virtuale con Internet. E nascondi anche la tua rete 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.
Per impostazione predefinita, UFW vieta l'inoltro dei pacchetti. Possiamo consentire l'inoltro per la nostra rete privata. Trova il ufw-before-forward
catena in questo file e aggiungi le seguenti 3 righe, che accetteranno l'inoltro di pacchetti se l'IP di origine o di destinazione è nel 10.10.10.0/24
intervallo.
# allow forwarding for trusted network -A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
Salva e chiudi il file. Quindi abilita UFW.
sudo ufw enable
Se hai abilitato UFW in precedenza, puoi utilizzare systemctl per riavviare UFW.
sudo systemctl restart ufw
Ora se elenchi le regole nella catena POSTROUTING della tabella NAT usando il seguente comando:
sudo iptables -t nat -L POSTROUTING
Puoi vedere la regola della Masquerade.
Fase 9:apri la porta 443 nel firewall
Esegui il comando seguente per aprire la porta TCP e UDP 443. Se hai configurato una porta diversa per ocserv, cambia 443 nella porta configurata.
sudo ufw allow 443/tcp sudo ufw allow 443/udp
Ora il server OpenConnect VPN è pronto per accettare le connessioni client.
Se hai specificato 10.10.10.1 come server DNS per i client VPN, devi consentire ai client VPN di connettersi alla porta 53 con la seguente regola UFW.
sudo ufw insert 1 allow in from 10.10.10.0/24
Devi anche modificare la configurazione del server DNS BIND per consentire ai client VPN di inviare query DNS ricorsive come di seguito.
allow-recursion { 127.0.0.1; 10.10.10.0/24; };
Come installare e utilizzare il client VPN OpenConnect su Ubuntu 16.04/18.04 Desktop
Esegui il comando seguente per installare il client della riga di comando OpenConnect VPN sul desktop di Ubuntu.
sudo apt install openconnect
Puoi connetterti a VPN dalla riga di comando come di seguito. -b
flag lo farà funzionare in background dopo che la connessione è stata stabilita.
sudo openconnect -b vpn.example.com:port-number
Ti verrà chiesto di inserire nome utente e password VPN. Se la connessione viene stabilita correttamente, vedrai il seguente messaggio.
Got CONNECT response: HTTP/1.1 200 CONNECTED CSTP connected. DPD 90, Keepalive 32400 Connected tun0 as 192.168.1.139, using SSL Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).
Per interrompere la connessione, esegui:
sudo pkill openconnect
Per eseguire il client in modo non interattivo, utilizza la seguente sintassi.
echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin
Se desideri utilizzare Network Manager per gestire la connessione VPN, devi installare anche questi pacchetti.
sudo apt install network-manager-openconnect network-manager-openconnect-gnome
Se sei connesso correttamente al server VPN, ma il tuo indirizzo IP pubblico non cambia, è perché l'inoltro IP o il mascheramento IP non funzionano. Una volta ho avuto un errore di battitura nel mio comando iptables, che ha impedito al mio computer di navigare in Internet.
Connessione automatica all'avvio del sistema
Per consentire al client OpenConnect VPN di connettersi automaticamente al server all'avvio, possiamo creare un'unità di servizio systemd.
sudo nano /etc/systemd/system/openconnect.service
Inserisci le seguenti righe nel file. Sostituisci il testo rosso.
[Unit] Description=OpenConnect VPN Client After=network-online.target systemd-resolved.service Wants=network-online.target [Service] Type=simple ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin' ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 && /usr/bin/pkill -SIGINT openconnect && /sbin/ip route flush 12.34.56.78' Restart=always RestartSec=2 [Install] WantedBy=multi-user.target
Salva e chiudi il file. Quindi abilita questo servizio in modo che si avvii all'avvio.
sudo systemctl enable openconnect.service
Spiegazione del contenuto del file:
After=network-online.target systemd-resolved.service
eWants=network-online.target
eseguire questo servizio dopo che la rete è attiva. Vogliamo ilopenconnect.service
inizia dopo ilsystemd-resolved.service
perché ciò assicurerà che l'indirizzo del server DNS impostato da OpenConnect non venga sovrascritto dasystemd-resolved.service
.- In realtà, questo servizio può ancora essere eseguito prima che la rete sia attiva. Aggiungiamo
Restart=always
eRestartSec=2
per riavviare questo servizio dopo 2 secondi se questo servizio non riesce. - Systemd non riconosce il reindirizzamento della pipe, quindi in
ExecStart
direttiva, avvolgiamo il comando tra virgolette singole ed eseguiamolo con la shell Bash. - Poiché il client OpenConnect VPN verrà eseguito come un servizio systemd, che viene eseguito in background, non è necessario aggiungere
-b
contrassegnare suopenconnect
comando. - L'ExecStop la direttiva serve per interrompere la connessione VPN. Per prima cosa, utilizziamo
resolvconf
comando per ripristinare le impostazioni del server DNS. tun0 è il nome predefinito per il dispositivo TUN, che puoi vedere conip link
comando. Quindi utilizziamopkill
comando per interrompereopenconenct
processi. Infine, ripristiniamo la tabella di routing del kernel Linux conip route flush
comando. Sostituisci12.34.56.78
con l'indirizzo IP del tuo server VPN.
Per avviare immediatamente questo servizio Systemd, esegui
sudo systemctl start openconnect
Per interrompere questo servizio Systemd, esegui
sudo systemctl stop openconnect
Riavvio automatico quando la connessione VPN si interrompe
A volte la connessione VPN si interrompeva per vari motivi. Per riavviare automaticamente il client VPN, modifica il file crontab dell'utente root.
sudo crontab -e
Aggiungi la seguente riga alla fine di questo file.
* * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect
Questo processo Cron verrà eseguito ogni minuto per verificare se il client VPN può eseguire il ping dell'indirizzo IP privato del server VPN (10.10.10.1). Se il ping non riesce, il comando a destra verrà eseguito per riavviare il client VPN. ||
è l'operatore OR in Bash. Esegue il comando a destra solo se il comando a sinistra ha restituito un errore.
Salva e chiudi il file.
Client GUI OpenConnect per Windows e MacOS
Possono essere scaricati dalla pagina Github della GUI di OpenConnect.
Velocità
OpenConnect VPN è piuttosto veloce. Posso usarlo per guardare video 4k su YouTube. Come puoi vedere, la velocità di connessione è 63356 Kbps , che si traduce in 61 Mbit/s .
Ed ecco i risultati del test su speedtest.net.
Ottimizzazione della velocità
OpenConnect per impostazione predefinita utilizza il protocollo TLS su UDP (DTLS) per ottenere una velocità maggiore, ma UDP non può fornire una trasmissione affidabile. TCP è più lento di UDP ma può fornire una trasmissione affidabile. Un consiglio per l'ottimizzazione che posso darti è disabilitare DTLS, utilizzare TLS standard (su TCP), quindi abilitare TCP BBR per aumentare la velocità TCP.
Per disabilitare DTLS, commentare (aggiungere il simbolo # all'inizio) la riga seguente nel file di configurazione ocserv.
udp-port = 443
Salva e chiudi il file. Quindi riavvia il servizio ocserv.
sudo systemctl restart ocserv.service
Per abilitare TCP BBR, dai un'occhiata al seguente tutorial.
- Come aumentare facilmente le prestazioni della rete di Ubuntu abilitando TCP BBR
Nel mio test, TLS standard con TCP BBR abilitato è due volte più veloce di DTLS.
Rinnovo automatico del certificato Let's Encrypt
Modifica il file crontab dell'utente root.
sudo crontab -e
Aggiungi la riga seguente alla fine del file. È necessario riavviare il servizio ocserv affinché il server VPN raccolga il nuovo certificato e il file chiave.
@daily certbot renew --quiet && systemctl restart ocserv
Suggerimenti per la risoluzione dei problemi
Tieni presente che se stai utilizzando OpenVZ VPS, assicurati di abilitare il dispositivo di rete virtuale TUN nel pannello di controllo VPS.
In caso di problemi, controlla il registro del server VPN OpenConnect.
sudo journalctl -xe -u ocserv.service
Ho scoperto che se cambio la porta 443 con una porta diversa, il grande firewall cinese bloccherà questa connessione VPN.
Se ocserv ti dice che non può caricare il /etc/ocserv/ocserv.conf
file, puoi interrompere ocserv.
sudo systemctl stop ocserv
Quindi eseguilo in primo piano con il debug abilitato.
sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10
Quindi l'output potrebbe darti alcuni indizi sul perché ocserv non funziona.
Consenti al server VPN e al server Web OpenConnect di utilizzare la porta 443 contemporaneamente
Si prega di leggere il seguente articolo:
- Esegui OpenConnect VPN Server e Apache/Nginx sulla stessa casella con HAProxy
Come disabilitare TLS 1.0 e TLS 1.1 in ocserv
Il consiglio PCI ha deprecato TLS 1.0 il 30 giugno 2018 e i browser Web mainstream disabiliteranno TLS 1.0 e TLS 1.1 nel 2020. Dovremmo fare lo stesso con il server VPN. Modifica il file di configurazione principale.
sudo nano /etc/ocserv/ocserv.conf
Trova la seguente riga:
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
Per disabilitare TLS 1.0 e TLS 1.1 nel server OpenConnect VPN, aggiungi semplicemente -VERS-TLS1.0
e -VERS-TLS1.1
nella riga.
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"
Salva e chiudi il file. Quindi riavvia ocserv.
sudo systemctl restart ocserv
Ora ocserv accetterà solo TLS 1.2. Per ulteriori informazioni sulla configurazione del parametro TLS in ocserv, vedere le stringhe di priorità di GnuTLS.
Per verificare se TLS 1.0 è supportato nel tuo server OpenConnect VPN, esegui il comando seguente.
openssl s_client -connect vpn.your-domain.com:443 -tls1
E controlla TLS 1.1
openssl s_client -connect vpn.your-domain.com:443 -tls1_1
Se nell'output viene visualizzato il seguente messaggio, significa che la versione TLS non è supportata.
New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported
Ho provato ad abilitare TLS 1.3, ma non è ancora supportato nel pacchetto ocserv su Ubuntu.
Configurazione per utente o per gruppo
Ocserv consente configurazioni per utente e per gruppo. Per abilitare questa funzione, decommenta le seguenti due righe in /etc/ocserv/ocserv.conf
file.
config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/
Salva e chiudi il file. Quindi crea la directory di configurazione per utente e per gruppo.
sudo mkdir /etc/ocserv/config-per-user/ sudo mkdir /etc/ocserv/config-per-group/
Successivamente, puoi creare un file in queste due directory. Ad esempio, crea il user1
per consentire la configurazione personalizzata per user1
.
sudo nano /etc/ocserv/config-per-user/user1
Puoi anche creare il group1
per consentire la configurazione personalizzata per il gruppo denominato group1
.
sudo nano /etc/ocserv/config-per-group/group1
Puoi aggiungere qualcosa come sotto nel file.
route = 10.10.10.0/255.255.255.0
Ciò significa che dopo user1
connettiti a questo server VPN, invia solo il traffico al 10.10.10.0/24
la rete verrà instradata tramite server VPN. Il traffico verso altri indirizzi IP viene instradato tramite il gateway originale. Uso questo trucco per consentire al mio altro VPS (server privato virtuale) di connettersi a questo server VPN senza interrompere il normale traffico, quindi il dispositivo tun (vpns0) del mio server VPN è sempre acceso, il che significa che il mio server VPN avrà sempre il indirizzo IP privato 10.10.10.1.
Salva e chiudi il file. Riavvia ocserv per rendere effettive le modifiche.
sudo systemctl restart ocserv
Hosting virtuale
Per aggiungere un nuovo host virtuale in ocserv, devi prima utilizzare il metodo nel passaggio 3 per ottenere un certificato TLS per il nuovo host virtuale. Quindi modifica il file di configurazione di ocserv.
sudo nano /etc/ocserv/ocserv.conf
Vai in fondo a questo file. Nell'editor di testo Nano, puoi premere Ctrl+W
, quindi Ctrl+V
per passare alla fine di un file. Aggiungi le seguenti righe. Sostituisci vpn2.example.com
con il nome host del secondo host virtuale.
[vhost:vpn2.example.com] #Allow password authentication and certificate authentication enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]" auth = "certificate" tcp-port = 443 #uncomment the two lines if ocserv runs behind HAProxy. #listen-host = 127.0.0.1 #listen-proxy-proto = true # SSL/TLS configuration ca-cert = /etc/ocserv/ssl/ca-cert.pem server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem cert-user-oid = 0.9.2342.19200300.100.1.1 #Networking configuration. Use a different network range for this virtual host. device = vpns ipv4-network = 10.10.20.0 ipv4-netmask = 255.255.255.0 route = default dns = 8.8.8.8 tunnel-all-dns = true compression = true max-clients = 0 max-same-clients = 0 try-mtu-discovery = true idle-timeout=1200 mobile-idle-timeout=2400 config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/
Salva e chiudi il file. Quindi riavvia ocserv.
sudo systemctl restart ocserv
Modifica il file di configurazione UFW.
sudo nano /etc/ufw/before.rules
Trova il ufw-before-forward
catena in questo file e aggiungi le 2 righe seguenti, che accetteranno l'inoltro di pacchetti se l'IP di origine o l'IP di destinazione è nel 10.10.20.0/24
intervallo.
-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT
Salva e chiudi il file. Quindi riavvia UFW.
sudo systemctl restart ufw
Nota che il demone ocserv potrebbe dirti che alcuni parametri verranno ignorati per l'host virtuale. Tuttavia, ho scoperto che alcuni dei parametri ignorati sono effettivamente necessari. Ad esempio, se elimini device = vpns
riga dall'host virtuale, potresti riscontrare il seguente errore durante la creazione di una connessione VPN all'host virtuale.
VPN service unavailable; reason: Server configuration error
E il server VPN produrrebbe il seguente messaggio di errore nel registro.
no networks are configured; rejecting client
Nota anche che il client VPN AnyConnect su iOS non supporta TLS SNI, quindi gli utenti iOS si collegheranno all'host virtuale predefinito.
Come eseguire più istanze di ocserv
Un processo ocserv può collegarsi a una sola porta TCP o UDP sul tuo server. Se si desidera consentire a ocserv di collegarsi a più porte TCP o UDP, è necessario eseguire più processi ocserv. È molto semplice. Copia il /lib/systemd/system/ocserv.service
in un nuovo file.
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service
Quindi modifica il nuovo file.
sudo nano /etc/systemd/system/ocserv2.service
Cambia
/etc/ocserv/ocserv.conf
a
/etc/ocserv/ocserv2.conf
Salva e chiudi il file. Successivamente, puoi modificare il /etc/ocserv/ocserv2.conf
file e aggiungi le tue configurazioni personalizzate. Al termine, avvia il secondo servizio ocserv.
sudo systemctl start ocserv2