Považovat tun0 a VPN protokol za jednu věc posílá lidi do špatného logu. Rozhraní je lokální hranice, kde program v uživatelském prostoru vyměňuje IP pakety s jádrem. Protokol je to, co tento program s pakety dělá, jakmile je má: přenos, autentizace, šifrování a protějšek. Vytvoření zařízení nevybírá nic z toho.

Dvě součásti, jedna cesta paketu

Jádro zapisuje IP paket do zařízení a program ho čte z popisovače souboru. V opačném směru program zapíše paket zpět a jádro ho směruje, jako by dorazil na skutečné rozhraní. TUN přenáší IP, zatímco TAP přenáší ethernetové rámce. Přečtení paketu na této hranici ukáže rámování, a právě k tomu zařízení slouží.

Vše za touto hranicí je věc programu. Dva programy mohou používat stejný koncept rozhraní a dělat s pakety úplně různé věci. Samotné zařízení nemá názor na to, co bude následovat. Popisovač souboru je jediný úchyt, který program na straně jádra má.

Vytvořte zařízení a pak sledujte hranici

Když testujete hranici, vytvořte zařízení záměrně. Trvalé zařízení přežije proces, který ho vytvořil, což je užitečné pro experimenty a zároveň častý zdroj zmatku později. Než obviníte VPN, zkontrolujte příznaky a vlastníka.

sudo ip tuntap add dev tun9 mode tun user alice
ip -d link show tun9

Podrobnosti spojení ukazují typ zařízení a přiřazeného vlastníka. Pokud ho žádný proces nemá otevřené, pakety do něj zapsané nikam nejdou. Zařízení bez přiřazeného procesu může v seznamu spojení vypadat zdravě, přitom nic nepředává.

Co název rozhraní nemůže slíbit

Název rozhraní neříká nic o šifrování ani autentizaci. Program může pakety zabalit do TLS, do vlastního protokolu, do IPsec nebo do ničeho. Volba TUN místo TAP mění rámování na hranici, ne bezpečnostní návrh. Volba rámování je skutečná a je mnohem menší než bezpečnostní otázka.

Detekce funguje stejně: pozorovatel na drátě vidí vnější protokol, ne štítek říkající, které lokální zařízení ho vytvořilo. Tunel, který vypadá jako něco jiného, to dělá kvůli svému vnějšímu protokolu, ne kvůli názvu rozhraní. Pozorovatel nevidí, které lokální zařízení paket vytvořilo, jen jak paket vypadá. Při srovnávání produktů držte tyto dvě otázky oddělené, protože jedna odpověď nikdy neimplikuje druhou.

Přizpůsobte opravu selhávající fázi

Když se něco rozbije, oddělte fáze selhání. Chybějící zařízení, chyba oprávnění a odmítnuté přihlášení dávají různé důkazy a různé opravy. Nejdřív čtěte lokální stav, pak vlastní log programu, pak pohled protějšku. Přečtěte všechny tři, než něco změníte.

ip -d link show tun0
journalctl -u openvpn-client@corp --since '10 min ago'

Pokud zařízení existuje a nějaký proces ho drží, lokální hranice funguje a problém je dál. Pokud zařízení chybí, žádná kontrola přihlašovacích údajů nepomůže. Fázi, kterou umíte pojmenovat, umíte i otestovat. Dokumentace TUN/TAP popisuje hranici a model zařízení.

Související články