====== SoftEtherVPN ======
[[https://www.softether.org/|SoftEther VPN]] je multiplatformní VPN server a klient, který umí více typů připojení včetně L2TP/IPsec. Na této stránce mám praktické poznámky ke kompilaci a aktualizaci serveru na Linuxu i k připojování klientů z Ubuntu a Androidu.
===== Instalace a kompilace serveru =====
Při první instalaci jsem narazil na to, že build potřebuje správné knihovny a že některé starší zdrojové větve dělaly problémy s parametrem ''-m64''. Je proto dobré mít po ruce jak oficiální download stránku, tak aktuální dokumentaci build procesu.
Potřebné balíčky:
apt-get install libreadline-dev zlib1g-dev cmake build-essential pkg-config libsodium-dev
Stabilní větev lze stáhnout z [[https://github.com/SoftEtherVPN/SoftEtherVPN_Stable|SoftEtherVPN_Stable]]:
git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git
cd SoftEtherVPN_Stable
./configure
make
make install
==== Chyba -m64 na ARM serverech ====
Na ARM serverech se při kompilaci může objevit tato chyba:
cc -DNDEBUG -DVPN_SPEED -DUNIX -DUNIX_LINUX -DCPU_64 -D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64 -I./src/ -I./src/Cedar/ -I./src/Mayaqua/ -O2 -fsigned-char -m64 -c src/Mayaqua/Cfg.c -o tmp/objs/Mayaqua/Cfg.o
cc: error: unrecognized command line option '-m64'
make: *** [Makefile:111: tmp/objs/Mayaqua/Cfg.o] Chyba 1
Příznak ''-m64'' je specifický pro architekturu x86-64 a ARM kompilátor ho nezná. Řešením je editace vygenerovaného ''Makefile'' – odstranit ''-m64'' ze čtyř proměnných:
* ''OPTIONS_COMPILE_DEBUG''
* ''OPTIONS_LINK_DEBUG''
* ''OPTIONS_COMPILE_RELEASE''
* ''OPTIONS_LINK_RELEASE''
Pokud při kompilaci chybují knihovny, doinstalovat:
apt-get install libreadline-dev zlib1g-dev
===== Aktualizace SoftEther VPN =====
Složku se zdrojáky si nechávám na serveru, aby šla aplikace průběžně aktualizovat přes Git. Postup byl:
git pull
make clean
./configure
make
make install
Konfigurační soubor serveru ''/usr/vpnserver/vpn_server.config'' tím nebyl přepsaný. Důležité je, že se needituje ručně, ale přes nástroj ''vpncmd''.
**Poznámka pro ARM:** Každé spuštění ''./configure'' vygeneruje nový ''Makefile'', který opět obsahuje příznak ''-m64''. Na ARM serverech je proto nutné Makefile znovu upravit (viz výše) před každým spuštěním ''make''.
===== Fail2ban pro SoftEther =====
Pokud je na serveru zapnutý [[infrastruktura:bezpecnost:fail2ban|fail2ban]], jde SoftEther chránit i proti brute-force pokusům. Praktický postup mám rozepsaný tam, ale základ je v tom, že SoftEther musí logovat do jednoho stabilního souboru a fail2ban pak sleduje ''sec.log'' pro konkrétní VPN hub.
===== Konfigurace Ubuntu pro připojení VPN přes L2TP =====
Nejprve je potřeba nainstalovat tyto balíčky:
sudo apt install network-manager-l2tp network-manager-l2tp-gnome
V nastavení sítě se pak přidá nové VPN připojení typu ''Layer 2 Tunneling Protocol (L2TP)''.
Konkrétní screenshoty a nastavení v této stránce zachovávám jako praktickou referenci k tomu, jak jsem měl řešené dva scénáře: oddělenou servisní síť a bridge do domácí sítě.
{{.:pasted:20221205-135215.png}}
==== Nastavení privátní sítě ====
{{.:pasted:20221205-134252.png}}
Takto vypadá nastavení pod tlačítkem IPsec Settings:
{{.:pasted:20221205-120809.png}}
A takto nastavení pod PPP Settings:
{{.:pasted:20221205-120707.png}}
Ruční nastavení brány a routingu pro servisní síť:
{{.:pasted:20221205-120957.png}}
==== Nastavení bridge ====
Toto nastavení jsem používal ve chvíli, kdy se měl počítač po VPN tvářit, jako by byl fyzicky v domácí síti.
{{.:pasted:20221205-133333.png}}
IPsec Settings:
{{.:pasted:20221205-133357.png}}
PPP Settings:
{{.:pasted:20221205-133849.png}}
IPv4 nastavení:
{{.:pasted:20221205-133442.png}}
===== Konfigurace Androidu pro připojení VPN přes L2TP =====
U starších verzí Androidu nebyl potřeba root telefonu. Všechno se řešilo přes ''Síť a internet -> VPN''.
==== Nastavení privátní sítě ====
{{.:pasted:20221205-164935.png?400}}
{{.:pasted:20221205-164952.png?400}}
==== Nastavení bridge ====
{{.:pasted:20221205-165011.png?400}}
{{.:pasted:20221205-165026.png?400}}
===== Problém s Androidem 14 =====
Na Androidu 14 už není k dispozici L2TP/IPsec PSK tak, jak jsem ho používal dřív. V praxi to znamená, že starší postupy pro SoftEther přestaly být na novém telefonu použitelné. Podle diskusí byla podpora L2TP/IPsec PSK odstraněna už od Androidu 13.
V době psaní poznámek neměl SoftEther implementovanou podporu IKEv2. Sleduji proto tyto směry:
* [[https://github.com/NovaVPN/SoftEtherVPN|pokus o implementaci IKEv2 do SoftEtheru]]
* [[https://github.com/NovaVPN/SoftEtherVPN/issues/1|diskuse k licenci a integraci]]
* [[https://github.com/SoftEtherVPN/SoftEtherVPN/issues/13|žádost o implementaci IKEv2 v SoftEtheru]]
* [[https://strongswan.org/|strongSwan]] jako alternativu pro IKEv2
* [[https://www.wireguard.com/|WireGuard]] jako jiný směr VPN úplně mimo L2TP bridge scénář
===== WireGuard a bridge poznámka =====
U WireGuardu je problém v tom, že nativně řeší Layer 3, ne Layer 2 bridge. Pokud bych chtěl emulovat bridge, bylo by potřeba použít něco jako GRETAP nebo Geneve. K tomu jsem si odložil tyto odkazy:
* [[https://notes.superlogical.ch/pages/note_wg/nolayer2/|WireGuard without layer2]]
* [[https://gist.github.com/zOrg1331/a2a7ffb3cfe3b3b821d45d6af00cb8f6|WireGuard GRETAP gist]]
* [[https://www.root.cz/clanky/tunelujeme-ethernet-pres-wireguard-pomoci-protokolu-geneve/|Tunelujeme Ethernet přes WireGuard pomocí Geneve]]
===== Zdroje =====
* [[https://www.softether.org/|SoftEther.org]]
* [[https://www.softether.org/5-download|SoftEther download]]
* [[https://github.com/SoftEtherVPN/SoftEtherVPN_Stable|SoftEtherVPN_Stable]]
* [[https://www.cactusvpn.com/tutorials/how-to-set-up-softether-vpn-client-on-linux/|How to set up SoftEther VPN client on Linux]]
* [[https://github.com/NovaVPN/SoftEtherVPN|NovaVPN / SoftEtherVPN]]
* [[https://strongswan.org/|strongSwan]]
* [[https://www.wireguard.com/|WireGuard]]