Last Updated on 15/11/2024 by administrator
Proxmox – Install WireGuard server
Proxmox – Install WireGuard server
Motivace:
WireGuard je moderní, jednoduchý a efektivní protokol pro VPN, který se stal velmi populárním díky své nízké složitosti a vysoké bezpečnosti.
WireGuard má několik klíčových výhod oproti OpenVPN a IPsec (StrongSwan), které ho činí atraktivní volbou pro různé VPN nasazení. Ačkoli všechny tři technologie mají své silné stránky, WireGuard vyniká především v těchto oblastech:
Zde je zkrácený přehled výhod WireGuard oproti OpenVPN a IPsec (StrongSwan):
1. Výkon a efektivita
- WireGuard má nižší režii a využívá moderní šifrovací algoritmy (Curve25519, ChaCha20), což poskytuje rychlejší připojení a nižší latenci oproti OpenVPN a IPsec.
2. Jednoduchost a konfigurace
- WireGuard je snadnější na konfiguraci a má jednoduchý kód (4000 řádků), což usnadňuje nasazení a auditování.
- OpenVPN a IPsec mají složitější konfigurace a více možností, což může být náročné na správu.
3. Bezpečnost
- WireGuard používá moderní šifrovací algoritmy a má jednodušší auditovatelnost, což zvyšuje bezpečnost.
- OpenVPN a IPsec mají silnou bezpečnost, ale mohou používat starší šifrovací algoritmy a jsou složitější na auditování.
4. Nízké nároky na hardware
- WireGuard je efektivní a má nízké nároky na hardware, což je ideální pro mobilní zařízení a zařízení s nízkým výkonem.
- OpenVPN a IPsec mají vyšší režii a větší nároky na procesor a paměť.
5. Kompatibilita a podpora
- WireGuard je podporován na všech hlavních platformách (Linux, Windows, macOS, iOS, Android) a je často integrován přímo v jádru Linuxu.
- OpenVPN a IPsec mají širší historii, ale vyžadují často externí software a složitější nastavení.
6. Mobilita a připojení
- WireGuard je ideální pro mobilní zařízení, protože používá statické klíče a má nižší režii, což je výhodné pro časté změny IP adres.
- OpenVPN a IPsec mají složitější metody správy dynamických IP adres.
OS:
Implementace byla prakticky prováděna na open-source platformě Proxmox verze 8.2-7.
Implementace [1]:
Instalace WireGuard na Proxmox (Proxmox – Install WireGuard server):
Pro vytvoření nového CT LXC v Proxmox VE, je nutné zadat příkaz níže přímo pod Proxmox VE serverem. Nevytvářet nový CT (script Vám to „nesežere“) Ten bude vytvořen právě tímto scriptem níže:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/wireguard.sh)"
Pozn. Je doporučeno script výše přímo přes shell v prohlížeči Proxmox mod, než použít SSH, mohou vzniknout potencionální komplikace viz. se ukáže hláška – It’s advisable to utilize the Proxmox shell rather than SSH, as there may be potential complications with variable retrieval.
Zobrazí průvodce instalací, kliknout na Yes:
Zde bude zvoleno Advanced, jelikož si chci CT kontejner customizovat (zvolit si statickou IP adresu, zvolit si distribuci, a číslo CT), nicméně je možné ponechat nastavení v defaultním módu:
Jako distribuce byla použita Ubuntu 24.04. Bude se jednat o privilegovaný kontejner (Container Type 0) s číslem ID 104 a jeho jméno bude wireguard. Doporučuje se použít 4 GB diskové kapacity 1 CPU a 512 MB RAM. Jako IP adresa byla použita 192.168.0.104/24 s defaultní branou 192.168.0.1, DNS serverem 192.168.0.103 a doménovým jménem lan. Všechno info je viz níže:
Using Advanced Settings
Using Distribution: ubuntu
Using ubuntu Version: 24.04
Using Container Type: 0
Using Root Password: nejakeheslo
Container ID: 104
Using Hostname: wireguard
Using Disk Size: 4
Allocated Cores: 1
Allocated RAM: 512
Using Bridge: vmbr0
Using IP Address: 192.168.0.104/24
Using Gateway IP Address: 192.168.0.1
Using APT-Cacher IP Address: Default
Disable IPv6: yes
Using Interface MTU Size: Default
Using DNS Search Domain: lan
Using DNS Server IP Address: 192.168.0.103
Using Vlan: Default
Enable Root SSH Access: yes
Enable Verbose Mode: no
Pozn. WireGuard potřebuje přístup k síťovým rozhraním a potřebuje provádět operace na úrovni jádra, jako je konfigurace tunelů a manipulace s IP tabulkami a síťovým rozhraním. Tyto operace vyžadují root oprávnění a přístup k síťovým zařízením v rámci hostitelského systému, proto je potřeba použit privilegovaný kontejner. Osobně se mi CT nevytvořil, když jsem použil neprivilegovaný kontejner.
Vybrat příslušný disk pro instalaci WireGuard:
Proces vytváření WireGuard LXC kontejneru:
Creating a Wireguard LXC using the above advanced settings ✓ Using local for Template Storage. ✓ Using local-lvm for Container Storage. ✓ Updated LXC Template List ✓ LXC Container 104 was successfully created. ✓ Started LXC Container ✓ Set up Container OS ✓ Network Connected: 192.168.0.104 ✓ IPv4 Internet Connected ✗ IPv6 Internet Not Connected ✓ DNS Resolved github.com to 140.82.121.3 ✓ Updated Container OS ✓ Installed Dependencies ✓ Installed WireGuard ✓ Installed WGDashboard ✓ Created Service ✓ Cleaned ✓ Completed Successfully!
WGDashboard should be reachable by going to the following URL.
http://192.168.0.104:10086 admin|admin
Konfigurace Wireguard:
WireGuard management probíhá přes webový prohlížeč a to v tomto případě na adrese a portu: http://192.168.0.104:10086
Při přihlášení pod admin/admin bude vyzváno k vytvoření uživatelskému jménu a heslu:
Volitelně je možné použít multifaktorovou autentizaci. Nicméně tento krok bude přeskočen kliknutím níže na I don’t need MFA:
V rubrice Settings > Peers Settings se konfigurují všechny parametry, které se budou používat pro VPN klienty. Jelikož používám svůj vlastní DNS server měním IP adresu na 192.168.0.103.
V poli Peer Remote Endpoint je potřeba vyplnit Vaši veřejnou IP adresu či doménové na kterém bude zvenku WireGuard dostupný:
Pro vytvoření nového Wireguard VPN serveru kliknout na tlačítko plus:
Zvolit jakékoliv jméno nového VPN serveru (může jich být více vytvořeno později), v tomto případě to bude VPN1. Veřejný klíč (Public key) a privátní klíč (Private key) se vytvoří automaticky. Pro VPN klienty bude použitý subnet 10.10.10.10/24. Oficiální port pro Wireguard je UDP/51820. Nicméně bude nastaven např. na UDP/52799, čímž bude zlepšeno bezpečností opatření.
Vše ostatní je ponecháno v defaultním nastavení. Pro dokončení kliknout dole na Save:
V rubrice Settings > WireGuard Configuration Setings > Toggle When Start Up zakliknout tuto možnost, aby se po rebootu kontejneru spustil VPN server automaticky a nebyla ho potřeba manuálně nahazovat:
Pod rubrikou Home byl tedy vytvořen VPN server s názvem VPN1. Nahoře vpravo pod Status aktivovat VPN server. Pro vytvoření nového VPN klienta kliknout dole na Peer:
Přístup k Wireguard VPN serveru z internetu:
Pro přístup z internetu na VPN server je potřeba mít veřejnou IP adresu (zeptat se svého poskytovatele připojení). Tuto veřejnou IP adresu je potřeba namapovat k VPN serveru. To se nejčastěji provádí na routeru přes port forwarding (přesměrování portů), kde je potřeba povolit – v tomto případě port UDP/52799. Každý router má ve svém nastavení port forwarding jinde. Např. TP-Link ma tuto funkci pod Forwarding > Virtual Servers. Obecný průvodce pro několik routerů, kde nastavit port forwarding je možné najít zde:
https://www.noip.com/support/knowledgebase/general-port-forwarding-guide/
Vytvoření VPN klientů (VPN peers):
WireGuard klient má podporu pro mnoho OS a to např. Windows, Linux, Android či macOS, ….
Budou vytvořeni 3 VPN klienti pro různá OS:
- Windows (s názvem profilu: peer1-windows)
- Ubuntu (s názvem profilu: peer2-ubuntu)
- Android (s názvem profilu: peer3-android)
Pro vytvoření VPN klienta kliknout níže na Peer:
Stačí vyplnit pouze libovolné jméno, což je v tomto případě peer1-windows. Pokud je potřeba vybrat jen určitý provoz, který se bude směrovat do VPN tunelu (Split-Tunneling) definují se v parametru Endpoint Allowed IP všechny IP adresy a subnety. V tomto případě je použito 0.0.0.0/0 čili tunelu se všechen provoz přes VPN tunel. Kliknutím na Add bude přídán nový VPN klient.
Pozn: Pokud se použije Split-Tunneling a je ještě potřeba aby se VPN klienti mezi sebou „viděli“ je nutné ještě přidat VPN IP subnet což je v tomto případě 10.10.10.0/24 v poli Endpoint Allowed IP. Pokud se použije Full-Tunneling (0.0.0.0/0) jak je ukázáno na obrázku níže, není potřeba nic přidávat.
Takto byly vytvoření další dva VPN klienti s názvem peer2-ubuntu a peer3-android stejně jako peer1-windows:
Pod VPN konfiguraci se objeví vytvořený VPN peer. Kliknutím na tři tečky lze konfiguraci pro VPN klienta stáhnout několika způsoby viz níže:
- Stažením souboru .conf souboru
- QR kódem
- Zobrazením Peer konfiguračního souboru
- Join linkem
Instalace WireGuard klienta na Windows 11:
Stáhnout WireGuard klienta a po instalaci a spuštění kliknout na Add Tunnel a importovat .conf soubor:
Tlačítkem Activate dojde k připojení na WireGuard server:
Došlo k úspěšnému připojení:
Instalace WireGuard klienta na Ubuntu 24.04 LTS [2]:
Aktualizace seznamu balíčků z repozitářů:
sudo apt update
Instalace Wireguard:
sudo apt install wireguard
Zkopírovat konfiguraci pro VPN klienta do souboru wg0.conf ve složce /etc/wireguard/:
sudo vi /etc/wireguard/wg0.conf
Připojení na WireGuard server:
sudo wg-quick up wg0
Výpis po aplikaci sudo wg-quick up wg0 příkazu:
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.10.10.2/32 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] nft -f /dev/fd/63
Ověření navázaného připojení:
sudo wg show
Výpis příkazu sudo wg show bude vypadat podobně jako níže:
interface: wg0 public key: HRm2rFtfn9jBRCr3pLJ/fNJGIMc+KqOyVBJq9x8L7x0= private key: (hidden) listening port: 35086 fwmark: 0xca6c peer: lz8+Be8emkufMH80iRoO+qdPcsFO46ACSuoZpOiH5V4= endpoint: 1.2.3.4:52799 allowed ips: 0.0.0.0/0 latest handshake: 9 seconds ago transfer: 92 B received, 180 B sent persistent keepalive: every 21 seconds
Pro odpojení k WireGuard serveru, aplikovat příkaz níže:
sudo wg-quick down wg0
Instalace WireGuard klienta na Android:
Stáhnout WireGuard klienta a po instalaci a spuštění kliknout na „plusko“:
Opět ja na výběr několik možností jak importovat .conf file, viz níže:
Libovolně pojmenovat jméno tunelu a kliknout na Create Tunnel:
Pro připojení k VPN serveru kliknout na přepínač:
Nyní došlo k připojení na VPN server. Pro ověření připojení kliknout na profil VPN tunelu:
V profilu lze vidět všechny parametry a statistiky:
Ve WG Dasboard WireGuard serveru lze vidět, že statistiky i to, že se všichni 3 VPN klienti úspěšně připojili:
Proxmox – Install WireGuard server
Řešení problémů:
1) Při po připojení k WireGuard nelze přistoupit na IP adresy v LAN síti – General failure [3]
Pokud se WireGuard server nachází ve stejném subnetu jako VPN klient na OS Windows, nelze přistoupit k žádné IP adrese na subnetu. Při „pingnutí“ na jakoukoliv IP adresu v podsíti ze zobrazí zpráva General failure.
C:\Windows\System32>ping 192.168.0.100 -t Pinging 192.168.0.100 with 32 bytes of data: General failure. General failure. General failure. General failure.
Při zkoumání tento problém nastával jen z OS Windows, Ubuntu 24.04 LTS či Android nevykazovaly tyto známky chyby
Řešení problému [3]:
Pro VPN klienta běžící pod OS Windows je potřeba přidat k 0.0.0.0/0 ještě navíc lokální subnet, což je v tomto případě 192.168.0.0/24. Pro úpravu .conf souboru kliknout v WGdashboardu na tři tečky a Peer Settings:
a přidat požadovaný subnet a uložit:
Nový konfigurační soubor je potřeba znovu naimportovat do WireGuard klienta na OS Windows.
Zdroj:
[1] https://www.xda-developers.com/host-vpn-on-proxmox-guide/
[2] https://serverspace.io/support/help/how-to-install-wireguard-vpn-client-on-ubuntu-linux/