OpenVPN se připojí, ale nic neteče: najděte vrstvu, kde paket umírá
Připojený tunel bez provozu má nejméně pět příčin. Dokažte naslouchající soket, zachyťte vnější paket a pak ať pravidlo pojmenují čítače nebo trasování.
OpenVPN hlásí připojeno a provoz se nehýbe, věta, která pokrývá nejméně pět nesouvisejících poruch. Úprava pravidel firewallu dřív, než víte, která vrstva selhává, znásobuje neznámé a nechává dalšímu inženýrovi chaos. Pracujte místo toho od procesu ven, protože každý krok níž buď vyčistí jednu fázi, nebo zúží místo, kde paket umírá. Pořadí je tu důležité: odchyt pořízený dřív, než víte, která adresa je vázaná, něco dokáže, jen ne to, co potřebujete.
Soket je buď vázaný, nebo není
Služba hlásící aktivitu může být stále vázaná na adresu nebo transport, který jste nezamýšleli. Zeptejte se samotného soketu: ss -lunp vypisuje UDP posluchače a ss -ltnp vypisuje TCP, a sloupec, který stojí za přečtení, je místní adresa, ne stav.
Prázdná odpověď obvykle znamená jedno ze tří: proces po startu skončil, načetl jiný konfigurační soubor, nebo naslouchá na jiné adrese, než na kterou se vytáčí.
ss -lunp | grep 1194
ss -ltnp | grep 1194
Direktiva local připíná posluchač k jedné adrese, takže klient mířící jinam na stejném hostiteli je odmítnut, zatímco služba zvenčí stále vypadá zdravě. Název instance také může ukazovat na soubor, který jste nikdy needitovali, což se děje na hostitelích se dvěma profily vedle sebe.
Zachyťte vnější paket, ne tunel
Filtrujte na fyzickém rozhraní a skutečném portu, s dosazeným vlastním rozhraním: tcpdump -ni eth0 udp port 1194. Odchozí pakety, na které se nic nevrací, ukazují na to, co je výš: filtrování poskytovatele, zařízení NAT nebo vzdálenou adresu, která není ta, kterou si myslíte. Ticho v obou směrech ukazuje na klientské směrování nebo místní firewall. Odpovědi, které dorazí bez pokroku tunelu, ukazují na řídicí kanál, tedy neshodu klíče nebo šifry, ne na filtrování.
Zachyťte oba směry a držte soubor krátký. Dlouhý odchyt pohřbí zajímavé tři sekundy a odpověď téměř vždy leží v první výměně.
Nejprve čítače, trasování jen když lžou
Začněte čítači, protože nic nestojí. Buď nft list ruleset, nebo iptables -L -n -v odpovídá na jedinou otázku, která tu má význam: odpovídalo pravidlo? Pořadí rozhoduje výsledek, protože první shoda vyhrává, proto široký DROP před pozdějším ACCEPT nechává ten ACCEPT mrtvý a proto přidání pravidla tak zřídka něco spraví.
Vlastnictví také mate lidi. Jádro přiřazuje lokálně vytvořené pakety procesu, který otevřel soket, a OpenVPN obvykle běží jako root, takže pravidlo navázané na běžné uživatelské ID nikdy nevidí provoz samotného tunelu. Zkontrolujte UID vlastníka, než rozhodnete, že pravidlo je špatné.
Jen když čítače zůstávají nejednoznačné, stojí log za hluk, a to jen pro úzký řez: pravidlo iptables, které omezuje rychlost a opatřuje své řádky prefixem, nebo pravidlo nftables s meta nftrace set 1 při běžícím nft monitor trace. Trasování pojmenuje řetěz a pravidlo, které paket přijalo nebo zahodilo. Potom obojí odstraňte a protokolování obsahu držte mimo.
Zkontrolujte i transport. Služba firewallu omezená na TCP nic neříká o UDP posluchači na tom čísle, takže pravidlo, které vypadá správně, může přesto zahodit každý paket.
Směrování a cesta zpět
Přijatý paket, který přesto mizí, vyžaduje prozkoumání cesty k cíli. ip route get hlásí trasu zvolenou pro jednu adresu a filtrování zpětné cesty může zahodit odpověď, která dorazí přes rozhraní, které by hlavní tabulka nikdy nezvolila. Symptom vypadá přesně jako zahození firewallem, proto tato kontrola přichází před dalším pravidlem NAT.
Na bráně zkontrolujte předávání a řetěz forward, ne řetěz input. Pak potvrďte, že vzdálená strana ví, jak dosáhnout zdrojové adresy, protože funkční odchozí cesta bez ničeho vracejícího se je v obou případech ticho.
Co musí záznam říct
U každé změny poznamenejte fázi, kterou jste testovali, důkaz, který jste přečetli, a hodnotu čítače na obou stranách. Právě tato poznámka dělá "teď to funguje" přežitelné při příští revizi.
Dvě zkratky drží poznámku poctivou. Paket, který nikdy neopustil hostitele, nemohl být zahozen pravidlem někde jinde, ať už konfigurace vzdálené strany vypadá jakkoli přesvědčivě. Paket, který odešel a vrátil se, posouvá otázku nad síťovou vrstvu, kde už čítače firewallu nemají co říct.