infrastruktura:vpn:softether

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
infrastruktura:vpn:softether [09.03.2026 20:24] – Migrace z it:software:softether, oprava odkazů na média. Petr Nosekinfrastruktura:vpn:softether [23.04.2026 12:56] (aktuální) – Doplnění detailů o chybě -m64 na ARM: plný výpis chyby, konkrétní proměnné v Makefile, poznámka k aktualizaci Petr Nosek
Řádek 1: Řádek 1:
 ====== SoftEtherVPN ====== ====== SoftEtherVPN ======
  
-Popis instalace mám uvedený na [[https://petrnosek.cz/softether-vpn-instalace-kompilace-a-udrzovani-aktualizaci/|blogu]]. Tady uvedu kratší aktualizovanou verzi čerpající ze zdroje: https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/src/BUILD_UNIX.md+[[https://www.softether.org/|SoftEther VPN]] je multiplatformní VPN server klient, který umí více typů připojení včetně L2TP/IPsecNa 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.
  
-ed kompilací jsem musel zajistit, že mám nainstalované všechny potřebné knihovny - jinak při kompilaci dojde k chybě. +===== Instalace a kompilace serveru ===== 
 + 
 +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:
  
 <code bash> <code bash>
Řádek 9: Řádek 13:
 </code> </code>
  
-Dále jsem pokračoval ke stažení a kompilací zdrojového kódu. Později jsem zjistil, že takto jsem nainstaloval nestabilní (developerskou) verzi. +Stabilní větev lze stáhnout z [[https://github.com/SoftEtherVPN/SoftEtherVPN_Stable|SoftEtherVPN_Stable]]:
-<code bash> +
-git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git +
-cd SoftEtherVPN +
-git submodule update --init --recursive +
-./configure +
-make -C build +
-make -C build install +
-</code>+
  
-Instalace stabilní verze je přes tento postup: 
 <code bash> <code bash>
 git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git
Řádek 28: Řádek 23:
 </code> </code>
  
-Když budu chtít aktualizovat kód, tak jednodušaktualizuji před dalšími kroky git smažu edchozí kompilaci.+==== Chyba -m64 na ARM serverech ==== 
 + 
 +Na ARM serverech se při kompilaci může objevit tato chyba: 
 + 
 +<code> 
 +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 
 +</code> 
 + 
 +Příznak ''-m64'' je specifický pro architekturu x86-64 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 kompilaci chybují knihovny, doinstalovat:
  
 <code bash> <code bash>
-git pull +apt-get install libreadline-dev zlib1g-dev
-make clean+
 </code> </code>
  
 +===== Aktualizace SoftEther VPN =====
  
-Na závěr sekvence íkazů pro kompilaci a instalaci:+Složku se zdrojáky si nechávám na serveru, aby šla aplikace průběžně aktualizovat es Git. Postup byl:
  
 <code bash> <code bash>
 +git pull
 +make clean
 ./configure ./configure
 make make
Řádek 44: Řádek 58:
 </code> </code>
  
 +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''.
  
-SoftEther VPN je nainstalovaný v adresáři /usrJe tam klient i server. Konfigurační soubor serveru /usr/vpnserver/vpn_server.config není aktualizací nijak dotčen – byly aktualizovány binární soubory. And pro jistotu ještě zmíním, že konfigurační soubor serveru se needituje ručně, ale skrze vpn klienta /usr/vpncmd/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 =====
  
-Konfigurace server se po instalaci nachází ve složce **/usr/local/libexec/softether/vpnserver**. +Pokud je na serveru zapnutý [[infrastruktura:bezpecnost:fail2ban|fail2ban]], jde SoftEther chránit i proti brute-force pokusůmPraktický 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.
- +
-Spustitelné soubory ve složce **/usr/local/bin**. +
  
 ===== Konfigurace Ubuntu pro připojení VPN přes L2TP ===== ===== Konfigurace Ubuntu pro připojení VPN přes L2TP =====
Řádek 61: Řádek 74:
 </code> </code>
  
-V nastavení si vyhledám síť a dám idání nového VPN připojení a volím možnost **Layer 2 Tunneling Protocol (L2TP) - Kompatibilní s L2TP VPN servery od Microsoftu ostatních.**+V nastavení sítě se pak 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íť bridge do domácí sítě.
  
 {{.:pasted:20221205-135215.png}} {{.:pasted:20221205-135215.png}}
  
 ==== Nastavení privátní sítě ==== ==== Nastavení privátní sítě ====
- 
-And poté se v síťovém nastavení desktopu objeví možnost konfigurace VPN. Přidám nové připojení a nejprve budu konfigurovat VPN síť, na které servisuji počítače. Počítače se k ní připojují, ovšem internet jedou ze své sítě. Jsou tedy v oddělené virtuální síti. 
  
 {{.:pasted:20221205-134252.png}} {{.:pasted:20221205-134252.png}}
Řádek 75: Řádek 88:
 {{.:pasted:20221205-120809.png}} {{.:pasted:20221205-120809.png}}
  
-And takto nastavení pod PPP Settings:+takto nastavení pod PPP Settings:
  
 {{.:pasted:20221205-120707.png}} {{.:pasted:20221205-120707.png}}
  
-Ještě jsem ručně nastavil bránu směřování v rámci interní servisní sítě:+Ruční nastavení brány routingu pro servisní síť:
  
 {{.:pasted:20221205-120957.png}} {{.:pasted:20221205-120957.png}}
- 
  
 ==== Nastavení bridge ==== ==== Nastavení bridge ====
  
-Toto nastavení využívám ve chvíli, kdy se chci připojit do domácí sítě. Počítač se pak chová tak, jako by fyzicky byl v domácí síti.  +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}} {{.:pasted:20221205-133333.png}}
  
-Tlačítko IPsec Settings+IPsec Settings:
  
 {{.:pasted:20221205-133357.png}} {{.:pasted:20221205-133357.png}}
  
-Tlačítko PPP Settings+PPP Settings:
  
 {{.:pasted:20221205-133849.png}} {{.:pasted:20221205-133849.png}}
  
-Nastavení IPv4:+IPv4 nastavení:
  
 {{.:pasted:20221205-133442.png}} {{.:pasted:20221205-133442.png}}
- 
  
 ===== Konfigurace Androidu pro připojení VPN přes L2TP ===== ===== Konfigurace Androidu pro připojení VPN přes L2TP =====
  
-U Androidu není potřeba root telefonu, aby bylo možné se připojit do VPN. Zejména tedy pokud jde o bridge. +starších verzí Androidu nebyl potřeba root telefonu. Všechno se řešilo přes ''Síť a internet -> VPN''.
- +
-e jsem řešil v nastavení sítě: **Síť a internet -> Síť VPN**.+
  
 ==== Nastavení privátní sítě ==== ==== Nastavení privátní sítě ====
Řádek 115: Řádek 123:
  
 {{.:pasted:20221205-164952.png?400}} {{.:pasted:20221205-164952.png?400}}
- 
  
 ==== Nastavení bridge ==== ==== Nastavení bridge ====
Řádek 122: Řádek 129:
  
 {{.:pasted:20221205-165026.png?400}} {{.:pasted:20221205-165026.png?400}}
- 
  
 ===== Problém s Androidem 14 ===== ===== Problém s Androidem 14 =====
  
-Při pokusu o přidání VPN sítě v Android 14 jsem narazil na problém. Je možné přidat pouze tyto typy VPN: +Na Androidu 14 už není k dispozici L2TP/IPsec PSK tak, jak jsem ho používal dřívV 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.
-  +
-  * IKEv2/IPSec MSCHAPv2 +
-  * IKEv2/IPSec PSK +
-  * IKEv2/IPSec RS +
- +
-Takže výše uvedený postup nebude pro Android 14 fungovat. Zdá se, že tento problém už je od Android 13 a podle diskusí to vypadá, že podpora L2TP/IPSec PSK byla odstraněna. +
- +
-Bohužel k datu 10.12.2023 nemá SoftEtherVPN implementovánu podporu pro IKEv2. Už vznikly první pokus o [[https://github.com/NovaVPN/SoftEtherVPN|implementaci IKEv2]]. V [[https://github.com/NovaVPN/SoftEtherVPN/issues/1|diskusi]] jsem objevil, že se někdo ptá na licenci. To navazuje na [[https://github.com/SoftEtherVPN/SoftEtherVPN/issues/13|žádost o implementaci IKEv2 do SoftEther]]. Vývojář ke konci k datu 31.října 2023 píše, že sice nemá moc času, ale začíná postupně se začleněním kódu. +
- +
-Tak je zde reálná šance, že se podpora do IKEv2 do SoftEhter dostane, zůstává však otázkou, kdy to bude. +
- +
-Hledal jsem možnostijak dostat VPN do nového telefonu. [[https://www.abclinuxu.cz/blog/Max_Devaine/2020/6/zapomente-na-openvpn-pouzivame-ikev2-uvod|Tento článek]] dává slušný přehled o možnostech. Autor píše o projektu [[https://strongswan.org/|strongSwan]], který by měl podporu IKEv2 mít implementovanou. +
- +
-Protože mám starší jádro, tak mě bohužel patrně čeká kompilace jádra kvůli [[https://docs.strongswan.org/docs/5.9/install/kernelModules.html|potřebným modulům]]. +
- +
-[[https://github.com/hwdsl2/setup-ipsec-vpn/tree/master|Tady je projekt]], který by měl pomoct s konfigurací, nicméně používá se s forkem Libreswan. +
- +
- +
-Další možnou alternativou na prozkoumání je [[https://www.wireguard.com/|WireGuard]]. To by znamenalo nainstalovat si aplikace [[https://play.google.com/store/apps/details?id=com.wireguard.android|WireGuard]] do telefonu a obejít tak problém s IKEv2. +
- +
- +
-==== WireGuard ==== +
- +
-U WireGuardu mám zase problém, že nelze nastavit VPN v režimu bridge, ale jako oddělená síť. WireGuard umí pouze Layer3. Aby bylo možné se připojit do sítě skrz Layer2, je potřeba použít GRETAP +
- +
-O tom píšou tyto články: +
- +
-* https://notes.superlogical.ch/pages/note_wg/nolayer2/ +
-* https://gist.github.com/zOrg1331/a2a7ffb3cfe3b3b821d45d6af00cb8f6  +
-* https://www.abclinuxu.cz/poradna/linux/show/468903 +
-* https://www.root.cz/clanky/tunelujeme-ethernet-pres-wireguard-pomoci-protokolu-geneve/ +
- +
-Zdá se, že tento přístup má své limity. První limit je v tom, že tak propojím pouze 2 zařízení a nějaký management více zařízení bude komplikovaný. And druhý - hlavní problém - že toto propojení se patrně nepodaří provést skrz Android aplikaci.  +
- +
- +
-==== Problematika s L2TP a Android 14 ==== +
- +
-Postupně jsem došel k závěru, že nemá smysl se snažit implementovat L2TP - tedy VPN přes Network Layer 2. Podpora byla vyřazena z Androidu a už se nevrátí.  +
- +
-Mít VPN v režimu bridge už není cesta. Cesta je implementace VPN skrze Network Layer 3 a použít například VPN Wireshark. Bude to fungovat tak, že po připojení do sítě VPN, budu mít jiný rozsah IP adres než v lokální síti. Abych se dostal do lokální sítě, mám tyto možnosti: +
- +
-1. Routované VPN (s použitím Statických nebo Dynamických Rout): +
- +
-  * V tomto případě, když se připojíte přes VPN, získáte IP adresu z rozsahu, který je určen pro VPN klienty (např. 192.168.235.0/24). +
-  * Na VPN serveru pak musíte nastavit routovací pravidla, která umožní komunikaci mezi sítí VPN klientů a vaší interní sítí (192.168.234.0/24). +
-  * To znamená, že VPN server bude fungovat jako router mezi dvěma sítěmi. +
- +
-2. NAT (Network Address Translation): +
- +
-  * Nečíslovaný seznamTato metoda spočívá v tom, že VPN server bude překládat IP adresy mezi VPN klienty a interní sítí. +
-  * Při použití NAT, mohou být všechna zařízení v interní síti viditelná pro VPN klienty, ale komunikace bude vypadat, jako by pocházela od VPN serveru. +
-  * Provedete NAT konfiguraci na serveru tak, aby překládal adresy z VPN rozsahu (192.168.235.0/24) na adresy interní sítě (192.168.234.0/24). +
-  * Toto se obvykle provádí pomocí iptables v Linuxu. Příklad pravidla by mohl být: **iptables -t nat -A POSTROUTING -s 192.168.235.0/24 -o eth0 -j MASQUERADE**, kde eth0 je síťové rozhraní připojené k interní síti. +
- +
-3. Split Tunneling: +
-  * Split tunneling umožňuje, aby část provozu šla přes VPN a část mimo ni. +
-  * Můžete nastavit, aby veškerý provoz směřující do vaší interní sítě šel přes VPN, zatímco veškerý ostatní internetový provoz šel mimo VPN. +
-  * To umožňuje přístup k interním zdrojům bez zbytečného zatěžování VPN spojení.+
  
-4Přístup k Specifickým Službám nebo Zařízením: +V době psaní poznámek neměl SoftEther implementovanou podporu IKEv2Sleduji proto tyto směry:
-  * Pokud potřebujete přistupovat pouze k některým konkrétním službám nebo zařízením v interní síti, můžete použít port forwarding nebo podobné techniky na VPN serveru. +
-  * Tímto způsobem můžete umožnit přístup k určitým službám (např. webový server, FTP, atd.) prostřednictvím VPN.+
  
 +  * [[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ář
  
-V mém případě jdu cestou číslo 2 - NAT konfigurace VPN serveru.+===== WireGuard a bridge poznámka =====
  
-Jak to funguje?+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:
  
-  * Když se VPN klient připojí, získá IP adresu z rozsahu 192.168.235.0/24. +  * [[https://notes.superlogical.ch/pages/note_wg/nolayer2/|WireGuard without layer2]] 
-  * Když klient pošle požadavek na zařízení v interní síti (192.168.234.0/24), požadavek projde přes VPN server. +  * [[https://gist.github.com/zOrg1331/a2a7ffb3cfe3b3b821d45d6af00cb8f6|WireGuard GRETAP gist]] 
-  * VPN server použije NAT k překladu adresy z VPN rozsahu na adresu v interní síti, takže požadavek vypadá, jako by pocházel z VPN serveru. +  * [[https://www.root.cz/clanky/tunelujeme-ethernet-pres-wireguard-pomoci-protokolu-geneve/|Tunelujeme Ethernet es WireGuard pomocí Geneve]]
-  * Odpověď od interního zařízení je poslána zpět na VPN server, který pak ekládá adresu zpět a odesílá odpověď VPN klientovi.+
  
 +===== 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]]
  • infrastruktura/vpn/softether.1773084287.txt.gz
  • Poslední úprava: 09.03.2026 20:24
  • autor: Petr Nosek