WireGuard v LXC nebo ve VM na Proxmoxu: kde má běžet?
WireGuard může běžet na hostiteli Proxmox, v kontejneru nebo ve VM. Rozhodujícími faktory jsou vlastnictví jádra, kontrola nad rozhraním a obnova.
WireGuard potřebuje přesně jedno jádro, které vlastní jeho rozhraní, a tento fakt rozhoduje většinu debaty o umístění na Proxmoxu dřív, než se do ní vůbec dostane výkon. LXC kontejner je pohled jmenného prostoru hostitelského jádra, zatímco VM bootuje vlastní. Užitečná otázka tedy není, která možnost je lehčí, ale které jádro jste ochotni upravovat a s jakou cestou obnovy dokážete žít. Odpovězte na to a volba mezi hostitelem, kontejnerem nebo VM se obvykle udělá sama.
LXC host pracuje uvnitř hostitelského jádra
Instalace wireguard-tools uvnitř kontejneru vám dá řídicí program, ne vlastní jádro. Rozhraní wg0, které vytvoříte, se zaregistruje v síťovém zásobníku hostitele a objeví se v seznamu modulů hostitele. Proto kontejner může projít každou kontrolou balíčků a přesto selhat na prvním příkazu wg, když hostitelskému jádru chybí modul. A referenční příručka Proxmoxu ke kontejnerům dokumentuje tento model sdíleného jádra spolu s hranicemi jmenného prostoru a oprávnění, uvnitř kterých pracujete.
Druhým omezením je pravomoc. Zvednout rozhraní a přiřadit k němu adresy vyžaduje práva správy sítě uvnitř jmenného prostoru, který ho vlastní, a neprivilegovaný kontejner tato práva mapuje přes svůj uživatelský jmenný prostor, místo aby je držel přímo. Nikdy nesahejte po plných oprávněních jako po první odpovědi; podívejte se, co se po kontejneru skutečně chce, a pak to přidělte.
Jádro hostitele je také sdílená závislost. Aktualizace jádra Proxmoxu mění implementaci WireGuardu pod každým kontejnerem najednou, což je pohodlné, dokud se aktualizace a očekávání kontejneru nerozejdou.
Hostitel, kontejner, VM: co každé umístění skutečně vlastní
Umístění na hostiteli staví VPN do sítě samotného hypervisoru. Trasy, pravidla firewallu a tunel se stanou součástí obnovy hostitele a chyba tam může vzít s sebou i rozhraní pro správu. To je přijatelné pro infrastrukturní směrování na hostiteli, ke kterému se dostanete přes konzolu, a bolestivé na vzdáleném stroji bez přístupu mimo pásmo.
Kontejner drží službu zabalenou a restartovatelnou, přitom si půjčuje jádro hostitele. Hodí se pro záměrnou službu se sdíleným jádrem a dává vám malou jednotku k přestavění. Nedává vám nezávislé jádro, takže cokoli potřebuje konkrétní build modulu, míří od této možnosti pryč.
| Placement | Kernel owner | Typical failure mode |
|---|---|---|
| Proxmox host | Hypervisor | A routing change breaks host management access |
| LXC container | Host kernel, container namespace | Missing capability or missing module at wg0 creation |
| Virtual machine | Guest kernel | Extra maintenance and a second patch cycle |
VM stojí víc paměti a další systém k záplatování, a výměnou dostane tunel vlastní jádro, vlastní směrovací tabulku a hranici snímku. Když je VPN to, co po špatné změně vracíte zpět, ten snímek za tu režii stojí.
Tři podmínky, které vyberou za vás
Pokud tunel potřebuje verzi jádra nebo funkci WireGuardu, kterou hostitel Proxmoxu nedodává, zastavte se tady a použijte VM. Do kontejneru novější jádro nainstalovat nelze a jádro hypervisoru byste neměli nahrazovat kvůli jednomu hostu.
Pokud je tunel bránou stránky pro skutečné LAN prefixy, zeptejte se, kdo už vlastní zpětnou trasu. Kontejner umí směrovat provoz, ale jeho rozhraní sedí v zásobníku hostitele, takže hostitel nakonec část konfigurace nese, ať jste to plánovali nebo ne. Umístění na hostiteli je v tom upřímné; umístění v kontejneru často ne.
Pak zvažte rádius dopadu chyby. Restart kontejneru je levný, obnova snímku VM předvídatelná a oprava sítě hostitele může vyžadovat fyzický nebo konzolový přístup. Správná volba je ta, jejíž nejhorší případ dokážete skutečně obnovit v hodině, kdy nastane.
Čtvrtá otázka je málokdy rozhodující, ale stojí za to ji vyslovit: potřebuje ještě něco na hostiteli vidět rozhraní tunelu? Pokud ano, umístění na hostiteli nebo v kontejneru udrží tuto viditelnost lokální, zatímco VM vás nutí směrovat mezi hostem a hostitelem.
Dokažte umístění, než přes něj pošlete provoz
Po instalaci ověřte, které jádro rozhraní skutečně obsluhuje a zda kontejner dostal dost pravomocí, aby si ho udržel:
$ pct config 101 | grep -E 'unprivileged|features'
unprivileged: 1
$ pct exec 101 -- wg show
interface: wg0
listening port: 51820
$ pct exec 101 -- ip -4 addr show wg0
inet 10.60.0.2/24 scope global wg0
Pak zkontrolujte stranu forwardování z hostitele, protože samotný handshake dokazuje jen to, že tunel stojí. Použijte ip route get pro adresu klienta a ověřte, že další skok a rozhraní odpovídají návrhu, a že zpětná cesta na vzdálené straně existuje.
Nechte nasazení s napsaným vlastníkem: které jádro nese implementaci, který jmenný prostor drží rozhraní a které prefixy smí brána forwardovat. Tahle věta zabrání víc incidentům než jakékoli benchmarkové srovnání tří umístění.