Dieses Tutorial zeigt Ihnen, wie Sie den OpenConnect VPN-Server unter Ubuntu 16.04/18.04 installieren . OpenConnect VPN-Server, auch bekannt als ocserv , ist eine Open-Source-Implementierung des Cisco AnyConnect VPN-Protokolls, das bei Unternehmen und Universitäten beliebt ist. AnyConnect ist ein SSL-basiertes VPN-Protokoll, das es einzelnen Benutzern ermöglicht, sich mit einem entfernten Netzwerk zu verbinden.
Merkmale des OpenConnect VPN-Servers:
- Leicht und schnell. In meinem Test kann ich mit OpenConnect VPN YouTube in 4k ansehen. YouTube ist in meinem Land gesperrt.
- Kompatibel mit dem Cisco AnyConnect-Client
- Unterstützt Passwortauthentifizierung und Zertifikatsauthentifizierung
- Einfach einzurichten
Besonders gefällt mir die Tatsache, dass es im Vergleich zu anderen VPN-Technologien für den Endbenutzer sehr einfach und bequem ist, OpenConnect VPN zu verwenden. Immer wenn ich eine Debian-basierte Linux-Distribution auf meinem Computer installiere und Websites schnell entsperren oder meine IP-Adresse verbergen möchte, installiere ich den OpenConnect-Client und verbinde mich mit nur zwei Befehlszeilen mit dem Server:
sudo apt install openconnect sudo openconnect -b vpn.mydomain.com
Der gnutls-bin
Das Softwarepaket bietet Tools zum Erstellen Ihrer eigenen Zertifizierungsstelle und Ihres eigenen Serverzertifikats, aber wir erhalten und installieren das Let’s Encrypt-Zertifikat. Der Vorteil der Verwendung des Let’s Encrypt-Zertifikats besteht darin, dass es kostenlos und einfacher einzurichten ist und von der VPN-Client-Software als vertrauenswürdig eingestuft wird.
Anforderungen
Um diesem Tutorial zu folgen, benötigen Sie einen VPS (Virtual Private Server), der frei auf blockierte Websites zugreifen kann (außerhalb Ihres Landes oder Internetfiltersystems). Ich empfehle Kamatera VPS, das Folgendes bietet:
- Kostenlose 30-Tage-Testversion.
- Beginnt bei 4 $/Monat (1 GB RAM)
- Hochleistungs-KVM-basiertes VPS
- 9 Rechenzentren auf der ganzen Welt, darunter USA, Kanada, Großbritannien, Deutschland, Niederlande, Hongkong und Israel.
Befolgen Sie das unten verlinkte Tutorial, um Ihren Linux-VPS-Server bei Kamatera zu erstellen.
- So erstellen Sie einen Linux-VPS-Server auf Kamatera
Sobald Sie einen VPS mit Ubuntu 18.04 haben, befolgen Sie die nachstehenden Anweisungen.
Sie benötigen außerdem einen Domänennamen, um HTTPS für OpenConnect VPN zu aktivieren. Ich habe meinen Domainnamen bei NameCheap registriert, weil der Preis niedrig ist und sie Whois-Datenschutz lebenslang kostenlos anbieten.
Schritt 1:OpenConnect VPN-Server auf Ubuntu 16.04/18.04 installieren
Melden Sie sich bei Ihrem Ubuntu 16.04/18.04-Server an. Verwenden Sie dann apt
um den ocserv
zu installieren Paket, das seit 16.04 im Ubuntu-Repository enthalten ist.
sudo apt install ocserv
Nach der Installation wird der OpenConnect VPN-Server automatisch gestartet. Sie können den Status überprüfen mit:
systemctl status ocserv
Beispielausgabe:
● 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
Wenn es nicht läuft, können Sie es starten mit:
sudo systemctl start ocserv
Standardmäßig lauscht der OpenConnect VPN-Server auf TCP- und UDP-Port 443. Wenn er vom Webserver verwendet wird, kann der VPN-Server nicht gestartet werden. Wir werden später sehen, wie man den Port in der OpenConnect VPN-Konfigurationsdatei ändert.
Schritt 2:Let’s Encrypt Client (Certbot) auf Ubuntu 16.04/18.04 Server installieren
Führen Sie die folgenden Befehle aus, um die neueste Version von certbot vom offiziellen PPA zu installieren. Software-Eigenschaften-allgemein ist erforderlich, wenn Sie Pakete von PPA installieren möchten. Möglicherweise fehlt es auf Ihrem Ubuntu-Server.
sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot
Um die Versionsnummer zu überprüfen, führen Sie
auscertbot --version
Beispielausgabe:
certbot 0.31.0
Schritt 3:Erhalt eines TLS-Zertifikats von Let’s Encrypt
Eigenständiges Plugin
Wenn auf Ihrem Ubuntu 16.04/18.04-Server kein Webserver läuft und Sie möchten, dass der OpenConnect VPN-Server Port 443 verwendet, können Sie das eigenständige Plugin verwenden, um ein TLS-Zertifikat von Let’s Encrypt zu erhalten. Führen Sie den folgenden Befehl aus. Vergessen Sie nicht, einen A-Eintrag für Ihren Domainnamen festzulegen.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com
Erklärung:
certonly
:Erhalten Sie ein Zertifikat, aber installieren Sie es nicht.--standalone
:Verwenden Sie das eigenständige Plugin, um ein Zertifikat zu erhalten--preferred-challenges http
:Führen Sie eine http-01-Herausforderung durch, um unsere Domäne zu validieren, die Port 80 verwendet. Standardmäßig führt das eigenständige Plugin eine tls-sni-Herausforderung durch, die Port 443 verwendet. Da Port 443 bereits vom OpenConnect VPN-Server verwendet wird, müssen wir die ändern Standardverhalten.--agree-tos
:Stimmen Sie den Nutzungsbedingungen von Let’s Encrypt zu.--email
:Die E-Mail-Adresse wird für die Kontoregistrierung und -wiederherstellung verwendet.-d
:Geben Sie Ihren Domänennamen an.
Wie Sie dem folgenden Screenshot entnehmen können, habe ich das Zertifikat erfolgreich erhalten.
Verwendung des Webroot-Plugins
Wenn Ihr Ubuntu 16.04/18.04-Server einen Webserver hat, der Port 80 und 443 überwacht, und Sie möchten, dass der OpenConnect VPN-Server einen anderen Port verwendet, dann ist es eine gute Idee, das Webroot-Plugin zu verwenden, um ein Zertifikat zu erhalten, da das Webroot-Plugin damit funktioniert so ziemlich jeder Webserver und wir müssen das Zertifikat nicht auf dem Webserver installieren.
Zuerst müssen Sie einen virtuellen Host für vpn.example.com erstellen.
Apache
Wenn Sie Apache verwenden, dann
sudo nano /etc/apache2/sites-available/vpn.example.com.conf
Und fügen Sie die folgenden Zeilen in die Datei ein.
<VirtualHost *:80> ServerName vpn.example.com DocumentRoot /var/www/vpn.example.com </VirtualHost>
Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.
sudo mkdir /var/www/vpn.example.com
Legen Sie www-data (Apache-Benutzer) als Eigentümer des Webstammverzeichnisses fest.
sudo chown www-data:www-data /var/www/vpn.example.com -R
Aktivieren Sie diesen virtuellen Host.
sudo a2ensite vpn.example.com
Laden Sie Apache neu, damit die Änderungen wirksam werden.
sudo systemctl reload apache2
Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das Let’s Encrypt-Zertifikat mit dem Webroot-Plugin zu erhalten.
sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
Nginx
Wenn Sie Nginx verwenden, dann
sudo nano /etc/nginx/conf.d/vpn.example.com.conf
Fügen Sie die folgenden Zeilen in die Datei ein.
server { listen 80; server_name vpn.example.com; root /var/www/vpn.example.com/; location ~ /.well-known/acme-challenge { allow all; } }
Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.
sudo mkdir -p /var/www/vpn.example.com
Legen Sie www-data (Nginx-Benutzer) als Eigentümer des Webstamms fest.
sudo chown www-data:www-data /var/www/vpn.example.com -R
Laden Sie Nginx neu, damit die Änderungen wirksam werden.
sudo systemctl reload nginx
Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das Let’s Encrypt-Zertifikat mit dem Webroot-Plugin zu erhalten.
sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
Schritt 4:OpenConnect VPN-Serverkonfigurationsdatei bearbeiten
ocserv-Konfigurationsdatei bearbeiten.
sudo nano /etc/ocserv/ocserv.conf
Konfigurieren Sie zunächst die Kennwortauthentifizierung. Standardmäßig ist die Passwortauthentifizierung über PAM (Pluggable Authentication Modules) aktiviert, wodurch Sie Ubuntu-Systemkonten verwenden können, um sich von VPN-Clients anzumelden. Dieses Verhalten kann durch Auskommentieren der folgenden Zeile deaktiviert werden.
auth = "pam[gid-min=1000]"
Wenn wir möchten, dass Benutzer separate VPN-Konten anstelle von Systemkonten verwenden, um sich anzumelden, müssen wir die folgende Zeile hinzufügen, um die Passwortauthentifizierung mit einer Passwortdatei zu aktivieren.
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
Nachdem Sie diese Konfigurationsdatei bearbeitet haben, werden wir sehen, wie Sie ocpasswd
verwenden Tool zum Generieren von /etc/ocserv/ocpasswd
Datei, die eine Liste mit Benutzernamen und verschlüsselten Passwörtern enthält.
Hinweis :Ocserv unterstützt Client-Zertifikat-Authentifizierung, aber Let’s Encrypt stellt kein Client-Zertifikat aus. Sie müssen Ihre eigene Zertifizierungsstelle einrichten, um das Client-Zertifikat auszustellen.
Wenn Sie nicht möchten, dass ocserv TCP- und UDP-Port 443 verwendet, suchen Sie als Nächstes die folgenden zwei Zeilen und ändern Sie die Portnummer. Ansonsten lass sie in Ruhe.
tcp-port = 443 udp-port = 443
Suchen Sie dann die folgenden zwei Zeilen. Wir müssen sie ändern.
server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem server-key = /etc/ssl/private/ssl-cert-snakeoil.key
Ersetzen Sie die Standardeinstellung durch den Pfad des Let’s Encrypt-Serverzertifikats und der Serverschlüsseldatei.
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
Stellen Sie dann die maximale Anzahl von Clients ein. Der Standardwert ist 16. Für unbegrenzt auf Null gesetzt.
max-clients = 16
Legen Sie die Anzahl der Geräte fest, von denen sich ein Benutzer gleichzeitig anmelden kann. Der Standardwert ist 2. Für unbegrenzt auf Null gesetzt.
max-same-clients = 2
Suchen Sie als Nächstes die folgende Zeile. Ändern Sie false
auf true
um die MTU-Erkennung zu aktivieren, wodurch die VPN-Leistung optimiert werden kann.
try-mtu-discovery = false
Legen Sie danach die Standarddomäne auf vpn.example.com fest.
default-domain = vpn.example.com
Die IPv4-Netzwerkkonfiguration ist standardmäßig wie folgt. Dies führt zu Problemen, da die meisten Heimrouter auch den IPv4-Netzwerkbereich auf 192.168.1.0/24
setzen .
ipv4-network = 192.168.1.0 ipv4-netmask = 255.255.255.0
Wir können einen anderen privaten IP-Adressbereich (10.10.10.0/24) verwenden, um eine IP-Adresskollision zu vermeiden, also ändern Sie den Wert von ipv4-network
zu
ipv4-network = 10.10.10.0
Entkommentieren Sie nun die folgende Zeile, um alle DNS-Anfragen über das VPN zu tunneln.
tunnel-all-dns = true
Ändern Sie die DNS-Resolver-Adresse. Sie können den öffentlichen DNS-Server von Google verwenden.
dns = 8.8.8.8
Hinweis :Es empfiehlt sich, einen eigenen DNS-Resolver auf demselben Server auszuführen, insbesondere wenn Sie ein VPN-Anbieter sind. Wenn auf demselben Server ein DNS-Resolver ausgeführt wird, geben Sie den DNS als
andns = 10.10.10.1
10.10.10.1 ist die IP-Adresse des OpenConnect VPN-Servers im VPN-LAN. Dadurch wird die DNS-Suche für Clients ein wenig beschleunigt, da die Netzwerklatenz zwischen dem VPN-Server und dem DNS-Resolver eliminiert wird.
Kommentieren Sie dann alle Routenparameter aus (fügen Sie ein #-Symbol am Anfang der folgenden vier Zeilen hinzu), wodurch der Server als Standard-Gateway für die Clients festgelegt wird.
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
Speichern und schließen Sie die Datei. Starten Sie dann den VPN-Server neu, damit die Änderungen wirksam werden.
sudo systemctl restart ocserv
Schritt 5:DTLS-Handshake-Fehler beheben
Unter Ubuntu 16.04 und Ubuntu 18.04 ocserv-Daemon ocserv.socket
respektiert den „Listen-Host“-Wert aus der Konfigurationsdatei nicht, was den folgenden Fehler verursacht, wenn sich Clients mit dem VPN-Server verbinden.
DTLS handshake failed: Resource temporarily unavailable, try again.
Um diesen Fehler zu beheben, müssen wir die Datei ocserv.service bearbeiten. Wir kopieren zunächst die Originaldatei in /lib/systemd/system/
Verzeichnis nach /etc/systemd/system/
Verzeichnis, und bearbeiten Sie es dann, da wir nicht möchten, dass die neue Version des ocserv-Pakets unsere Änderungen überschreibt. (Um mehr über systemd-Unit-Dateien zu erfahren, führen Sie man systemd.unit
aus .)
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service sudo nano /etc/systemd/system/ocserv.service
Kommentieren Sie die folgenden zwei Zeilen aus.
Requires=ocserv.socket Also=ocserv.socket
Speichern und schließen Sie die Datei. Laden Sie dann systemd neu
sudo systemctl daemon-reload
Beenden Sie ocserv.socket und deaktivieren Sie es.
sudo systemctl stop ocserv.socket sudo systemctl disable ocserv.socket
ocserv-Dienst neu starten.
sudo systemctl restart ocserv.service
Der systemd-Dienst ocserv gibt keine Meldung aus, wenn er nicht neu gestartet werden kann, daher müssen wir den Status überprüfen, um sicherzustellen, dass er tatsächlich ausgeführt wird.
systemctl status ocserv
Schritt 6:Erstellen von VPN-Konten
Verwenden Sie nun das Tool ocpasswd, um VPN-Konten zu generieren.
sudo ocpasswd -c /etc/ocserv/ocpasswd username
Sie werden aufgefordert, ein Passwort für den Benutzer festzulegen, und die Informationen werden unter /etc/ocserv/ocpasswd
gespeichert Datei. Um das Passwort zurückzusetzen, führen Sie einfach den obigen Befehl erneut aus.
Schritt 7:IP-Weiterleitung aktivieren
Damit der VPN-Server Pakete zwischen dem VPN-Client und der Außenwelt weiterleiten kann, müssen wir die IP-Weiterleitung aktivieren. Bearbeiten Sie sysctl.conf
Datei.
sudo nano /etc/sysctl.conf
Fügen Sie am Ende dieser Datei die folgende Zeile hinzu.
net.ipv4.ip_forward = 1
Speichern und schließen Sie die Datei. Wenden Sie dann die Änderungen mit dem folgenden Befehl an. Das -p Option lädt Sysctl-Einstellungen aus /etc/sysctl.conf Datei. Dieser Befehl behält unsere Änderungen über Systemneustarts hinweg bei.
sudo sysctl -p
Schritt 8:Firewall für IP-Masquerading konfigurieren
Wir müssen IP-Masquerading in der Server-Firewall einrichten, damit der Server zu einem virtuellen Router für VPN-Clients wird. Ich werde UFW verwenden, das ein Frontend für die iptables-Firewall ist. Installieren Sie UFW unter Ubuntu mit:
sudo apt install ufw
Zuerst müssen Sie den SSH-Verkehr zulassen.
sudo ufw allow 22/tcp
Suchen Sie als Nächstes den Namen der Hauptnetzwerkschnittstelle Ihres Servers.
ip addr
Wie Sie sehen können, heißt es ens3
auf meinem Ubuntu-Server.
Um IP-Masquerading zu konfigurieren, müssen wir den iptables-Befehl in eine UFW-Konfigurationsdatei einfügen.
sudo nano /etc/ufw/before.rules
Standardmäßig gibt es einige Regeln für den filter
Tisch. Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu. Ersetzen Sie ens3
mit Ihrem eigenen Netzwerkschnittstellennamen.
# 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
Im Nano-Texteditor können Sie zum Ende der Datei gehen, indem Sie Ctrl+W
drücken , und drücken Sie dann Ctrl+V
.
Die obigen Zeilen werden angehängt (-A ) eine Regel am Ende von POSTROUTING Kette von nat Tisch. Es verbindet Ihr virtuelles privates Netzwerk mit dem Internet. Und verstecken Sie auch Ihr Netzwerk vor der Außenwelt. Das Internet kann also nur die IP Ihres VPN-Servers sehen, aber nicht die IP Ihres VPN-Clients, genau wie Ihr Heimrouter Ihr privates Heimnetzwerk verbirgt.
Standardmäßig verbietet UFW die Paketweiterleitung. Wir können die Weiterleitung für unser privates Netzwerk zulassen. Suchen Sie den ufw-before-forward
Kette in dieser Datei und fügen Sie die folgenden 3 Zeilen hinzu, die die Paketweiterleitung akzeptieren, wenn die Quell-IP oder Ziel-IP in 10.10.10.0/24
ist Reichweite.
# 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
Speichern und schließen Sie die Datei. Aktivieren Sie dann UFW.
sudo ufw enable
Wenn Sie UFW zuvor aktiviert haben, können Sie systemctl verwenden, um UFW neu zu starten.
sudo systemctl restart ufw
Wenn Sie nun die Regeln in der POSTROUTING-Kette der NAT-Tabelle auflisten, indem Sie den folgenden Befehl verwenden:
sudo iptables -t nat -L POSTROUTING
Sie können die Maskerade-Regel sehen.
Schritt 9:Öffnen Sie Port 443 in der Firewall
Führen Sie den folgenden Befehl aus, um TCP- und UDP-Port 443 zu öffnen. Wenn Sie einen anderen Port für ocserv konfiguriert haben, ändern Sie 443 in Ihren konfigurierten Port.
sudo ufw allow 443/tcp sudo ufw allow 443/udp
Jetzt ist der OpenConnect VPN-Server bereit, Client-Verbindungen zu akzeptieren.
Wenn Sie 10.10.10.1 als DNS-Server für VPN-Clients angegeben haben, müssen Sie VPN-Clients mit der folgenden UFW-Regel erlauben, sich mit Port 53 zu verbinden.
sudo ufw insert 1 allow in from 10.10.10.0/24
Sie müssen auch die Konfiguration des BIND-DNS-Servers bearbeiten, damit VPN-Clients rekursive DNS-Abfragen wie unten senden können.
allow-recursion { 127.0.0.1; 10.10.10.0/24; };
So installieren und verwenden Sie den OpenConnect VPN-Client auf Ubuntu 16.04/18.04 Desktop
Führen Sie den folgenden Befehl aus, um den OpenConnect VPN-Befehlszeilenclient auf dem Ubuntu-Desktop zu installieren.
sudo apt install openconnect
Sie können sich wie unten über die Befehlszeile mit VPN verbinden. -b
Flag lässt es im Hintergrund laufen, nachdem die Verbindung hergestellt wurde.
sudo openconnect -b vpn.example.com:port-number
Sie werden aufgefordert, den VPN-Benutzernamen und das Passwort einzugeben. Wenn die Verbindung erfolgreich hergestellt wurde, sehen Sie die folgende Meldung.
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).
Um die Verbindung zu beenden, führen Sie Folgendes aus:
sudo pkill openconnect
Verwenden Sie die folgende Syntax, um den Client nicht interaktiv auszuführen.
echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin
Wenn Sie Network Manager zum Verwalten der VPN-Verbindung verwenden möchten, müssen Sie auch diese Pakete installieren.
sudo apt install network-manager-openconnect network-manager-openconnect-gnome
Wenn Sie erfolgreich mit dem VPN-Server verbunden sind, sich Ihre öffentliche IP-Adresse jedoch nicht ändert, liegt das daran, dass die IP-Weiterleitung oder das IP-Masquerading nicht funktioniert. Ich hatte einmal einen Tippfehler in meinem iptables-Befehl, der dazu führte, dass mein Computer nicht im Internet surfen konnte.
Automatische Verbindung beim Systemstart
Damit sich der OpenConnect VPN-Client beim Booten automatisch mit dem Server verbindet, können wir eine systemd-Diensteinheit erstellen.
sudo nano /etc/systemd/system/openconnect.service
Fügen Sie die folgenden Zeilen in die Datei ein. Ersetzen Sie den roten Text.
[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
Speichern und schließen Sie die Datei. Aktivieren Sie dann diesen Dienst, damit er beim Booten gestartet wird.
sudo systemctl enable openconnect.service
Erläuterung des Dateiinhalts:
After=network-online.target systemd-resolved.service
undWants=network-online.target
Lassen Sie diesen Dienst laufen, nachdem das Netzwerk hochgefahren ist. Wir wollen denopenconnect.service
nach demsystemd-resolved.service
starten denn dadurch wird sichergestellt, dass die von OpenConnect festgelegte DNS-Serveradresse nicht vonsystemd-resolved.service
überschrieben wird .- Tatsächlich kann dieser Dienst noch ausgeführt werden, bevor das Netzwerk hochgefahren ist. Wir fügen
Restart=always
hinzu undRestartSec=2
um diesen Dienst nach 2 Sekunden neu zu starten, wenn dieser Dienst fehlschlägt. - Systemd erkennt keine Pipe-Umleitung, also im
ExecStart
Direktive setzen wir den Befehl in einfache Anführungszeichen und führen ihn mit der Bash-Shell aus. - Da der OpenConnect VPN-Client als systemd-Dienst ausgeführt wird, der im Hintergrund ausgeführt wird, muss
-b
nicht hinzugefügt werden Flag zumopenconnect
Befehl. - Der ExecStop Direktive dient zum Stoppen der VPN-Verbindung. Zuerst verwenden wir
resolvconf
Befehl zum Zurücksetzen der DNS-Servereinstellungen. tun0 ist der Standardname für das TUN-Gerät, den Sie mitip link
sehen können Befehl. Dann verwenden wirpkill
Befehl zum Stoppen vonopenconenct
Prozess. Zuletzt stellen wir die Linux-Kernel-Routing-Tabelle mit demip route flush
wieder her Befehl. Ersetzen Sie12.34.56.78
mit der IP-Adresse Ihres VPN-Servers.
Um diesen Systemd-Dienst sofort zu starten, führen Sie
aussudo systemctl start openconnect
Um diesen Systemd-Dienst zu stoppen, führen Sie
aussudo systemctl stop openconnect
Automatischer Neustart bei Unterbrechung der VPN-Verbindung
Manchmal brach die VPN-Verbindung aus verschiedenen Gründen ab. Um den VPN-Client automatisch neu zu starten, bearbeiten Sie die crontab-Datei des Root-Benutzers.
sudo crontab -e
Fügen Sie am Ende dieser Datei die folgende Zeile hinzu.
* * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect
Dieser Cron-Job wird jede Minute ausgeführt, um zu prüfen, ob der VPN-Client die private IP-Adresse des VPN-Servers (10.10.10.1) anpingen kann. Wenn der Ping nicht erfolgreich ist, wird der Befehl rechts ausgeführt, um den VPN-Client neu zu starten. ||
ist der ODER-Operator in Bash. Es führt den Befehl auf der rechten Seite nur aus, wenn der Befehl auf der linken Seite einen Fehler zurückgegeben hat.
Speichern und schließen Sie die Datei.
OpenConnect GUI-Client für Windows und MacOS
Sie können von der OpenConnect-GUI-Github-Seite heruntergeladen werden.
Geschwindigkeit
OpenConnect VPN ist ziemlich schnell. Ich kann es verwenden, um 4k-Videos auf YouTube anzusehen. Wie Sie sehen können, beträgt die Verbindungsgeschwindigkeit 63356 Kbps , was übersetzt 61 Mbit/s bedeutet .
Und hier sind die Testergebnisse auf speedtest.net.
Geschwindigkeitsoptimierung
OpenConnect verwendet standardmäßig das TLS-über-UDP-Protokoll (DTLS), um eine höhere Geschwindigkeit zu erreichen, aber UDP kann keine zuverlässige Übertragung bieten. TCP ist langsamer als UDP, kann aber eine zuverlässige Übertragung bieten. Ein Optimierungstipp, den ich Ihnen geben kann, ist, DTLS zu deaktivieren, Standard-TLS (über TCP) zu verwenden und dann TCP BBR zu aktivieren, um die TCP-Geschwindigkeit zu erhöhen.
Um DTLS zu deaktivieren, kommentieren Sie die folgende Zeile in der ocserv-Konfigurationsdatei aus (fügen Sie ein #-Symbol am Anfang hinzu).
udp-port = 443
Speichern und schließen Sie die Datei. Starten Sie dann den ocserv-Dienst neu.
sudo systemctl restart ocserv.service
Um TCP BBR zu aktivieren, sehen Sie sich bitte das folgende Tutorial an.
- So steigern Sie die Ubuntu-Netzwerkleistung ganz einfach, indem Sie TCP BBR aktivieren
In meinem Test ist Standard-TLS mit aktiviertem TCP BBR doppelt so schnell wie DTLS.
Let’s Encrypt-Zertifikat automatisch erneuern
Crontab-Datei des Root-Benutzers bearbeiten.
sudo crontab -e
Fügen Sie die folgende Zeile am Ende der Datei hinzu. Der ocserv-Dienst muss neu gestartet werden, damit der VPN-Server das neue Zertifikat und die Schlüsseldatei abholen kann.
@daily certbot renew --quiet && systemctl restart ocserv
Tipps zur Fehlerbehebung
Beachten Sie, dass Sie bei Verwendung von OpenVZ VPS sicherstellen, dass Sie das virtuelle TUN-Netzwerkgerät in der VPS-Systemsteuerung aktivieren.
Wenn Sie auf ein Problem stoßen, überprüfen Sie das OpenConnect VPN-Serverprotokoll.
sudo journalctl -xe -u ocserv.service
Ich habe festgestellt, dass die große Firewall von China diese VPN-Verbindung blockiert, wenn ich Port 443 auf einen anderen Port ändere.
Wenn ocserv Ihnen mitteilt, dass /etc/ocserv/ocserv.conf
nicht geladen werden kann Datei, können Sie ocserv stoppen.
sudo systemctl stop ocserv
Führen Sie es dann im Vordergrund mit aktiviertem Debugging aus.
sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10
Dann könnte Ihnen die Ausgabe einige Hinweise geben, warum ocserv nicht funktioniert.
Lassen Sie OpenConnect VPN-Server und Webserver gleichzeitig Port 443 verwenden
Bitte lesen Sie den folgenden Artikel:
- Führen Sie OpenConnect VPN Server und Apache/Nginx auf derselben Box mit HAProxy aus
So deaktivieren Sie TLS 1.0 und TLS 1.1 in ocserv
Das PCI Council hat TLS 1.0 am 30. Juni 2018 als veraltet markiert und Mainstream-Webbrowser werden TLS 1.0 und TLS 1.1 im Jahr 2020 deaktivieren. Wir sollten dasselbe mit dem VPN-Server tun. Bearbeiten Sie die Hauptkonfigurationsdatei.
sudo nano /etc/ocserv/ocserv.conf
Suchen Sie die folgende Zeile:
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
Um TLS 1.0 und TLS 1.1 auf dem OpenConnect VPN-Server zu deaktivieren, fügen Sie einfach -VERS-TLS1.0
hinzu und -VERS-TLS1.1
in der Zeile.
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"
Speichern und schließen Sie die Datei. Starten Sie dann ocserv neu.
sudo systemctl restart ocserv
Jetzt akzeptiert ocserv nur noch TLS 1.2. Weitere Informationen zum Konfigurieren des TLS-Parameters in ocserv finden Sie unter GnuTLS-Prioritätszeichenfolgen.
Um zu überprüfen, ob TLS 1.0 von Ihrem OpenConnect VPN-Server unterstützt wird, führen Sie den folgenden Befehl aus.
openssl s_client -connect vpn.your-domain.com:443 -tls1
Und überprüfen Sie TLS 1.1
openssl s_client -connect vpn.your-domain.com:443 -tls1_1
Wenn Sie die folgende Meldung in der Ausgabe sehen, bedeutet dies, dass die TLS-Version nicht unterstützt wird.
New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported
Ich habe versucht, TLS 1.3 zu aktivieren, aber es wird noch nicht im ocserv-Paket auf Ubuntu unterstützt.
Konfiguration pro Benutzer oder pro Gruppe
Ocserv erlaubt pro Benutzer und pro Gruppe Konfigurationen. Um diese Funktion zu aktivieren, kommentieren Sie die folgenden zwei Zeilen in /etc/ocserv/ocserv.conf
aus Datei.
config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/
Speichern und schließen Sie die Datei. Erstellen Sie dann das Konfigurationsverzeichnis pro Benutzer und pro Gruppe.
sudo mkdir /etc/ocserv/config-per-user/ sudo mkdir /etc/ocserv/config-per-group/
Als nächstes können Sie eine Datei unter diesen beiden Verzeichnissen erstellen. Erstellen Sie beispielsweise user1
Datei, um eine benutzerdefinierte Konfiguration für user1
zu ermöglichen .
sudo nano /etc/ocserv/config-per-user/user1
Sie können auch die group1
erstellen Datei, um eine benutzerdefinierte Konfiguration für die Gruppe mit dem Namen group1
zu ermöglichen .
sudo nano /etc/ocserv/config-per-group/group1
Sie können etwas wie unten in der Datei hinzufügen.
route = 10.10.10.0/255.255.255.0
Das bedeutet, dass nach user1
Verbinden Sie sich mit diesem VPN-Server, nur Datenverkehr zum 10.10.10.0/24
Netzwerk wird über VPN-Server geroutet. Datenverkehr zu anderen IP-Adressen wird über das ursprüngliche Gateway geleitet. Ich benutze diesen Trick, um meinem anderen VPS (Virtual Private Server) zu erlauben, sich mit diesem VPN-Server zu verbinden, ohne den normalen Datenverkehr zu unterbrechen, sodass das tun-Gerät (vpns0) meines VPN-Servers immer eingeschaltet ist, was bedeutet, dass mein VPN-Server immer den hat private IP-Adresse 10.10.10.1.
Speichern und schließen Sie die Datei. Starten Sie ocserv neu, damit die Änderungen wirksam werden.
sudo systemctl restart ocserv
Virtuelles Hosting
Um einen neuen virtuellen Host in ocserv hinzuzufügen, müssen Sie zuerst die Methode in Schritt 3 verwenden, um ein TLS-Zertifikat für den neuen virtuellen Host zu erhalten. Bearbeiten Sie dann die ocserv-Konfigurationsdatei.
sudo nano /etc/ocserv/ocserv.conf
Gehen Sie zum Ende dieser Datei. Im Nano-Texteditor können Sie Ctrl+W
drücken , dann Ctrl+V
zum Ende einer Datei springen. Fügen Sie die folgenden Zeilen hinzu. Ersetzen Sie vpn2.example.com
mit dem Hostnamen des zweiten virtuellen Hosts.
[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/
Speichern und schließen Sie die Datei. Starten Sie dann ocserv neu.
sudo systemctl restart ocserv
Bearbeiten Sie die UFW-Konfigurationsdatei.
sudo nano /etc/ufw/before.rules
Suchen Sie den ufw-before-forward
Kette in dieser Datei und fügen Sie die folgenden 2 Zeilen hinzu, die die Paketweiterleitung akzeptieren, wenn die Quell-IP oder Ziel-IP in 10.10.20.0/24
ist Reichweite.
-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT
Speichern und schließen Sie die Datei. Starten Sie dann UFW neu.
sudo systemctl restart ufw
Beachten Sie, dass der ocserv-Daemon Ihnen möglicherweise mitteilt, dass einige Parameter für den virtuellen Host ignoriert werden. Ich habe jedoch festgestellt, dass einige der ignorierten Parameter tatsächlich benötigt werden. Wenn Sie beispielsweise device = vpns
löschen Zeile vom virtuellen Host, tritt möglicherweise der folgende Fehler auf, wenn Sie eine VPN-Verbindung zum virtuellen Host herstellen.
VPN service unavailable; reason: Server configuration error
Und der VPN-Server würde die folgende Fehlermeldung im Protokoll erzeugen.
no networks are configured; rejecting client
Auch beachten dass der AnyConnect VPN-Client auf iOS TLS SNI nicht unterstützt, sodass sich iOS-Benutzer mit dem standardmäßigen virtuellen Host verbinden.
Wie man mehrere Instanzen von ocserv ausführt
Ein ocserv-Prozess kann sich nur an einen TCP- oder UDP-Port auf Ihrem Server binden. Wenn Sie ocserv erlauben möchten, sich an mehrere TCP- oder UDP-Ports zu binden, müssen Sie mehrere ocserv-Prozesse ausführen. Es ist sehr einfach. Kopieren Sie /lib/systemd/system/ocserv.service
in eine neue Datei.
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service
Bearbeiten Sie dann die neue Datei.
sudo nano /etc/systemd/system/ocserv2.service
Ändern
/etc/ocserv/ocserv.conf
zu
/etc/ocserv/ocserv2.conf
Save and close the file. Next, you can edit the /etc/ocserv/ocserv2.conf
file and add your custom configurations. Once you are done, start the second ocserv service.
sudo systemctl start ocserv2