WireGuard v LXC alebo vo VM na Proxmoxe: kde má bežať?
WireGuard môže bežať na hostiteľovi Proxmox, v kontajneri alebo vo VM. Rozhodujúce sú vlastníctvo jadra, kontrola nad rozhraním a obnova.
WireGuard potrebuje presne jedno jadro, ktoré vlastní jeho rozhranie, a tento fakt rozhoduje väčšinu debaty o umiestnení na Proxmoxe skôr, než sa do nej vôbec dostane výkon. LXC kontajner je pohľad menného priestoru hostiteľského jadra, zatiaľ čo VM bootuje vlastné. Užitočná otázka teda nie je, ktorá možnosť je ľahšia, ale ktoré jadro ste ochotní meniť a s akou cestou obnovy dokážete žiť. Odpovedzte na to a voľba medzi hostiteľom, kontajnerom alebo VM sa zvyčajne urobí sama.
LXC hosť pracuje vnútri hostiteľského jadra
Inštalácia wireguard-tools v kontajneri vám dá riadiaci program, nie vlastné jadro. Rozhranie wg0, ktoré vytvoríte, sa zaregistruje v sieťovom zásobníku hostiteľa a objaví sa v jeho zozname modulov. Preto kontajner môže prejsť každou kontrolou balíčkov a napriek tomu zlyhať na prvom príkaze wg, keď hostiteľskému jadru chýba modul. A referenčná príručka Proxmoxu ku kontajnerom dokumentuje tento model zdieľaného jadra spolu s hranicami menného priestoru a oprávnení, v ktorých pracujete.
Druhým obmedzením je oprávnenie. Zdvyhnutie rozhrania a priradenie adries k nemu vyžaduje práva správy siete v mennom priestore, ktorý ho vlastní, a neprivilegovaný kontajner tieto práva mapuje cez svoj používateľský menný priestor, namiesto toho aby ich držal priamo. Nikdy nesiahnite po plných oprávneniach ako po prvej odpovedi; pozrite sa, čo sa od kontajnera skutočne žiada, a potom to prideľte.
Jadro hostiteľa je tiež zdieľaná závislosť. Aktualizácia jadra Proxmoxu mení implementáciu WireGuardu pod každým kontajnerom naraz, čo je pohodlné, kým sa aktualizácia a očakávania kontajnera nezačnú rozchádzať.
Hostiteľ, kontajner, VM: čo každé umiestnenie skutočne vlastní
Umiestnenie na hostiteľovi stavia VPN do siete samotného hypervizora. Trasy, pravidlá firewallu a tunel sa stanú súčasťou obnovy hostiteľa a chyba tam môže vziať so sebou aj rozhranie správy. To je prijateľné pre infraštruktúrne smerovanie na hostiteľovi, ku ktorému sa dostanete cez konzolu, a bolestivé na vzdialenom stroji bez prístupu mimo pásma.
Kontajner drží službu zabalenú a reštartovateľnú, pričom si stále požičiava jadro hostiteľa. Hodí sa k zámerne zdieľanej službe so spoločným jadrom a dá vám malú jednotku na prestavbu. Nedáva nezávislé jadro, takže čokoľvek, čo vyžaduje konkrétny build modulu, ukazuje preč od tejto možnosti.
| 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í viac pamäte a ďalší systém na záplatovanie, a výmenou dostane tunel vlastné jadro, vlastnú smerovaciu tabuľku a hranicu snímky. Keď je VPN to, čo po zlej zmene vraciate späť, tá snímka za tú réžiu stojí.
Tri podmienky, ktoré vyberú za vás
Ak tunel potrebuje verziu jadra alebo funkciu WireGuardu, ktorú hostiteľ Proxmoxu nedodáva, zastavte sa tu a použite VM. Do kontajnera sa novšie jadro nainštalovať nedá a jadro hypervizora by ste nemali nahrádzať kvôli jednému hosťovi.
Ak je tunel bránou stránky pre skutočné LAN prefixy, spýtajte sa, kto už vlastní spiatočnú trasu. Kontajner vie smerovať prevádzku, ale jeho rozhrania sedia v zásobníku hostiteľa, takže hostiteľ nakoniec nesie časť konfigurácie, či ste to plánovali alebo nie. Umiestnenie na hostiteľovi je v tom úprimné; umiestnenie v kontajneri často nie.
Potom zvážte rádius dopadu chyby. Reštart kontajnera je lacný, obnova snímky VM predvídateľná a oprava siete hostiteľa môže vyžadovať fyzický alebo konzolový prístup. Správna voľba je tá, ktorej najhorší prípad dokážete skutočne obnoviť v hodine, keď nastane.
Štvrtá otázka je málokedy rozhodujúca, ale stojí za to ju vysloviť: potrebuje ešte niečo na hostiteľovi vidieť rozhranie tunela? Ak áno, umiestnenie na hostiteľovi alebo v kontajneri udrží túto viditeľnosť lokálnu, zatiaľ čo VM vás núti smerovať medzi hosťom a hostiteľom.
Dokážte umiestnenie, skôr než cez neho pustíte prevádzku
Po inštalácii overte, ktoré jadro rozhranie skutočne obsluhuje a či kontajner dostal dosť oprávnení, aby si ho udržal:
$ 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
Potom skontrolujte stranu preposielania z hostiteľa, pretože samotný handshake dokazuje len to, že tunel stojí. Použite ip route get pre adresu klienta a overte, že ďalší skok a rozhranie zodpovedajú návrhu a že spiatočná cesta na vzdialenej strane existuje.
Nechajte nasadenie s napísaným vlastníkom: ktoré jadro nesie implementáciu, ktorý menný priestor drží rozhranie a ktoré prefixy smie brána preposielať. Táto veta zabráni viac incidentom než akékoľvek benchmarkové porovnanie troch umiestnení.