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.conf

Ná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 ocserv

Teraz 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 -tls1

A skontrolujte TLS 1.1

openssl s_client -connect vpn.your-domain.com:443 -tls1_1

Ak 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 supported

Konfigurá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/user1

Môž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/group1

Do 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í user1 alebo používateľov v group1 k tomuto serveru VPN sa bude prevádzkovať iba sieť 10.10.10.0/24 smerované 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 ocserv

Upozorň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.1

Ak chcete vylúčiť IP adresu z predvolenej trasy, použite no-route.

no-route = 12.34.56.78/32

To 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 connection

Ako 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.252

Toto 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.txt

Teraz 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/user1

Môž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 ocserv

Ako 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.conf

Nájdite nasledujúce dva riadky a odkomentujte ich.

ipv6-network = fda9:4efe:7e3b:03ea::/48
ipv6-subnet-prefix = 64

Uložte a zatvorte súbor. Reštartujte ocserv, aby sa zmena prejavila.

sudo systemctl restart ocserv

Potom musíme povoliť presmerovanie IP pre IPv6. Upravte súbor sysctl.conf.

sudo nano /etc/sysctl.conf

Na koniec tohto súboru pridajte nasledujúci riadok.

net.ipv6.conf.all.forwarding=1

Ulož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 ufw

Ak teraz uvediete pravidlá v reťazci POSTROUTING tabuľky NAT pomocou nasledujúceho príkazu:

sudo ip6tables -t nat -L POSTROUTING

Môž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::1

Ulož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.options

Ná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 named

Musíme tiež povoliť klienta IPv6 VPN vo firewalle.

sudo ufw allow in from fda9:4efe:7e3b:03ea::/48

Virtuá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.conf

Prejdite 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 ocserv

Upravte konfiguračný súbor UFW.

sudo nano /etc/ufw/before.rules

Ná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 ACCEPT

Uložte a zatvorte súbor. Potom reštartujte UFW.

sudo systemctl restart ufw

Vš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 error

A server VPN by v protokole vytvoril nasledujúce chybové hlásenie.

no networks are configured; rejecting client

Upozorň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.service

Potom upravte nový súbor.

sudo nano /etc/systemd/system/ocserv2.service

Zmeniť

/etc/ocserv/ocserv.conf

do

/etc/ocserv/ocserv2.conf

Ulož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 ocserv2

Zabaliť 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 🙂

Súvisiace články