Předat klientovi adresu resolveru určuje, kam se dotazy posílají, ne jaký zdroj resolver uvidí. Směrování, přeposílání a překlad dostávají mezi oběma konci svůj díl. Runbook pro otázky zdroje sleduje dotaz krok za krokem a zaznamenává, co každý pozorovatel skutečně viděl. Na pořadí záleží, protože tvrzení vyslovené před pozorováním je jen domněnka v lepším formátu.

Zapište uspořádání, než začnete sbírat důkazy

Čtyři místa vám mohou o zdroji DNS něco říct a ne všechna říkají totéž. Jádro klienta ví, jaký zdroj by použilo, forwarder ví, co odeslal nahoru, překládající zařízení ví, co přepsalo, a přijímající resolver ví, co dorazilo. Zapište, na která z nich skutečně dosáhnete, než cokoli sesbíráte.

Observation pointWhat it can proveWhat it cannot proveHow to read it
client kernelwhich source address it would use for that resolveranything a device in between rewroteip route get against the resolver address
forwarderthat it sent an upstream query, and from which sourcewhat the client originally asked forits own log and its cache state
translating devicethat a source was rewritten, and to whatwhether the query was legitimateNAT policy and its counters
receiving resolverthe address that actually arrivedwhich client behind that address askeda scoped capture on port 53

Zapište i své očekávání, včetně resolveru, o kterém si myslíte, že je v provozu. Rozdělená trasa může poslat dotaz úplně jinam a mezipaměť může odpovědět bez jakékoli výměny nahoru, takže předpoklad držený jen v paměti první překvapení nepřežije. Držte deklarovaný návrh a pozorovanou cestu v oddělených sloupcích stejné poznámky; když se oba rozcházejí, našli jste otázku, která stojí za sledování.

Zkontrolujte, který proces dotaz skutečně odeslal

Začněte u klienta: zapište adresu resolveru, název dotazu a čas a poté potvrďte, který proces jej odeslal. První řádek níže pojmenovává proces, který drží socket UDP, a to je kontrola, kterou tento nadpis slibuje. Je-li tím procesem pomocník prohlížeče nebo runtime kontejneru místo systémového resolveru, zbytek stopy popisuje cestu, o kterou nikdo nežádal.

ss -tunp 'dport = :53'
dig @10.20.30.53 host.corp.example +noall +answer
ip route get 10.20.30.53

Na hostiteli s několika rozhraními nejprve zjistěte, kterou zdrojovou adresu jádro pro tento cíl zvolí, než se podíváte jinam. To je poslední bod, kde je cesta plně pod vaší kontrolou, a je to hodnota, kterou porovnáte s tím, co hlásí resolver. Neshoda je signál, že něco mezi tím přepsalo paket, nebo že byly odeslány dva různé dotazy.

Držte testovací názvy interní, protože interní název odeslaný veřejnému resolveru nic nedokazuje o interní cestě a zveřejňuje název, který jste zveřejňovat nemuseli. Prohlížeč se zapnutým zabezpečeným DNS se v tom seznamu socketů vůbec neobjeví a ta nepřítomnost je sama odpovědí.

Forwarder vytváří druhý, samostatný dotaz

Forwarder mění jednu výměnu ve dvě. Požadavek zespodu dorazí a forwarder pak odešle svůj vlastní dotaz nahoru z adresy, kterou si zvolí. Jeho konfigurace, ne klient, rozhoduje o tom, co horní resolver uvidí.

Manuál dnsmasq stojí za přečtení právě proto: dokumentuje, jak forwarder vybírá servery nahoru a váže svou naslouchací stranu, a nic v tomto uspořádání nenese zdroj klienta nahoru. Log resolveru zobrazující adresu brány je proto normální a není důkazem závady. Nepřítomnost se dá stejně snadno přečíst špatně, protože zásah v mezipaměti nevytváří žádný dotaz nahoru a vypadá stejně jako dotaz, který nikdy nedorazil. Přečtěte si konfiguraci forwarderu a stav jeho mezipaměti, než vyvodíte kterýkoli z těch dvou závěrů. Dvě otázky, dvě místa, kam se podívat.

Přečtěte zdroj na přijímajícím resolveru

Jediné pozorování, které to rozřeší, se pořizuje na straně serveru. Vše odvozené ze seznamu rozhraní klienta zůstává hypotézou, dokud resolver neoznámí, co skutečně dorazilo.

tcpdump -ni any port 53 and host 10.20.30.53

Zachyťte na hostiteli resolveru, udržte záznam krátký a ohraničený a uložte jej tam, kde to politika dovoluje. Je-li pozorovaným zdrojem přeložená adresa, další otázkou je, které zařízení překlad provedlo a zda je jeho politika ta zamýšlená. Záznam odpovídá na to, co dorazilo; nevysvětluje, proč to politika povolila. Pojmenujte pozorovatele a krok v poznámce, protože tvrzení o soukromí týkající se brány je tvrzení o tomto kroku, ne o celé cestě.

Zapište zjištění jako cestu, ne jako adresu

Zapište klienta, resolver, případný forwarder, pozorovaný zdroj v každém kroku a politiku, která jej řídí. Takový záznam odpovídá na většinu budoucích otázek bez dalšího záznamu. Nakreslete jej jako řetěz, protože seznam adres skrývá, který krok dal kterou.

Připojte k nákresu datum, verzi klienta a revizi konfigurace, aby pozdější čtenář mohl říci, zda stále platí. Oddělte transportní zdroj od všeho ostatního, co služba zpracovává, protože pohled na adresu brány nic neříká o tom, co dalšího se uchovává. Ani umístění resolveru nic neříká o tom, který klient se ptal. Právě oddržení těchto tvrzení činí závěr obhajitelným při revizi.

Související články