Հետևեք DNS հարցմանը քայլ առ քայլ՝ գտնելու իրական աղբյուրը
Պարտադրված ռեզոլվերի հասցեն չի որոշում, թե որ աղբյուրն է տեսնում ռեզոլվերը։ Հետևեք հաճախորդին, փոխանցիչին և ընդունող սերվերին, ապա գրեք ուղին։
Հաճախորդին ռեզոլվերի հասցե տալը որոշում է, թե ուր են ուղարկվում հարցումները, ոչ թե այն, թե որ աղբյուրը կտեսնի ռեզոլվերը։ Երթուղավորումը, փոխանցումը և թարգմանությունը հերթով անցնում են երկու ծայրերի միջև։ Աղբյուրի հարցերի ուղեցույցը հետևում է հարցմանը քայլ առ քայլ և գրանցում, թե ինչ է իրականում տեսել յուրաքանչյուր դիտորդը։ Հերթականությունը կարևոր է, որովհետև դիտումից առաջ արված պնդումը պարզապես ավելի լավ ձևաչափված ենթադրություն է։
Գրեք դասավորությունը, նախքան ապացույցներ հավաքելը
Չորս տեղ կարող են ինչ-որ բան ասել DNS աղբյուրի մասին, և ոչ բոլորն են նույնն ասում։ Հաճախորդի միջուկը գիտի, թե որ աղբյուրը կօգտագործեր, փոխանցիչը գիտի, թե ինչ ուղարկեց վերև, թարգմանող սարքը գիտի, թե ինչ վերագրեց, և ընդունող ռեզոլվերը գիտի, թե ինչ հասավ։ Գրեք, թե դրանցից որոնց եք իրականում կարող հասնել, նախքան որևէ բան հավաքելը։
| Observation point | What it can prove | What it cannot prove | How to read it |
|---|---|---|---|
| client kernel | which source address it would use for that resolver | anything a device in between rewrote | ip route get against the resolver address |
| forwarder | that it sent an upstream query, and from which source | what the client originally asked for | its own log and its cache state |
| translating device | that a source was rewritten, and to what | whether the query was legitimate | NAT policy and its counters |
| receiving resolver | the address that actually arrived | which client behind that address asked | a scoped capture on port 53 |
Գրեք նաև ձեր սպասումը՝ ներառյալ ռեզոլվերը, որը, ձեր կարծիքով, օգտագործվում է։ Բաժանված ուղին կարող է հարցումն ուղարկել բոլորովին այլ տեղ, և քեշը կարող է պատասխանել առանց որևէ վերև փոխանակման, ուստի միայն հիշողության մեջ պահվող ենթադրությունը չի դիմանա առաջին անակնկալին։ Պահեք հայտարարված նախագիծը և դիտված ուղին նույն գրառման առանձին սյունակներում՝ երբ երկուսը չեն համընկնում, դուք գտել եք այն հարցը, որն արժե հետապնդել։
Ստուգեք, թե որ գործընթացն է իրականում ուղարկել հարցումը
Սկսեք հաճախորդից՝ գրեք ռեզոլվերի հասցեն, հարցման անունը և ժամը, ապա հաստատեք, թե որ գործընթացն է ուղարկել այն։ Ներքևի առաջին տողը նշում է այն գործընթացը, որը պահում է UDP սոկետը, և դա այն ստուգումն է, որը խոստանում է այս վերնագիրը։ Եթե այդ գործընթացը դիտարկիչի օգնական է կամ կոնտեյների կատարման միջավայր՝ համակարգի ռեզոլվերի փոխարեն, ապա հետքի մնացած մասը նկարագրում է ուղի, որը ոչ ոք չի խնդրել։
ss -tunp 'dport = :53'
dig @10.20.30.53 host.corp.example +noall +answer
ip route get 10.20.30.53
Մի քանի ինտերֆեյս ունեցող հոսթում նախ պարզեք, թե որ աղբյուրի հասցեն է միջուկն ընտրում այդ նպատակակետի համար, նախքան ուրիշ տեղ նայելը։ Դա վերջին կետն է, որտեղ ուղին ամբողջությամբ ձեր վերահսկողության տակ է, և դա այն արժեքն է, որը կհամեմատեք ռեզոլվերի հաղորդածի հետ։ Անհամապատասխանությունը ազդանշան է, որ ինչ-որ բան միջևում վերագրել է փաթեթը, կամ որ ուղարկվել են երկու տարբեր հարցումներ։
Պահեք թեստային անունները ներքին, որովհետև հանրային ռեզոլվեր ուղարկված ներքին անունը ոչինչ չի ապացուցում ներքին ուղու մասին և հրապարակում է անուն, որը պետք չէր հրապարակել։ Անվտանգ DNS-ով դիտարկիչը բոլորովին չի հայտնվի այդ սոկետների ցանկում, և այդ բացակայությունն ինքն է պատասխանը։
Փոխանցիչը կատարում է երկրորդ, առանձին հարցում
Փոխանցիչը մեկ փոխանակումը դարձնում է երկու։ Ներքևից հարցումը հասնում է, ապա փոխանցիչն ուղարկում է իր սեփական հարցումը վերև՝ իր ընտրած հասցեից։ Նրա կարգավորումը, ոչ թե հաճախորդը, որոշում է, թե ինչ է տեսնում վերին ռեզոլվերը։
dnsmasq-ի ձեռնարկը արժե կարդալ հենց այդ պատճառով՝ այն նկարագրում է, թե ինչպես է փոխանցիչն ընտրում վերին սերվերներ և կապում իր լսող կողմը, և այդ դասավորության մեջ ոչինչ չի տանում հաճախորդի աղբյուրը վերև։ Այդ պատճառով դարպասի հասցե ցույց տվող ռեզոլվերի մատյանը նորմալ է և ոչ թե խափանման ապացույց։ Բացակայությունը նույնքան հեշտ է սխալ կարդալ, որովհետև քեշի հարվածը ոչ մի վերև հարցում չի ստեղծում և նույն տեսքն ունի, ինչ երբեք չհասած հարցումը։ Կարդացեք փոխանցիչի կարգավորումը և նրա քեշի վիճակը, նախքան երկու եզրակացություններից որևէ մեկը կանեք։ Երկու հարց, երկու տեղ՝ նայելու։
Կարդացեք աղբյուրը ընդունող ռեզոլվերում
Միակ դիտումը, որը լուծում է սա, կատարվում է սերվերի կողմում։ Այն ամենը, ինչ եզրակացվում է հաճախորդի ինտերֆեյսների ցանկից, մնում է վարկած, մինչև ռեզոլվերը հաղորդի, թե ինչ իրականում հասավ։
tcpdump -ni any port 53 and host 10.20.30.53
Գրանցեք ռեզոլվերի հոսթում, պահեք գրանցումը կարճ և սահմանափակ, և պահեք այնտեղ, որտեղ քաղաքականությունը թույլ է տալիս։ Եթե դիտված աղբյուրը թարգմանված հասցե է, հաջորդ հարցն այն է, թե որ սարքն է կատարել թարգմանությունը և արդյոք նրա քաղաքականությունը նախատեսվածն է։ Գրանցումը պատասխանում է, թե ինչ հասավ՝ այն չի բացատրում, թե ինչու քաղաքականությունը դա թույլ տվեց։ Նշեք դիտորդին և քայլը գրառման մեջ, որովհետև դարպասի վերաբերյալ գաղտնիության պնդումը վերաբերում է այդ քայլին, ոչ թե ամբողջ ուղուն։
Գրեք հայտնաբերումը որպես ուղի, ոչ որպես հասցե
Գրեք հաճախորդին, ռեզոլվերին, ցանկացած փոխանցիչի, յուրաքանչյուր քայլում դիտված աղբյուրը և այն կառավարող քաղաքականությունը։ Այդ գրառումը պատասխանում է ապագա հարցերի մեծ մասին՝ առանց նոր գրանցման։ Նկարեք այն որպես շղթա, որովհետև հասցեների ցանկը թաքցնում է, թե որ քայլն է տվել որը։
Կցեք գծագրին ամսաթիվը, հաճախորդի տարբերակը և կարգավորման վերանայումը, որպեսզի ավելի ուշ ընթերցողը կարողանա ասել՝ արդյոք այն դեռ գործում է։ Առանձնացրեք տրանսպորտային աղբյուրը այն ամենից, ինչ մշակում է ծառայությունը, որովհետև դարպասի հասցե տեսնելը ոչինչ չի ասում այն մասին, թե ինչ է պահվում։ Ռեզոլվերի տեղը նույնպես ոչինչ չի ասում այն մասին, թե որ հաճախորդն է հարցրել։ Այդ պնդումներն առանձին պահելն է, որ եզրակացությունը դարձնում է պաշտպանելի վերանայման ժամանակ։