Ocserv Advanced (rozdelené tunelovanie, IPv6, statická IP, konfigurácie podľa používateľa, virtuálny hosting)
Tento tutoriál vám ukáže, ako používať OpenConnect VPN (ocserv) ako profesionál. Naučíš sa:
- Zakázať nezabezpečené protokoly TLS
- Konfigurácie podľa používateľa/skupiny
- Priraďte statickú súkromnú IP adresu
- Delené tunelovanie
- Povoliť IPv6
- Virtuálny hosting
- Ako spustiť viacero inštancií ocserv
Požiadavka
Ak chcete postupovať podľa tohto návodu, predpokladá sa, že ste už nastavili server OpenConnect VPN s certifikátom servera Let's Encrypt TLS. Ak nie, postupujte podľa jedného z nasledujúcich návodov.
- Nastavte OpenConnect VPN Server (ocserv) na Ubuntu 20.04 pomocou Let's Encrypt
- Nastavte OpenConnect VPN Server (ocserv) na Debian 11 Bullseye pomocou Let's Encrypt
- Nastavte OpenConnect VPN Server (ocserv) na CentOS 8/RHEL 8 pomocou Let’s Encrypt
Ako zakázať TLS 1.0 a TLS 1.1 v ocserv
Rada PCI ukončila 30. júna 2018 podporu TLS 1.0 a hlavné webové prehliadače deaktivujú TLS 1.0 a TLS 1.1 v roku 2020. To isté by sme mali urobiť so serverom VPN. Upravte hlavný konfiguračný súbor.
sudo nano /etc/ocserv/ocserv.confNájdite nasledujúci riadok:
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128"Ak chcete zakázať TLS 1.0 a TLS 1.1 na serveri OpenConnect VPN, stačí do riadku pridať -VERS-TLS1.0 a -VERS-TLS1.1.
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1"
Uložte a zatvorte súbor. Potom reštartujte ocserv.
sudo systemctl restart ocservTeraz bude ocserv akceptovať iba TLS 1.3 a TLS 1.2. Ďalšie informácie o konfigurácii parametra TLS v ocserv nájdete v časti Reťazce priority GnuTLS.
Ak chcete skontrolovať, či váš server OpenConnect VPN podporuje TLS 1.0, spustite nasledujúci príkaz.
openssl s_client -connect vpn.your-domain.com:443 -tls1A skontrolujte TLS 1.1
openssl s_client -connect vpn.your-domain.com:443 -tls1_1Ak sa vo výstupe zobrazí nasledujúca správa, znamená to, že verzia TLS nie je podporovaná.
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supportedKonfigurácia podľa používateľa alebo skupiny
Ocserv umožňuje konfigurácie pre používateľa a skupinu. Ak chcete povoliť túto funkciu, odkomentujte nasledujúce dva riadky v súbore /etc/ocserv/ocserv.conf.
config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/Uložte a zatvorte súbor. Potom vytvorte konfiguračný adresár pre používateľa a skupinu.
sudo mkdir /etc/ocserv/config-per-user/
sudo mkdir /etc/ocserv/config-per-group/Ďalej môžete vytvoriť súbor v týchto dvoch adresároch. Vytvorte napríklad súbor user1, ktorý umožní vlastnú konfiguráciu pre user1.
sudo nano /etc/ocserv/config-per-user/user1Môžete tiež vytvoriť súbor group1, ktorý umožní vlastnú konfiguráciu pre skupinu s názvom group1.
sudo nano /etc/ocserv/config-per-group/group1Do súboru môžete pridať niečo ako nižšie, aby ste povolili rozdelené tunelovanie.
route = 10.10.10.0/255.255.255.0
tunnel-all-dns = false
dns = 8.8.8.8
dns = 1.1.1.1
Kde :
- Prvý riadok znamená, že po pripojení
user1alebo používateľov vgroup1k tomuto serveru VPN sa bude prevádzkovať iba sieť10.10.10.0/24smerované cez server VPN. Prevádzka na iné IP adresy je smerovaná cez pôvodnú bránu. - Druhý riadok zakáže tunelovanie DNS dotazov.
- Tretí a štvrtý riadok nastavuje servery DNS pre klientov VPN.
Tento trik používam na to, aby som umožnil môjmu ďalšiemu VPS (virtuálnemu súkromnému serveru) pripojiť sa k tomuto serveru VPN bez narušenia bežnej prevádzky, takže zariadenie TUN (vpns0) môjho servera VPN je vždy zapnuté, čo znamená, že môj server VPN bude mať vždy súkromná IP adresa 10.10.10.1.
Uložte a zatvorte súbor. Reštartujte ocserv, aby sa zmeny prejavili.
sudo systemctl restart ocservUpozorňujeme, že ak povolíte IPv6 v ocserv, musíte tiež pridať rozsah siete IPv6, aby ste mohli použiť rozdelené tunelovanie.
route = 10.10.10.0/255.255.255.0
route = fda9:4efe:7e3b:03ea::/48
tunnel-all-dns = false
dns = 8.8.8.8
dns = 1.1.1.1Ak chcete vylúčiť IP adresu z predvolenej trasy, použite no-route.
no-route = 12.34.56.78/32To znamená, že všetka ostatná prevádzka prejde cez tunel VPN okrem prevádzky na IP 12.34.56.78. parameter route a no-route akceptujú notáciu masky siete (10.10.10.0/255.255.255.0) aj notáciu CIDR (12.34.56.78/32)
Ak sa po povolení rozdeleného tunelovania zobrazí nasledujúca chyba, je to pravdepodobne preto, že ste nepoužili sieťovú masku alebo zápis CIDR.
could not parse proxy protocol header; discarding connectionAko priradiť používateľovi statickú IP adresu
ocserv nepodporuje priraďovanie statických súkromných IP adries každému používateľovi. Ukážem vám však trik na pridelenie statickej súkromnej IP adresy konkrétnemu používateľovi.
Najprv musíte povoliť konfiguráciu pre používateľa, ako je uvedené v predchádzajúcej časti. Potom pridajte nasledujúce dva riadky do konfiguračného súboru pre používateľa.
ipv4-network = 10.10.10.0
ipv4-netmask = 255.255.255.252Toto nastaví masku siete na 255.255.255.252 namiesto predvolenej 255.255.255.0, takže k dispozícii budú iba 4 adresy IP.
- 10.10.10.0
- 10.10.10.1
- 10.10.10.2
- 10.10.10.3
V skutočnosti existuje iba jedna IP adresa, ktorá môže byť priradená tomuto používateľovi VPN (10.10.10.2).
- 10.10.10.0 je sieťová adresa
- 10.10.10.1 vždy používa server VPN.
- 10.10.10.3 je vysielacia adresa.
Takže používateľ VPN môže použiť iba adresu 10.10.10.2.
Rozdelené tunelovanie podľa krajiny
Povedzme, že chcete, aby sieť VPN tunelovala iba premávku do cudzích krajov. Premávka do vašej krajiny by mala využívať normálnu trasu. Na dosiahnutie tohto cieľa môžete použiť direktívu no-route v konfiguračnom súbore ocserv.
Najprv si musíte stiahnuť rozsah IP adries pre vašu krajinu na tejto webovej stránke: https://www.ip2location.com/free/visitor-blocker, ktorá vám umožní stiahnuť rozsah IP adries vo formáte CIDR.
Uložte rozsah IP do textového súboru ip2location.txt a spustite nasledujúci príkaz v termináli systému Linux na pridanie direktívy no-route = na začiatok každého riadku.
sed 's/^/no-route = /' -i ip2localtion.txtTeraz otvorte súbor v textovom editore a skopírujte všetky riadky v ňom. Tieto riadky musíme pridať do konfiguračného súboru ocserv. Ak je tam príliš veľa riadkov, môžete pridať tieto riadky do konfiguračného súboru pre používateľa.
sudo nano /etc/ocserv/config-per-user/user1Môžete ich tiež pridať do konfiguračného súboru pre jednotlivé skupiny a potom pridať používateľov do skupiny.
Reštartujte ocserv, aby sa zmeny prejavili.
sudo systemctl restart ocservAko povoliť IPv6 v OpenConnect VPN
Ak má váš server VPN verejnú adresu IPv6, môžete povoliť IPv6 v OpenConnect VPN. Upravte konfiguračný súbor ocserv.
sudo nano /etc/ocserv/ocserv.confNájdite nasledujúce dva riadky a odkomentujte ich.
ipv6-network = fda9:4efe:7e3b:03ea::/48
ipv6-subnet-prefix = 64Uložte a zatvorte súbor. Reštartujte ocserv, aby sa zmena prejavila.
sudo systemctl restart ocservPotom musíme povoliť presmerovanie IP pre IPv6. Upravte súbor sysctl.conf.
sudo nano /etc/sysctl.confNa koniec tohto súboru pridajte nasledujúci riadok.
net.ipv6.conf.all.forwarding=1Uložte a zatvorte súbor. Potom použite zmeny pomocou nižšie uvedeného príkazu.
sudo sysctl -pĎalej musíme nastaviť maskovanie IPv6 vo firewalle servera, aby sa server stal virtuálnym smerovačom pre klientov VPN.
sudo nano /etc/ufw/before6.rulesŠtandardne existujú určité pravidlá pre tabuľku filter. Na koniec tohto súboru pridajte nasledujúce riadky. Nahraďte ens3 vlastným názvom sieťového rozhrania.
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens3 -j MASQUERADE
# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT
V textovom editore Nano môžete prejsť na koniec súboru stlačením Ctrl+W a následným stlačením Ctrl+V.
Štandardne UFW zakazuje preposielanie paketov. Môžeme povoliť presmerovanie pre našu súkromnú sieť IPv6. Nájdite reťazec ufw6-before-forward v tomto súbore a pridajte nasledujúce 3 riadky, ktoré budú akceptovať presmerovanie paketov, ak je zdrojová IP alebo cieľová IP v fda9:4efe:7e3b:03ea ::/48 rozsah.
Uložte a zatvorte súbor. Reštartujte UFW, aby sa zmena prejavila.
sudo systemctl restart ufwAk teraz uvediete pravidlá v reťazci POSTROUTING tabuľky NAT pomocou nasledujúceho príkazu:
sudo ip6tables -t nat -L POSTROUTINGMôžete vidieť pravidlo maškarády.
Odpojte aktuálne pripojenie VPN, pridajte záznam AAAA pre vpn.example.com a znova vytvorte pripojenie VPN. Potom prejdite na https://test-ipv6.com/ a skontrolujte svoje pripojenie IPv6.
Ak na serveri VPN spustíte svoj vlastný prekladač DNS BIND, môžete pridať nasledujúci riadok do súboru /etc/ocserv/ocserv.conf a nastaviť server VPN ako prekladač DNS pre klientov VPN.
dns = fda9:4efe:7e3b::1Uložte a zatvorte súbor. Ak chcete dopytovať názvy DNS v IPv6, musíme nakonfigurovať BIND tak, aby povolil klientov IPv6 VPN.
sudo nano /etc/bind/named.conf.optionsNájdite parameter allow-recursion a zmeňte ho na:
allow-recursion { 127.0.0.1; 10.10.10.0/24; fda9:4efe:7e3b:03ea::/48; };Uložte a zatvorte súbor. Reštartujte BIND9.
sudo systemctl restart namedMusíme tiež povoliť klienta IPv6 VPN vo firewalle.
sudo ufw allow in from fda9:4efe:7e3b:03ea::/48Virtuálny hosting
Poznámka: Ak len chcete mať možnosť používať viacero názvov hostiteľa pre server VPN, môžete použiť certbot na získanie certifikátu pre viacero domén. Potom reštartujte ocserv a máte hotovo.
Ak chcete pridať nového virtuálneho hostiteľa do ocserv, najprv musíte použiť metódu v kroku 3 na získanie certifikátu TLS pre nového virtuálneho hostiteľa. Potom upravte konfiguračný súbor ocserv.
sudo nano /etc/ocserv/ocserv.confPrejdite na koniec tohto súboru. V textovom editore Nano môžete stlačením Ctrl+W a potom Ctrl+V preskočiť na koniec súboru. Pridajte nasledujúce riadky. Nahraďte vpn2.example.com názvom hostiteľa druhého virtuálneho hostiteľa.
[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/
Uložte a zatvorte súbor. Potom reštartujte ocserv.
sudo systemctl restart ocservUpravte konfiguračný súbor UFW.
sudo nano /etc/ufw/before.rulesNájdite reťazec ufw-before-forward v tomto súbore a pridajte nasledujúce 2 riadky, ktoré budú akceptovať presmerovanie paketov, ak je zdrojová alebo cieľová 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 ACCEPTUložte a zatvorte súbor. Potom reštartujte UFW.
sudo systemctl restart ufwVšimnite si, že démon ocserv vám môže povedať, že niektoré parametre budú pre virtuálneho hostiteľa ignorované. Zistil som však, že niektoré ignorované parametre sú skutočne potrebné. Ak napríklad z virtuálneho hostiteľa vymažete riadok device=vpns, pri vytváraní pripojenia VPN k virtuálnemu hostiteľovi sa môže vyskytnúť nasledujúca chyba.
VPN service unavailable; reason: Server configuration errorA server VPN by v protokole vytvoril nasledujúce chybové hlásenie.
no networks are configured; rejecting clientUpozorňujeme tiež, že klient AnyConnect VPN v systéme iOS nepodporuje TLS SNI, takže používatelia systému iOS sa pripájajú k predvolenému virtuálnemu hostiteľovi.
Ako spustiť viacero inštancií ocserv
Jeden proces ocserv sa môže viazať iba na jeden port TCP alebo UDP na vašom serveri. Ak chcete povoliť ocserv viazať sa na viacero portov TCP alebo UDP, musíte spustiť viacero procesov ocserv. je to veľmi jednoduché. Skopírujte súbor /lib/systemd/system/ocserv.service do nového súboru.
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.servicePotom upravte nový súbor.
sudo nano /etc/systemd/system/ocserv2.serviceZmeniť
/etc/ocserv/ocserv.confdo
/etc/ocserv/ocserv2.confUložte a zatvorte súbor. Ďalej môžete upraviť súbor /etc/ocserv/ocserv2.conf a pridať svoje vlastné konfigurácie. Po dokončení spustite druhú službu ocserv.
sudo systemctl start ocserv2Zabaliť sa
To je všetko! Dúfam, že vám tento návod pomohol nainštalovať a nakonfigurovať server OpenConnect VPN. Ako vždy, ak ste považovali tento príspevok za užitočný, prihláste sa na odber nášho bezplatného bulletinu a získajte ďalšie tipy a triky 🙂


