Ako nainštalovať OpenConnect VPN Server na Ubuntu 22.04
Na tejto stránke
- Predpoklady
- Krok 1 - Nakonfigurujte bránu firewall
- Krok 2 - Nainštalujte Git
- Krok 3 - Nainštalujte OpenConnect
- Krok 4 - Vygenerujte certifikáty SSL
- Krok 5 – Nakonfigurujte OpenConnect
- Krok 6 - Spustite OpenConnect Server
- Krok 7 – Vytvorte si účty VPN
- Krok 8 - Povoľte presmerovanie IP
- Krok 9 – Nakonfigurujte maskovanie IP
- Krok 10 - Pripojte sa pomocou klienta OpenConnect
- Záver
OpenConnect VPN alias ocserv je open source bezplatné riešenie VPN s výkonom a funkciami na podnikovej úrovni. Je založený na protokole Cisco AnyConnect VPN, ktorý je široko používaný v podnikovom priemysle. V tomto návode sa naučíte, ako nainštalovať server OpenConnect VPN na počítači Ubuntu 22.04. Dozviete sa tiež, ako používať klienta OpenConnect na pripojenie k serveru.
Predpoklady
Server so systémom Ubuntu 22.04.
Používateľ bez oprávnenia root s oprávneniami sudo.
Plne kvalifikovaný názov domény (FQDN), napríklad vpn.example.com.
Uistite sa, že je všetko aktualizované.
$ sudo apt update
$ sudo apt upgrade
Niekoľko balíkov, ktoré váš systém potrebuje.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Niektoré z týchto balíkov už môžu byť vo vašom systéme nainštalované.
Krok 1 - Nakonfigurujte bránu firewall
Prvým krokom je konfigurácia brány firewall. Ubuntu sa štandardne dodáva s ufw (Nekomplikovaný firewall).
Skontrolujte, či je spustený firewall.
$ sudo ufw status
Mali by ste dostať nasledujúci výstup.
Status: inactive
Povoľte port SSH, aby firewall pri jeho povolení neprerušil aktuálne pripojenie.
$ sudo ufw allow OpenSSH
Povoliť aj porty HTTP a HTTPS.
$ sudo ufw allow http
$ sudo ufw allow https
Povoľte bránu firewall
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Znova skontrolujte stav brány firewall.
$ sudo ufw status
Mali by ste vidieť podobný výstup.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Krok 2 - Nainštalujte Git
Krok 3 - Nainštalujte OpenConnect
Ubuntu 22.04 sa dodáva so staršou verziou (1.1.3) OpenConnect. Ak ste s tým spokojní, môžete ho nainštalovať pomocou nasledujúceho príkazu.
$ sudo apt install ocserv
Pre tento tutoriál však nainštalujeme najnovšiu verziu (1.1.6) OpenConnect. Na to ho budeme musieť postaviť zo zdroja.
Nainštalujte závislosti potrebné na zostavenie zdroja.
$ sudo apt install -y libgnutls28-dev libev-dev libpam0g-dev liblz4-dev libseccomp-dev \
libreadline-dev libnl-route-3-dev libkrb5-dev libradcli-dev \
libcurl4-gnutls-dev libcjose-dev libjansson-dev libprotobuf-c-dev \
libtalloc-dev libhttp-parser-dev protobuf-c-compiler gperf \
nuttcp lcov libuid-wrapper libpam-wrapper libnss-wrapper \
libsocket-wrapper gss-ntlmssp haproxy iputils-ping freeradius \
gawk gnutls-bin iproute2 yajl-tools tcpdump autoconf automake
Naklonujte úložisko ocserv Git.
$ git clone https://gitlab.com/openconnect/ocserv.git
Prepnite sa do klonovaného adresára.
$ cd ocserv
Vytvorte konfiguračné skripty.
$ autoreconf -fvi
Kompilujte zdrojový kód. Ignorujte všetky zastarané upozornenia.
$ ./configure && make
Nainštalujte ocserv.
$ sudo make install
Súbory sa nainštalujú do adresárov /usr/local/bin a /usr/local/sbin. Skopírujte servisný súbor systemd.
$ sudo cp doc/systemd/standalone/ocserv.service /etc/systemd/system/ocserv.service
Otvorte súbor služby na úpravu.
$ sudo nano /etc/systemd/system/ocserv.service
V nasledujúcom riadku zmeňte cestu k binárnemu súboru ocserv
$ ExecStart=/usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf
na nasledujúce.
$ ExecStart=/usr/local/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf
Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.
Znovu načítajte systémového démona.
$ sudo systemctl daemon-reload
Krok 4 - Vygenerujte certifikáty SSL
Na vygenerovanie certifikátu SSL musíme nainštalovať Certbot. Certbot môžete nainštalovať pomocou úložiska Ubuntu alebo získať najnovšiu verziu pomocou nástroja Snapd. Budeme používať verziu Snapd.
Ubuntu 22.04 sa štandardne dodáva s nainštalovaným Snapd. Spustite nasledujúce príkazy, aby ste sa uistili, že vaša verzia Snapd je aktuálna.
$ sudo snap install core && sudo snap refresh core
Nainštalujte Certbot.
$ sudo snap install --classic certbot
Pomocou nasledujúceho príkazu zaistite spustenie príkazu Certbot vytvorením symbolického odkazu na adresár /usr/bin.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Pokiaľ ide o generovanie certifikátu SSL, existujú dve možnosti. Ak na svojom systéme nemáte spustený webový server, môžete na vygenerovanie certifikátu použiť samostatnú metódu. Spustite nasledujúci príkaz na vytvorenie certifikátu pomocou samostatného doplnku pre Certbot.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d vpn.example.com
Vyššie uvedený príkaz stiahne certifikát do adresára /etc/letsencrypt/live/vpn.example.com na vašom serveri.
Ďalej, ak máte na svojom systéme spustený server, môžete použiť doplnok webroot alebo doplnky Nginx alebo Apache, ak ich používate. Pre servery Nginx alebo Apache môžete jednoducho spustiť príkaz uvedený nižšie.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d vpn.example.com
alebo
$ sudo certbot certonly --apache --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d vpn.example.com
Ak máte iný server, budeme musieť použiť doplnok webroot. Za týmto účelom vytvorte koreňový webový adresár.
$ sudo mkdir -p /var/www/ocserv
Nastavte server ako vlastníka webového koreňového adresára. V našom prípade používame ako používateľa servera www-data.
$ sudo chown www-data:www-data /var/www/ocserv -R
Ďalej nakonfigurujte svoj server tak, aby obsluhoval doménu vpn.example.com v adresári /var/www/ocserv. Reštartujte server. Potom vygenerujte certifikát pomocou nasledujúceho príkazu.
$ sudo certbot certonly --webroot --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d vpn.example.com
Skontrolujte službu plánovača obnovy Certbot.
$ sudo systemctl list-timers
Ako jednu zo služieb naplánovaných na spustenie nájdete snap.certbot.renew.service.
NEXT LEFT LAST PASSED UNIT ACTIVATES
Wed 2023-04-19 10:31:47 UTC 2h 55min left Wed 2023-04-19 03:31:58 UTC 4h 3min ago ua-timer.timer ua-timer.service
Wed 2023-04-19 12:02:42 UTC 4h 26min left Wed 2023-04-19 03:19:20 UTC 4h 16min ago motd-news.timer motd-news.service
Wed 2023-04-19 18:19:56 UTC 10h left Wed 2023-04-19 07:19:52 UTC 16min ago apt-daily.timer apt-daily.service
Wed 2023-04-19 22:51:00 UTC 15h left n/a n/a snap.certbot.renew.timer snap.certbot.renew.service
Vykonajte suchý chod procesu a skontrolujte, či obnovenie SSL funguje správne.
$ sudo certbot renew --dry-run
Ak nevidíte žiadne chyby, všetko je nastavené. Váš certifikát sa automaticky obnoví.
Krok 5 – Nakonfigurujte OpenConnect
Ak máte nainštalovaný ocserv pomocou APT, konfiguračný súbor by už mal byť dostupný v umiestnení /etc/ocserv/ocserv.conf. Ak ste však zostavili balík zo zdroja, musíme skopírovať konfiguračný súbor.
Vytvorte adresár pre konfiguračný súbor.
$ sudo mkdir /etc/ocserv
Skopírujte konfiguračný súbor.
$ sudo cp /home/username/ocserv/doc/sample.config /etc/ocserv/ocserv.conf
Otvorte súbor na úpravu.
$ sudo nano /etc/ocserv/ocserv.conf
Zmeňte hodnotu parametra auth na nasledujúcu. To umožní používateľom používať samostatné účty VPN.
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
OpenConnect štandardne používa 443 TCP a UDP portov. Na pripojenie budeme používať iba TCP port, preto zakážte port UDP zakomentovaním.
tcp-port = 443
#udp-port = 443
Ak máte webový server spustený na porte 443, zmeňte hodnotu TCP portu zmenou hodnoty.
tcp-port = 8443
Ďalej nájdite premenné server-crt a server-key a zmeňte ich hodnoty nasledovne.
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
Nastavte maximálny povolený počet klientov. Predvolená hodnota je 16. Nastavte ako 0 pre neobmedzené.
max-clients = 16
Nastavte počet zariadení, ktoré môže používateľ používať súčasne. Predvolená hodnota je 2. Nastavte ako 0 pre neobmedzené.
max-same-clients = 2
V predvolenom nastavení OpenConnect odosiela udržiavacie pakety každých 9 hodín (32 400 sekúnd). Toto je príliš vysoká hodnota. Nastavte ho na 60 sekúnd, aby ste znížili pravdepodobnosť výpadku pripojenia VPN.
keepalive = 60
Zmeňte hodnotu try-mtu-discovery na true, aby ste povolili zisťovanie MTU. Dokáže optimalizovať výkon VPN.
try-mtu-discovery = true
Nakonfigurujte čas, počas ktorého môže klient zostať nečinný pred odpojením, zrušením komentárov nasledujúcich premenných. Ak chcete, aby klient zostal pripojený na neurčito, nechajte ho tak, ako je.
idle-timeout=1200
mobile-idle-timeout=1800
Nastavte predvolený názov domény pre OpenConnect VPN.
default-domain = vpn.example.com
Zmeňte predvolenú konfiguráciu IPv4, aby ste predišli kolízii IP adries. Ako hodnotu použijeme 10.10.10.0.
ipv4-network = 10.10.10.0
Odkomentujte nasledujúci riadok, aby ste tunelovali všetky DNS dotazy cez VPN.
tunnel-all-dns = true
Zmeňte DNS resolver na Google DNS. Pridajte aj druhý záznam.
dns = 8.8.8.8
dns = 8.8.4.4
Okomentujte všetky parametre trasy pridaním symbolu hash (#) pred ne.
#route = 10.10.10.0/255.255.255.0
#route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#route = default
# Subsets of the routes above that will not be routed by
# the server.
#no-route = 192.168.5.0/255.255.255.0
Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.
Krok 6 - Spustite OpenConnect Server
Spustite server OpenConnect VPN.
$ sudo systemctl start ocserv
Skontrolujte stav služby.
$ sudo systemctl status ocserv
Získate podobný výstup.
? ocserv.service - OpenConnect SSL VPN server
Loaded: loaded (/etc/systemd/system/ocserv.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2023-04-20 08:52:18 UTC; 2s ago
Docs: man:ocserv(8)
Main PID: 19965 (ocserv-main)
Tasks: 2 (limit: 1026)
Memory: 1.4M
CPU: 9ms
CGroup: /system.slice/ocserv.service
??19965 ocserv-main
??19966 ocserv-sm
Apr 20 08:52:18 openconnect ocserv[19965]: note: skipping 'pid-file' config option
Apr 20 08:52:18 openconnect ocserv[19965]: note: vhost:default: setting 'plain' as primary authentication method
Apr 20 08:52:18 openconnect ocserv[19965]: error connecting to sec-mod socket '/var/run/ocserv-socket.a4413bc9': No such file or directory
Apr 20 08:52:18 openconnect ocserv[19965]: note: setting 'file' as supplemental config option
Apr 20 08:52:18 openconnect ocserv[19965]: listening (TCP) on 0.0.0.0:443...
Apr 20 08:52:18 openconnect ocserv[19965]: listening (TCP) on [::]:443...
Apr 20 08:52:18 openconnect ocserv[19966]: ocserv[19966]: sec-mod: reading supplemental config from files
Apr 20 08:52:18 openconnect ocserv[19966]: sec-mod: reading supplemental config from files
Apr 20 08:52:18 openconnect ocserv[19966]: ocserv[19966]: sec-mod: sec-mod initialized (socket: /var/run/ocserv-socket.a4413bc9.0)
Apr 20 08:52:18 openconnect ocserv[19966]: sec-mod: sec-mod initialized (socket: /var/run/ocserv-socket.a4413bc9.0)
Ak sa zobrazí chyba týkajúca sa pripojenia k sec-mod socket, ignorujte ju. Je to normálne. Ak súbor nenájde, inicializuje ho.
Krok 7 – Vytvorte si účty VPN
Účty VPN môžete vytvoriť pomocou pomôcky ocpasswd. Spustite nasledujúci príkaz a vytvorte nový účet VPN.
$ sudo ocpasswd -c /etc/ocserv/ocpasswd username
Enter password:
Re-enter password:
Heslo sa uloží do súboru /etc/ocserv/ocpasswd. Ak chcete obnoviť heslo pre používateľské meno, znova spustite vyššie uvedený príkaz. Spustite vyššie uvedený príkaz s iným používateľom a vytvorte ďalší účet.
Krok 8 - Povoľte presmerovanie IP
Aby server VPN smeroval pakety medzi klientom a internetom, musíte povoliť presmerovanie IP spustením nasledujúceho príkazu.
$ echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/60-custom.conf
Spustite nasledujúce príkazy, aby ste povolili algoritmu TCP BBR na zvýšenie rýchlosti TCP.
$ echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.d/60-custom.conf
$ echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.d/60-custom.conf
Pomocou nasledujúceho príkazu urobte zmeny trvalé.
$ sudo sysctl -p /etc/sysctl.d/60-custom.conf
Krok 9 – Nakonfigurujte maskovanie IP
Ďalším krokom je nastavenie maskovania IP vo firewalle, aby server VPN mohol pre klientov fungovať ako virtuálny smerovač. Nájdite názov hlavného sieťového rozhrania servera.
$ ip addr
Získate podobný výstup.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
link/ether 56:00:04:67:7e:79 brd ff:ff:ff:ff:ff:ff
inet 95.179.138.135/23 metric 100 brd 95.179.139.255 scope global dynamic enp1s0
valid_lft 66999sec preferred_lft 66999sec
inet6 2a05:f480:1400:2381:5400:4ff:fe67:7e79/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591657sec preferred_lft 604457sec
inet6 fe80::5400:4ff:fe67:7e79/64 scope link
valid_lft forever preferred_lft forever
V našom prípade je enp1s0 názov rozhrania. Pridajte príkaz iptables do konfiguračného súboru UFW tak, že ho otvoríte na úpravy.
$ sudo nano /etc/ufw/before.rules
Pridajte nasledujúce riadky na koniec súboru. Nahraďte enp1s0 v kóde svojím sieťovým rozhraním.
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o enp1s0 -j MASQUERADE
# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT
Nájdite v súbore nasledujúce riadky.
# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
Za ním prilepte nasledujúce riadky.
# 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
Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.
Reštartujte bránu firewall.
$ sudo systemctl restart ufw
Pravidlo Masquerade môžete skontrolovať pomocou nasledujúceho príkazu.
$ sudo iptables -t nat -L POSTROUTING
Dostanete nasledujúci výstup.
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.10.10.0/24 anywhere
Krok 10 - Pripojte sa pomocou klienta OpenConnect
Nainštalujeme klienta OpenConnect na počítač Ubuntu 22.04. Spustite nasledujúci príkaz na inštaláciu klienta.
$ sudo apt install openconnect
Potom sa pripojte k serveru VPN pomocou nasledujúceho príkazu. Príznak -b spôsobí, že po nadviazaní spojenia bude klient bežať na pozadí.
$ sudo openconnect -b vpn.example.com:443
Budete požiadaní o zadanie používateľského mena a hesla VPN. Zadajte poverenia vytvorené v kroku 7.
POST https://vpn.example.com/
Connected to 95.179.138.135:443
SSL negotiation with vpn.example.com
Connected to HTTPS on vpn.example.com with ciphersuite (TLS1.3)-(ECDHE-SECP256R1)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)
XML POST enabled
Please enter your username.
Username:navjot
POST https://vpn.example.com/auth
Please enter your password.
Password:
POST https://vpn.example.com/auth
Po úspešnom pripojení uvidíte nasledujúci výstup. DTLS je zakázané, pretože sme zakázali UDP.
Got CONNECT response: HTTP/1.1 200 CONNECTED
CSTP connected. DPD 90, Keepalive 60
No DTLS address
Set up UDP failed; using SSL instead
Configured as 192.168.1.13, with SSL connected and DTLS disabled
Continuing in background; pid 1650
Spustite nasledujúci príkaz na zastavenie pripojenia.
$ sudo pkill openconnect
Poďme vytvoriť nejaké systémové skripty pre OpenConnect. Prvým skriptom je prinútiť klienta, aby sa automaticky pripojil pri štarte systému.
Vytvorte a otvorte súbor služby na úpravu.
$ sudo nano /etc/systemd/system/openconnect.service
Vložte do nej nasledujúci kód.
[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'
KillSignal=SIGINT
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.
Povoliť službu.
$ sudo systemctl enable openconnect.service
Spustite službu.
$ sudo systemctl start openconnect.service
Ak chcete automaticky reštartovať pripojenie VPN, keď sa váš počítač vráti zo stavu pozastavenia, musíte vytvoriť ďalší skript systému.
Vytvorte a otvorte skript reštartu na úpravu.
$ sudo nano /etc/systemd/system/openconnect-restart.service
Vložte do nej nasledujúci kód.
[Unit]
Description=Restart OpenConnect client when resuming from suspend
After=suspend.target
[Service]
Type=simple
ExecStart=/bin/systemctl --no-block restart openconnect.service
[Install]
WantedBy=suspend.target
Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.
Povoliť službu.
$ sudo systemctl enable openconnect-restart.service
Môžeme tiež vytvoriť službu, ktorá automaticky reštartuje pripojenie VPN, keď klesne. Vytvorte a otvorte službu kontroly VPN na úpravu.
$ sudo nano /etc/systemd/system/openconnect-check.service
Vložte do nej nasledujúci kód.
[Unit]
Description=OpenConnect VPN Connectivity Checker
After=openconnect.service
[Service]
Type=simple
ExecStart=/bin/bash -c 'for ((; ; )) do (ping -c9 10.10.10.1 || systemctl restart openconnect) done'
[Install]
WantedBy=multi-user.target
Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.
Aktivujte a spustite službu.
$ sudo systemctl enable enable openconnect-check.service --now
Tým sa navždy spustí príkaz ping na kontrolu pripojenia VPN. Ak spadne, automaticky reštartuje OpenConnect.
Ak chcete, môžete si stiahnuť klientov OpenConnect GUI. Už dlhší čas však neboli aktualizované. Ak chcete aktualizovaného klienta GUI, môžete navštíviť úložisko OpenConnect GUI GitLab a skompilovať si ho sami.
Záver
Tým sa dokončí náš návod na inštaláciu servera OpenConnect VPN na server Ubuntu 22.04 a na pripojenie k nemu pomocou klienta príkazového riadka. Ak máte nejaké otázky, napíšte ich do komentárov nižšie.
