Tento tutoriál vám ukáže, jak instalovat server OpenConnect VPN na Ubuntu 16.04/18.04 . OpenConnect VPN server, neboli ocserv , je open-source implementace protokolu Cisco AnyConnnect VPN, který je oblíbený mezi podniky a univerzitami. AnyConnect je protokol VPN založený na SSL, který umožňuje jednotlivým uživatelům připojit se ke vzdálené síti.
Vlastnosti OpenConnect VPN serveru:
- Lehký a rychlý. V mém testu mohu sledovat YouTube ve 4k s OpenConnect VPN. YouTube je v mé zemi blokován.
- Kompatibilní s klientem Cisco AnyConnect
- Podporuje ověřování heslem a ověřování certifikátů
- Snadné nastavení
Zvláště se mi líbí skutečnost, že ve srovnání s jinými technologiemi VPN je pro koncového uživatele velmi snadné a pohodlné používat OpenConnect VPN. Kdykoli si na svůj počítač nainstaluji distribuci Linuxu založené na Debianu a chci rychle odblokovat webové stránky nebo skrýt svou IP adresu, nainstaluji si klienta OpenConnect a připojím se k serveru pomocí pouhých dvou řádků příkazů:
sudo apt install openconnectsudo openconnect -b vpn.mydomain.com
gnutls-bin
softwarový balíček poskytuje nástroje k vytvoření vlastní CA a certifikátu serveru, ale my získáme a nainstalujeme certifikát Let’s Encrypt. Výhodou použití certifikátu Let’s Encrypt je, že je zdarma, snáze se nastavuje a je důvěryhodný pro klientský software VPN.
Požadavky
Abyste mohli postupovat podle tohoto návodu, budete potřebovat VPS (virtuální privátní server), který může volně přistupovat k blokovaným webovým stránkám (mimo vaši zemi nebo systém filtrování internetu). Doporučuji Kamatera VPS, která obsahuje:
- 30denní bezplatná zkušební verze.
- Začíná na 4 USD měsíčně (1 GB RAM)
- Vysoce výkonný VPS založený na KVM
- 9 datových center po celém světě, včetně Spojených států, Kanady, Spojeného království, Německa, Nizozemska, Hong Kongu a Isrealu.
Podle níže uvedeného návodu vytvořte svůj Linux VPS server na Kamatera.
- Jak vytvořit Linux VPS server na Kamateře
Jakmile budete mít VPS se systémem Ubuntu 18.04, postupujte podle pokynů níže.
K aktivaci HTTPS pro OpenConnect VPN potřebujete také název domény. Zaregistroval jsem své doménové jméno od NameCheap, protože cena je nízká a poskytují ochranu soukromí whois doživotně zdarma.
Krok 1:Instalace OpenConnect VPN serveru na Ubuntu 16.04/18.04
Přihlaste se na svůj server Ubuntu 16.04/18.04. Poté použijte apt
k instalaci ocserv
balíček, který je součástí úložiště Ubuntu od 16.04.
sudo apt install ocserv
Po instalaci se server OpenConnect VPN automaticky spustí. Jeho stav můžete zkontrolovat pomocí:
systemctl status ocserv
Ukázkový výstup:
● ocserv.service - OpenConnect SSL VPN server Načteno:načteno (/lib/systemd/system/ocserv.service; povoleno; přednastaveno dodavatelem:povoleno Aktivní:aktivní (běží) od čt 2017-11-30 05:45:07 UTC; před 11s Dokumenty:muž:ocserv(8) Hlavní PID:19235 (ocserv-main) CGroup:/system.slice/ocserv.service ├─19235 ocserv-main └─19242 ocserv-secm
Pokud neběží, můžete jej spustit pomocí:
sudo systemctl start ocserv
Server OpenConnect VPN ve výchozím nastavení naslouchá na portu TCP a UDP 443. Pokud jej používá webový server, server VPN nelze spustit. Později uvidíme, jak změnit port v konfiguračním souboru OpenConnect VPN.
Krok 2:Instalace klienta Let’s Encrypt Client (Certbot) na server Ubuntu 16.04/18.04
Spuštěním následujících příkazů nainstalujte nejnovější verzi certbota z oficiálního PPA. software-properties-common je vyžadováno, pokud chcete instalovat balíčky z PPA. Na vašem serveru Ubuntu může chybět.
sudo apt install software-properties-commonsudo add-apt-repository ppa:certbot/certbotsudo apt updatesudo apt install certbot
Chcete-li zkontrolovat číslo verze, spusťte
certbot --version
Ukázkový výstup:
certbot 0.31.0
Krok 3:Získání certifikátu TLS od Let’s Encrypt
Samostatný plugin
Pokud na vašem serveru Ubuntu 16.04/18.04 neběží žádný webový server a chcete, aby server OpenConnect VPN používal port 443, můžete pomocí samostatného pluginu získat certifikát TLS z Let’s Encrypt. Spusťte následující příkaz. Nezapomeňte pro název své domény nastavit záznam.
sudo certbot zcela jistě --standalone --preferred-challenges http --agree-tos --email your-e-mail-adresa -d vpn.example.com
Vysvětlení:
certonly
:Získejte certifikát, ale neinstalujte jej.--standalone
:K získání certifikátu použijte samostatný plugin--preferred-challenges http
:Proveďte výzvu http-01 k ověření naší domény, která bude používat port 80. Ve výchozím nastavení bude samostatný plugin provádět výzvu tls-sni, která používá port 443. Protože port 443 již server OpenConnect VPN používá, musíme změnit výchozí chování.--agree-tos
:Souhlasíte s podmínkami služby Let’s Encrypt.--email
:E-mailová adresa se používá pro registraci a obnovení účtu.-d
:Zadejte název své domény.
Jak můžete vidět na následujícím snímku obrazovky, úspěšně jsem získal certifikát.
Použití pluginu webroot
Pokud má váš server Ubuntu 16.04/18.04 webový server naslouchající na portech 80 a 443 a chcete, aby server OpenConnect VPN používal jiný port, pak je dobré použít plugin webroot k získání certifikátu, protože plugin webroot funguje s téměř každý webový server a nepotřebujeme instalovat certifikát na webový server.
Nejprve musíte vytvořit virtuálního hostitele pro vpn.example.com.
Apache
Pokud používáte Apache, pak
sudo nano /etc/apache2/sites-available/vpn.example.com.conf
A vložte do souboru následující řádky.
ServerName vpn.example.com DocumentRoot /var/www/vpn.example.com
Uložte a zavřete soubor. Poté vytvořte kořenový webový adresář.
sudo mkdir /var/www/vpn.example.com
Nastavte www-data (uživatel Apache) jako vlastníka webového kořenového adresáře.
sudo chown www-data:www-data /var/www/vpn.example.com -R
Povolit tohoto virtuálního hostitele.
sudo a2ensite vpn.example.com
Znovu načtěte Apache, aby se změny projevily.
sudo systemctl reload apache2
Jakmile je virtuální hostitel vytvořen a povolen, spusťte následující příkaz a získejte certifikát Let’s Encrypt pomocí pluginu webroot.
sudo certbot zcela jistě --webroot --agree-tos -- pošlete e-mail na vaši e-mailovou adresu -d vpn.example.com -w /var/www/vpn.example.com
Nginx
Pokud používáte Nginx, pak
sudo nano /etc/nginx/conf.d/vpn.example.com.conf
Vložte následující řádky do souboru.
server { poslouchat 80; název_serveru vpn.example.com; root /var/www/vpn.example.com/; umístění ~ /.well-known/acme-challenge { povolit vše; }}
Uložte a zavřete soubor. Poté vytvořte kořenový webový adresář.
sudo mkdir -p /var/www/vpn.example.com
Nastavte www-data (uživatel Nginx) jako vlastníka webového kořenového adresáře.
sudo chown www-data:www-data /var/www/vpn.example.com -R
Znovu načtěte Nginx, aby se změny projevily.
sudo systemctl reload nginx
Jakmile je virtuální hostitel vytvořen a povolen, spusťte následující příkaz a získejte certifikát Let’s Encrypt pomocí pluginu webroot.
sudo certbot zcela jistě --webroot --agree-tos -- pošlete e-mail na vaši e-mailovou adresu -d vpn.example.com -w /var/www/vpn.example.com
Krok 4:Úprava konfiguračního souboru OpenConnect VPN Server
Upravte konfigurační soubor ocserv.
sudo nano /etc/ocserv/ocserv.conf
Nejprve nakonfigurujte ověřování heslem. Ve výchozím nastavení je povoleno ověřování heslem prostřednictvím PAM (Pluggable Authentication Modules), což vám umožňuje používat systémové účty Ubuntu pro přihlášení z klientů VPN. Toto chování lze zakázat komentářem na následujícím řádku.
auth ="pam[gid-min=1000]"
Pokud chceme, aby uživatelé k přihlašování používali samostatné účty VPN místo systémových účtů, musíme přidat následující řádek, abychom povolili ověřování heslem pomocí souboru s hesly.
auth ="plain[passwd=/etc/ocserv/ocpasswd]"
Po dokončení úprav tohoto konfiguračního souboru uvidíme, jak používat ocpasswd
nástroj pro generování /etc/ocserv/ocpasswd
soubor, který obsahuje seznam uživatelských jmen a zakódovaných hesel.
Poznámka :Ocserv podporuje ověřování klientského certifikátu, ale Let’s Encrypt nevydává klientský certifikát. Chcete-li vydávat klientský certifikát, musíte si nastavit vlastní CA.
Dále, pokud nechcete, aby ocserv používal TCP a UDP port 443, najděte následující dva řádky a změňte číslo portu. Jinak je nechte na pokoji.
tcp-port =443udp-port =443
Pak najděte následující dva řádky. Musíme je změnit.
server-cert =/etc/ssl/certs/ssl-cert-snakeoil.pemserver-key =/etc/ssl/private/ssl-cert-snakeoil.key
Nahraďte výchozí nastavení cestou certifikátu serveru Let’s Encrypt a souboru klíče serveru.
server-cert =/etc/letsencrypt/live/vpn.example.com/fullchain.pemserver-key =/etc/letsencrypt/live/vpn.example.com/privkey.pem
Poté nastavte maximální počet klientů. Výchozí hodnota je 16. Nastavte na nulu pro neomezené.
maximální počet klientů =16
Nastavte počet zařízení, ze kterých se může uživatel současně přihlásit. Výchozí hodnota je 2. Nastavte na nulu pro neomezené.
max-same-clients =2
Dále najděte následující řádek. Změňte false
true
povolit zjišťování MTU, které může optimalizovat výkon VPN.
try-mtu-discovery =false
Poté nastavte výchozí doménu na vpn.example.com.
výchozí-doména =vpn.example.com
Konfigurace sítě IPv4 je ve výchozím nastavení následující. To způsobí problémy, protože většina domácích směrovačů také nastavuje rozsah sítě IPv4 na 192.168.1.0/24
.
ipv4-network =192.168.1.0ipv4-netmask =255.255.255.0
Můžeme použít jiný rozsah soukromých IP adres (10.10.10.0/24), abychom zabránili kolizi IP adres, takže změňte hodnotu ipv4-network
do
ipv4-network =10.10.10.0
Nyní odkomentujte následující řádek, abyste tunelovali všechny DNS dotazy přes VPN.
tunnel-all-dns =true
Změňte adresu DNS resolveru. Můžete použít veřejný server DNS společnosti Google.
dns =8.8.8.8
Poznámka :Je dobrým zvykem provozovat svůj vlastní DNS resolver na stejném serveru, zvláště pokud jste poskytovatelem VPN. Pokud na stejném serveru běží překladač DNS, zadejte DNS jako
dns =10.10.10.1
10.10.10.1 je IP adresa OpenConnect VPN serveru ve VPN LAN. Klientům to trochu urychlí vyhledávání DNS, protože je eliminována latence sítě mezi serverem VPN a překladačem DNS.
Poté zakomentujte všechny parametry trasy (na začátek následujících čtyř řádků přidejte symbol #), což nastaví server jako výchozí bránu pro klienty.
trasa =10.10.10.0/255.255.255.0trasa =192.168.0.0/255.255.0.0trasa =fef4:db8:1000:1001::/64no-route =192.255/258.5.5.Uložte a zavřete soubor Potom restartujte server VPN, aby se změny projevily.
sudo systemctl restart ocservKrok 5:Oprava selhání DTLS handshake
Na Ubuntu 16.04 a Ubuntu 18.04, démon ocserv
ocserv.socket
nerespektuje hodnotu „listen-host“ z konfiguračního souboru, což způsobí následující chybu, když se klienti připojí k serveru VPN.Navázání spojení DTLS se nezdařilo:Zdroj je dočasně nedostupný, zkuste to znovu.Abychom tuto chybu opravili, musíme upravit soubor ocserv.service. Nejprve zkopírujeme původní soubor do
/lib/systemd/system/
adresář do/etc/systemd/system/
adresář, pak jej upravte, protože nechceme, aby nová verze balíčku ocserv přepsala naše úpravy. (Chcete-li se dozvědět více o souborech jednotek systemd, spusťteman systemd.unit
.)sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.servicesudo nano /etc/systemd/system/ocserv.serviceZakomentujte následující dva řádky.
Vyžaduje=ocserv.socketAlso=ocserv.socketUložte a zavřete soubor. Poté znovu načtěte systemd
sudo systemctl daemon-reloadZastavte ocserv.socket a deaktivujte jej.
sudo systemctl stop ocserv.socketsudo systemctl zakázat ocserv.socketRestartujte službu ocserv.
sudo systemctl restart ocserv.serviceSlužba ocserv systemd nevypíše žádnou zprávu, pokud se nepodaří restartovat, takže musíme zkontrolovat stav, abychom se ujistili, že skutečně běží.
systemctl status ocservKrok 6:Vytvoření účtů VPN
Nyní použijte nástroj ocpasswd ke generování účtů VPN.
uživatelské jméno sudo ocpasswd -c /etc/ocserv/ocpasswdBudete požádáni o nastavení hesla pro uživatele a informace budou uloženy do
/etc/ocserv/ocpasswd
soubor. Chcete-li resetovat heslo, jednoduše znovu spusťte výše uvedený příkaz.Krok 7:Povolte přesměrování IP
Aby server VPN směroval pakety mezi klientem VPN a vnějším světem, musíme povolit předávání IP. Upravte
sysctl.conf
soubor.sudo nano /etc/sysctl.confPřidejte následující řádek na konec tohoto souboru.
net.ipv4.ip_forward =1Uložte a zavřete soubor. Poté aplikujte změny pomocí níže uvedeného příkazu. Klávesa -p možnost načte nastavení sysctl z /etc/sysctl.conf soubor. Tento příkaz zachová naše změny po restartování systému.
sudo sysctl -pKrok 8:Konfigurace brány firewall pro maskování IP
Musíme nastavit maskování IP ve firewallu serveru, aby se server stal virtuálním routerem pro klienty VPN. Budu používat UFW, což je frontend k firewallu iptables. Nainstalujte UFW na Ubuntu pomocí:
sudo apt install ufwNejprve musíte povolit provoz SSH.
sudo ufw allow 22/tcpDále najděte název hlavního síťového rozhraní vašeho serveru.
adresa IPJak vidíte, jmenuje se
ens3
na mém serveru Ubuntu.
Abychom nakonfigurovali maskování IP adres, musíme přidat příkaz iptables do konfiguračního souboru UFW.
sudo nano /etc/ufw/before.rulesVe výchozím nastavení existují určitá pravidla pro
filter
stůl. Přidejte následující řádky na konec tohoto souboru. Nahraďteens3
s vaším vlastním názvem síťového rozhraní.# pravidla tabulky NAT*nat:POSTROUTING ACCEPT [0:0]-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE# Ukončete každou tabulku řádkem 'COMMIT', jinak tato pravidla nebudou platit zpracován COMMITV textovém editoru Nano můžete přejít na konec souboru stisknutím
Ctrl+W
a poté stiskněteCtrl+V
.
Výše uvedené řádky se připojí (-A ) pravidlo do konce POSTROUTING řetězec nat stůl. Propojí vaši virtuální privátní síť s internetem. A také skryjte svou síť před vnějším světem. Internet tedy vidí pouze IP vašeho VPN serveru, ale nevidí IP vašeho VPN klienta, stejně jako váš domácí router skrývá vaši soukromou domácí síť.
Ve výchozím nastavení UFW zakazuje předávání paketů. Můžeme povolit přeposílání pro naši privátní síť. Najděte
ufw-before-forward
řetězec v tomto souboru a přidejte následující 3 řádky, které budou akceptovat předávání paketů, pokud je zdrojová IP nebo cílová IP v10.10.10.0/24
rozsah.# povolit přesměrování pro důvěryhodnou síť-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
Uložte a zavřete soubor. Poté povolte UFW.
povolit sudo ufwPokud jste již dříve povolili UFW, můžete k restartování UFW použít systemctl.
sudo systemctl restart ufwPokud nyní vypíšete pravidla v řetězci POSTROUTING tabulky NAT pomocí následujícího příkazu:
sudo iptables -t nat -L POSTROUTINGMůžete vidět pravidlo maškarády.
Krok 9:Otevřete port 443 v bráně firewall
Spuštěním následujícího příkazu otevřete TCP a UDP port 443. Pokud jste pro ocserv nakonfigurovali jiný port, změňte 443 na vámi nakonfigurovaný port.
sudo ufw povolit 443/tcpsudo ufw povolit 443/udpNyní je server OpenConnect VPN připraven přijímat připojení klientů.
Pokud jste zadali 10.10.10.1 jako server DNS pro klienty VPN, musíte klientům VPN povolit připojení k portu 53 pomocí následujícího pravidla UFW.
sudo ufw insert 1 povolit od 10.10.10.0/24Musíte také upravit konfiguraci serveru DNS BIND, aby klienti VPN mohli odesílat rekurzivní dotazy DNS, jak je uvedeno níže.
allow-recursion { 127.0.0.1; 10.10.10.0/24; };Jak nainstalovat a používat OpenConnect VPN klienta na Ubuntu 16.04/18.04 Desktop
Spuštěním následujícího příkazu nainstalujte klienta příkazového řádku OpenConnect VPN na plochu Ubuntu.
sudo apt install openconnectK VPN se můžete připojit z příkazového řádku, jak je uvedeno níže.
-b
flag jej spustí na pozadí po navázání spojení.sudo openconnect -b vpn.example.com:číslo-portuBudete požádáni o zadání uživatelského jména a hesla VPN. Pokud je připojení úspěšně navázáno, zobrazí se následující zpráva.
Mám odpověď CONNECT:HTTP/1.1 200 CONNECTEDCSTP připojeno. DPD 90, Keepalive 32400Connected tun0 jako 192.168.1.139, pomocí SSLEstablished DTLS připojení (pomocí GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).Chcete-li připojení zastavit, spusťte:
sudo pkill openconnectChcete-li klienta spustit neinteraktivně, použijte následující syntaxi.
echo -n heslo | sudo openconnect -b vpn.example.com -u uživatelské jméno --passwd-on-stdinPokud chcete ke správě připojení VPN používat Správce sítě, musíte si tyto balíčky také nainstalovat.
sudo apt install network-manager-openconnect network-manager-openconnect-gnomePokud jste úspěšně připojeni k serveru VPN, ale vaše veřejná IP adresa se nezmění, je to proto, že předávání IP nebo maskování IP nefunguje. Jednou jsem měl v příkazu iptables překlep, kvůli kterému můj počítač nemohl procházet internet.
Automatické připojení při spuštění systému
Abychom umožnili klientovi OpenConnect VPN automaticky se připojit k serveru při bootování, můžeme vytvořit systémovou servisní jednotku.
sudo nano /etc/systemd/system/openconnect.serviceVložte do souboru následující řádky. Nahraďte červený text.
[Jednotka] 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 heslo | /usr/sbin/openconnect vpn.example.com -u uživatelské jméno --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.targetUložte a zavřete soubor. Poté tuto službu povolte, aby se spustila při spouštění.
sudo systemctl povolit openconnect.serviceVysvětlení obsahu souboru:
After=network-online.target systemd-resolved.service
aWants=network-online.target
spustit tuto službu po připojení sítě. Chcemeopenconnect.service
začít posystemd-resolved.service
protože to zajistí, že adresa serveru DNS nastavená pomocí OpenConnect nebude přepsána službousystemd-resolved.service
.- Ve skutečnosti může být tato služba stále spuštěna před připojením sítě. Přidáme
Restart=always
aRestartSec=2
restartovat tuto službu po 2 sekundách, pokud tato služba selže. - Systemd nerozpozná přesměrování potrubí, takže v
ExecStart
příkaz zabalíme do jednoduchých uvozovek a spustíme jej pomocí shellu Bash. - Vzhledem k tomu, že klient OpenConnect VPN poběží jako systémová služba, která běží na pozadí, není třeba přidávat
-b
příznak kopenconnect
příkaz. - ExecStop direktiva je pro zastavení připojení VPN. Nejprve použijeme
resolvconf
příkaz k vrácení nastavení serveru DNS. tun0 je výchozí název pro zařízení TUN, který můžete vidět pomocíip link
příkaz. Potom použijemepkill
příkaz k zastaveníopenconenct
proces. Nakonec obnovíme směrovací tabulku linuxového jádra pomocíip route flush
příkaz. Nahraďte12.34.56.78
s IP adresou vašeho VPN serveru.
Chcete-li okamžitě spustit tuto službu Systemd, spusťte
sudo systemctl start openconnect
Chcete-li zastavit tuto službu Systemd, spusťte
sudo systemctl stop openconnect
Automatický restart při výpadku připojení VPN
Někdy se připojení VPN z různých důvodů přerušilo. Chcete-li, aby se klient VPN automaticky restartoval, upravte soubor crontab uživatele root.
sudo crontab -e
Přidejte následující řádek na konec tohoto souboru.
* * * * * ping -c 10 10.10.10.1> /dev/null || systemctl restartujte openconnect
Tato úloha Cron se bude spouštět každou minutu, aby zkontrolovala, zda klient VPN může pingnout na soukromou IP adresu VPN serveru (10.10.10.1). Pokud je ping neúspěšný, provede se příkaz vpravo pro restart klienta VPN. ||
je operátor OR v Bash. Provede příkaz vpravo pouze v případě, že příkaz vlevo vrátil chybu.
Uložte a zavřete soubor.
Klient GUI OpenConnect pro Windows a MacOS
Lze je stáhnout z OpenConnect GUI stránky Github.
Rychlost
OpenConnect VPN je docela rychlá. Mohu jej použít ke sledování 4k videí na YouTube. Jak vidíte, rychlost připojení je 63356 Kbps , což v překladu znamená 61 Mbit/s .
A zde jsou výsledky testů na speedtest.net.
Optimalizace rychlosti
OpenConnect ve výchozím nastavení používá protokol TLS over UDP (DTLS) k dosažení vyšší rychlosti, ale protokol UDP nemůže zajistit spolehlivý přenos. TCP je pomalejší než UDP, ale může zajistit spolehlivý přenos. Jeden optimalizační tip, který vám mohu dát, je deaktivovat DTLS, použít standardní TLS (přes TCP) a poté povolit TCP BBR pro zvýšení rychlosti TCP.
Chcete-li zakázat DTLS, zakomentujte (na začátek přidejte symbol #) následující řádek v konfiguračním souboru ocserv.
udp-port =443
Uložte a zavřete soubor. Poté restartujte službu ocserv.
sudo systemctl restart ocserv.service
Chcete-li povolit TCP BBR, podívejte se na následující tutoriál.
- Jak snadno zvýšit výkon sítě Ubuntu povolením TCP BBR
V mém testu je standardní TLS s povoleným TCP BBR dvakrát rychlejší než DTLS.
Automaticky obnovit Let's Encrypt Certificate
Upravte soubor crontab uživatele root.
sudo crontab -e
Přidejte následující řádek na konec souboru. Aby server VPN vyzvedl nový soubor certifikátu a klíče, je nutné restartovat službu ocserv.
@daily certbot renew --quiet &&systemctl restart ocserv
Tipy pro odstraňování problémů
Pamatujte, že pokud používáte OpenVZ VPS, ujistěte se, že jste povolili virtuální síťové zařízení TUN v ovládacím panelu VPS.
Pokud narazíte na nějaký problém, zkontrolujte protokol OpenConnect VPN serveru.
sudo journalctl -xe -u ocserv.service
Zjistil jsem, že pokud změním port 443 na jiný port, skvělý čínský firewall zablokuje toto připojení VPN.
Pokud vám ocserv řekne, že nemůže načíst soubor /etc/ocserv/ocserv.conf
soubor, můžete zastavit ocserv.
sudo systemctl stop ocserv
Poté jej spusťte v popředí s povoleným laděním.
sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10
Výstup vám pak může napovědět, proč ocserv nefunguje.
Nechte server OpenConnect VPN a webový server používat port 443 současně
Přečtěte si prosím následující článek:
- Spusťte OpenConnect VPN Server &Apache/Nginx na stejném boxu s HAProxy
Jak zakázat TLS 1.0 a TLS 1.1 v ocserv
Rada PCI ukončila 30. června 2018 podporu TLS 1.0 a hlavní webové prohlížeče deaktivují TLS 1.0 a TLS 1.1 v roce 2020. Totéž bychom měli udělat se serverem VPN. Upravte hlavní konfigurační soubor.
sudo nano /etc/ocserv/ocserv.conf
Najděte následující řádek:
tls-priorities ="NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
Chcete-li zakázat TLS 1.0 a TLS 1.1 na serveru OpenConnect VPN, stačí přidat -VERS-TLS1.0
a -VERS-TLS1.1
v řádku.
tls-priorities ="NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"
Uložte a zavřete soubor. Poté restartujte ocserv.
sudo systemctl restart ocserv
Nyní bude ocserv přijímat pouze TLS 1.2. Další informace o konfiguraci parametru TLS v ocserv naleznete v tématu GnuTLS prioritní řetězce.
Chcete-li zkontrolovat, zda váš server OpenConnect VPN podporuje TLS 1.0, spusťte následující příkaz.
openssl s_client -connect vpn.your-domain.com:443 -tls1
A zkontrolujte TLS 1.1
openssl s_client -connect vpn.your-domain.com:443 -tls1_1
Pokud ve výstupu uvidíte následující zprávu, znamená to, že verze TLS není podporována.
Nové, (ŽÁDNÉ), Šifra je (ŽÁDNÁ) Zabezpečené opětovné vyjednávání NENÍ podporováno
Zkoušel jsem povolit TLS 1.3, ale v balíčku ocserv na Ubuntu to zatím není podporováno.
Konfigurace podle uživatele nebo skupiny
Ocserv umožňuje konfigurace pro uživatele a skupiny. Chcete-li tuto funkci povolit, odkomentujte následující dva řádky v /etc/ocserv/ocserv.conf
soubor.
config-per-user =/etc/ocserv/config-per-user/config-per-group =/etc/ocserv/config-per-group/
Uložte a zavřete soubor. Poté vytvořte konfigurační adresář pro uživatele a skupinu.
sudo mkdir /etc/ocserv/config-per-user/sudo mkdir /etc/ocserv/config-per-group/
Dále můžete vytvořit soubor v těchto dvou adresářích. Vytvořte například user1
soubor umožňující vlastní konfiguraci pro user1
.
sudo nano /etc/ocserv/config-per-user/user1
Můžete také vytvořit group1
umožňuje vlastní konfiguraci pro skupinu s názvem group1
.
sudo nano /etc/ocserv/config-per-group/group1
Do souboru můžete přidat něco jako níže.
trasa =10.10.10.0/255.255.255.0
To znamená, že za user1
připojit k tomuto serveru VPN, provoz pouze na 10.10.10.0/24
síť bude směrována přes VPN server. Provoz na jiné IP adresy je směrován přes původní bránu. Tento trik používám k tomu, abych umožnil mému dalšímu VPS (virtuálnímu soukromému serveru) připojit se k tomuto serveru VPN bez narušení normálního provozu, takže zařízení tun (vpns0) mého serveru VPN je vždy zapnuto, což znamená, že můj server VPN bude mít vždy soukromá IP adresa 10.10.10.1.
Uložte a zavřete soubor. Restartujte ocserv, aby se změny projevily.
sudo systemctl restart ocserv
Virtuální hosting
Chcete-li přidat nového virtuálního hostitele do ocserv, musíte nejprve použít metodu v kroku 3 k získání certifikátu TLS pro nového virtuálního hostitele. Poté upravte konfigurační soubor ocserv.
sudo nano /etc/ocserv/ocserv.conf
Přejděte na konec tohoto souboru. V textovém editoru Nano můžete stisknout Ctrl+W
a poté Ctrl+V
pro skok na konec souboru. Přidejte následující řádky. Nahraďte vpn2.example.com
s názvem hostitele druhého virtuálního hostitele.
[vhost:vpn2.example.com]#Povolit ověřování heslem a ověřování certifikátemenable-auth ="plain[passwd=/etc/ocserv/ocpasswd]"auth ="certificate"tcp-port =443#odkomentujte dva řádky pokud ocserv běží za HAProxy.#listen-host =127.0.0.1#listen-proxy-proto =true# Konfigurace SSL/TLSca-cert =/etc/ocserv/ssl/ca-cert.pemserver-cert =/etc/letsencrypt/ live/vpn2.example.com/fullchain.pemserver-key =/etc/letsencrypt/live/vpn2.example.com/privkey.pemcert-user-oid =0.9.2342.19200300.100.1.1#Konfigurace sítě. Pro tohoto virtuálního hostitele použijte jiný rozsah sítě. zařízení =vpnsipv4-network =10.10.20.0ipv4-netmask =255.255.255.0route =defaultdns =8.8.8.8tunnel-all-dns =truecompression =truemax-clients =0max-same-time-clients =0max-same-out-discovery =true-discovery-mitu- =1200mobile-idle-timeout=2400config-per-user =/etc/ocserv/config-per-user/config-per-group =/etc/ocserv/config-per-group/
Uložte a zavřete soubor. Poté restartujte ocserv.
sudo systemctl restart ocserv
Upravte konfigurační soubor UFW.
sudo nano /etc/ufw/before.rules
Najděte ufw-before-forward
řetězec v tomto souboru a přidejte následující 2 řádky, které budou přijímat předávání paketů, pokud je zdrojová IP nebo cílová IP v 10.10.20.0/24
rozsah.
-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT-A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT
Uložte a zavřete soubor. Poté restartujte UFW.
sudo systemctl restart ufw
Všimněte si, že démon ocserv vám může sdělit, že některé parametry budou u virtuálního hostitele ignorovány. Zjistil jsem však, že některé ignorované parametry jsou skutečně potřeba. Pokud například odstraníte device = vpns
lince z virtuálního hostitele, můžete při navazování připojení VPN k virtuálnímu hostiteli narazit na následující chybu.
Služba VPN není k dispozici; důvod:Chyba konfigurace serveru
A server VPN by v protokolu vytvořil následující chybovou zprávu.
nejsou nakonfigurovány žádné sítě; odmítnutí klienta
Také poznámka že klient AnyConnect VPN na iOS nepodporuje TLS SNI, takže uživatelé iOS se připojí k výchozímu virtuálnímu hostiteli.
Jak spustit více instancí ocserv
Jeden proces ocserv se může vázat pouze na jeden TCP nebo UDP port na vašem serveru. Pokud chcete, aby se ocserv vázal na více portů TCP nebo UDP, musíte spustit více procesů ocserv. je to velmi jednoduché. Zkopírujte /lib/systemd/system/ocserv.service
do nového souboru.
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service
Poté upravte nový soubor.
sudo nano /etc/systemd/system/ocserv2.service
Změnit
/etc/ocserv/ocserv.conf
do
/etc/ocserv/ocserv2.conf
Uložte a zavřete soubor. Dále můžete upravit /etc/ocserv/ocserv2.conf
soubor a přidejte své vlastní konfigurace. Jakmile budete hotovi, spusťte druhou službu ocserv.
sudo systemctl start ocserv2