Բոլոր դասերը
Վեբի հիմունքներՍկսնակ9 րոպե ընթերցումԻմ ստեկում

Դոմեններ և DNS

Registrar-ներ, nameserver-ներ, գրառումներ և TTL՝ առանց մոգության բացատրված։

  • Registrar
  • Nameservers
  • A / CNAME / MX / TXT
  • TTL
Քայլ 1/5
Բրաուզերը հարցնում է resolver-ին (հաճախ՝ քո պրովայդերինը կամ 1.1.1.1). «որտե՞ղ է example.com-ը»։

30 վայրկյանում

Դոմենը անուն է, որը վարձակալում եք registrar-ից։ DNS-ը համաշխարհային հեռախոսագիրքն է, որն այդ անունը վերածում է IP հասցեների և այլ տեղեկությունների, օրինակ՝ թե ուր պետք է գնա էլ. փոստը։ Դուք կառավարում եք ձեր գրառումները՝ դրանք խմբագրելով ձեր DNS host-ում։ Գրառումներն ու TTL-ը հասկանալը գործարկումները, միգրացիաները և էլ. փոստի կարգավորումը դարձնում է հանգիստ, ոչ թե վախեցնող։

Ինչու եմ օգտագործում

  • Պարբերաբար դոմեններ եմ միացնում սերվերներին և ծառայություններին, և գրեթե ամեն գործարկում սկսվում է DNS գրառումներից։
  • Սերվերային միգրացիաներում DNS-ն օգտագործում եմ որպես անջատիչ՝ պատճենել, ստուգել, հետո փոխել գրառումը՝ հին սերվերը պահելով, մինչև ամեն ինչ հաստատվի։
  • Էլ. փոստի առաքելիությունը կախված է DNS-ից (SPF, DKIM, DMARC), և հաճախորդներն անմիջապես նկատում են, երբ այն սխալ է։
  • TTL-ն իմանալը թույլ է տալիս փոփոխություններն այնպես պլանավորել, որ օգտատերերը նոր սերվերին անցնեն րոպեների, ոչ թե օրերի ընթացքում։

Ինչպես է աշխատում

01Երեք տարբեր դերեր՝ registrar, nameserver-ներ, DNS hosting

Դրանք հաճախ շփոթում են, որովհետև մեկ ընկերությունը կարող է անել երեքն էլ։ Registrar-ն այն տեղն է, որտեղ գնում և երկարաձգում եք դոմենը (օրինակ՝ Namecheap, Porkbun կամ Cloudflare Registrar), այն խոսում է registry-ի հետ, որը կառավարում է TLD-ն, օրինակ՝ .com-ը։ Registrar-ի պանելում նշում եք, թե որ nameserver-ներն են authoritative ձեր դոմենի համար։ Nameserver-ները պատկանում են DNS host-ին, և DNS host-ն այն տեղն է, որտեղ ապրում են ձեր իրական գրառումները՝ A, CNAME, MX և այլն։ Այսինքն՝ կարող եք դոմենը գնել մի registrar-ից, nameserver-ները ուղղել Cloudflare-ին և բոլոր գրառումները կառավարել Cloudflare-ում։ Եթե գրառումները խմբագրում եք registrar-ում, մինչդեռ nameserver-ները ցույց են տալիս այլ տեղ, ոչինչ չի կատարվում, և սա շփոթության շատ տարածված աղբյուր է։ Անալոգիա՝ registrar-ը հողային ռեեստրն է, nameserver-ները ցուցանակն են, որ ասում է՝ որ գրասենյակն է պահում հասցեագիրքը, իսկ DNS host-ը հենց այդ գրասենյակն է։

  • Registrar՝ սեփականություն, երկարաձգում, nameserver-ների կարգավորում, WHOIS/RDAP կոնտակտ, transfer lock։
  • Nameserver-ներ՝ որ DNS պրովայդերն է authoritative պատասխանում դոմենի համար։
  • DNS hosting՝ իրենք՝ գրառումները։

02Ինչպես է աշխատում lookup-ը

Ձեր սարքը հարցնում է recursive resolver-ին (ձեր ISP, 1.1.1.1, 8.8.8.8)։ Եթե պատասխանը քեշում չէ, resolver-ը root սերվերին հարցնում է, թե որտեղ է .com-ը, .com սերվերներին՝ թե որ nameserver-ներն են սպասարկում example.com-ը, հետո այդ authoritative nameserver-ներից խնդրում է գրառումը։ Յուրաքանչյուր պատասխան քեշավորվում է իր TTL-ի (time to live) չափով՝ վայրկյաններով։ Հաջորդ անգամ այդ resolver-ն օգտագործող ցանկացած մեկը քեշավորված պատասխանը ստանում է ակնթարթորեն։ Այս քեշավորման շնորհիվ է DNS-ը մասշտաբավորվում ամբողջ ինտերնետի վրա, և նաև դրա պատճառով են փոփոխությունները ոչ միանգամից ամենուր տեսանելի։

bash
# Ask a specific resolver, then follow the whole chain
dig example.com A @1.1.1.1
dig +trace example.com
# Which nameservers are authoritative?
dig example.com NS +short
# Ask the authoritative server directly (skips caches)
dig example.com A @ns1.example-dns.net +short

03Գրառումների տեսակներ, որոնք իրականում կօգտագործեք

A-ն անունը կապում է IPv4 հասցեի, AAAA-ն՝ IPv6-ի։ CNAME-ը մի անունը դարձնում է մեկ այլ անվան alias․ այն չի կարող գտնվել root դոմենի (apex) վրա այլ գրառումների կողքին, ուստի պրովայդերներն apex-ի համար առաջարկում են ALIAS, ANAME կամ CNAME flattening։ MX-ն աշխարհին ասում է, թե որ սերվերներն են ընդունում էլ. փոստը՝ առաջնահերթությամբ (փոքրը փորձվում է առաջինը)։ TXT-ն պահում է տեքստ, որն օգտագործվում է դոմենի հաստատման և էլ. փոստի անվտանգության համար․ SPF-ը թվարկում է, թե ով կարող է ձեր անունից նամակ ուղարկել, DKIM-ը հրապարակում է ստորագրման բանալի, DMARC-ն ասում է, թե ստացողներն ինչ անեն չանցած նամակների հետ։ NS-ը պատվիրակում է zone, CAA-ն սահմանափակում է, թե որ certificate authority-ները կարող են սերտիֆիկատ թողարկել ձեր դոմենի համար, իսկ SRV-ն նկարագրում է ծառայություններ՝ պորտով։ Յուրաքանչյուր գրառում ունի անուն, տեսակ, արժեք և TTL։

bash
example.com.        300  IN A      203.0.113.10
example.com.        300  IN AAAA   2001:db8::10
www.example.com.    300  IN CNAME  example.com.
example.com.        3600 IN MX     10 mail.example-mail.com.
example.com.        3600 IN TXT    "v=spf1 include:_spf.example-mail.com -all"
_dmarc.example.com. 3600 IN TXT    "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
example.com.        3600 IN CAA    0 issue "letsencrypt.org"

04TTL և «propagation»

DNS-ն իրականում չի «տարածվում»․ քեշերն են ժամկետանց դառնում։ Եթե գրառումն ունի 86400 (մեկ օր) TTL, հին արժեքը քեշավորած resolver-ը կարող է այն օգտագործել փոփոխությունից հետո մինչև մեկ օր։ Nameserver-ների փոփոխությունն ավելի դանդաղ է, քանի որ TLD մակարդակում պատվիրակումը հաճախ ունի մեկ-երկու օրվա TTL։ Միգրացիայի գործնական բաղադրատոմսը՝ TTL-ն իջեցրեք 300 վայրկյանի առնվազն հին TTL-ի մեկ ժամանակահատված առաջ, կատարեք փոփոխությունը, ստուգեք մի քանի resolver-ներից և TTL-ը կրկին բարձրացրեք, երբ ամեն ինչ կայուն լինի։ Որոշ resolver-ներ քեշավորում են նաև բացասական պատասխանները («այս անունը գոյություն չունի»)՝ ըստ SOA գրառման, ուստի գրառումները ստեղծեք նախքան դրանց մասին հայտարարելը։

  • 300 վ այն գրառումների համար, որոնք կարող եք շուտով փոխել, 3600 վ կամ ավելի՝ կայունների համար։
  • Ստուգեք մի քանի resolver-ներից, ոչ միայն ձեր լափթոփից։
  • Բրաուզերի և OS-ի քեշերը կարող են պահել հին պատասխանները․ flush արեք կամ ստուգեք dig-ով։

05Գրառումների ստուգում dig-ով և nslookup-ով

dig-ը ստանդարտ գործիքն է Linux-ում և macOS-ում, nslookup-ն աշխատում է ամենուր, ներառյալ Windows-ը։ Միշտ ստուգեք և՛ authoritative պատասխանը, և՛ հանրային resolver-ը, որպեսզի իմանաք՝ խնդիրը ձեր գրառո՞ւմն է, թե՞ քեշը։ Էլ. փոստի համար ստուգեք MX-ը և SPF-ի, DKIM-ի (selector subdomain-ի վրա) ու DMARC-ի TXT գրառումները։ Սերտիֆիկատների համար ստուգեք CAA-ն։ Առցանց գործիքները, որոնք հարցում են անում բազմաթիվ երկրներից, օգնում են հաստատել, որ փոփոխությունը հասել է resolver-ների մեծ մասին։ +short flag-ը տպում է միայն պատասխանը, ինչը հարմար է սկրիպտներում և runbook-ներում։

bash
dig +short example.com A
dig +short www.example.com CNAME
dig +short example.com MX
dig +short example.com TXT
dig +short selector1._domainkey.example.com TXT
nslookup -type=MX example.com 8.8.8.8
# Windows / PowerShell
Resolve-DnsName example.com -Type A -Server 1.1.1.1

06Production խորհուրդներ

Դոմենն ինքնին դիտարկեք որպես կրիտիկական ենթակառուցվածք։ Միացրեք auto-renew-ը և registrar lock-ը, օգտագործեք երկգործոն նույնականացմամբ հաշիվ և կոնտակտային էլ. փոստը պահեք մի փոստարկղում, որը հինգ տարի հետո էլ դեռ ձերը կլինի։ Միացրեք DNSSEC-ը, եթե ձեր registrar-ը և DNS host-ն այն աջակցում են, որպեսզի պատասխանները հնարավոր չլինի կեղծել։ Պահեք ձեր zone ֆայլի արտահանված պատճենը։ Nameserver-ները տեղափոխելուց առաջ նոր host-ում նախ վերստեղծեք բոլոր գրառումները, հատկապես MX-ն ու TXT-ն, այլապես էլ. փոստը լուռ կկոտրվի։ Ջնջեք «կախված» գրառումները, որոնք ցույց են տալիս այլևս չօգտագործվող ծառայություններ, որովհետև դրանք կարող են զավթվել ուրիշների կողմից։

Օգտագործեք, երբ

  • Կայք գործարկելիս կամ այն նոր սերվեր տեղափոխելիս։
  • Բիզնես էլ. փոստ կարգավորելիս և այն ապահովելիս, որ նամակներն ընկնեն inbox, ոչ թե spam։
  • Դոմենը հաստատելիս Google-ի, Apple-ի, վճարային պրովայդերների կամ սերտիֆիկատի թողարկման համար։
  • Կայքի առջև CDN կամ proxy, օրինակ՝ Cloudflare, դնելիս։

Մի՛ օգտագործեք, երբ

  • Մի օգտագործեք DNS round-robin-ը որպես իրական load balancer․ այն չունի health check-եր, և քեշերը անտեսում են խափանումները։
  • Մի հենվեք շատ ցածր TTL-ների վրա ակնթարթային failover-ի համար․ որոշ client-ներ քեշավորում են ավելի երկար, քան խնդրում եք։

Այլընտրանքներ

  • Cloudflare DNS

    Անվճար, արագ authoritative DNS՝ proxying-ով, CNAME flattening-ով և DNSSEC-ով։

  • AWS Route 53

    Վճարովի DNS՝ health check-երով, latency և geo routing-ով, լավ է AWS-ի ներսում։

  • Registrar-ի DNS

    Լավ է պարզ կայքերի համար, սովորաբար ավելի դանդաղ է և ավելի քիչ հնարավորություններով։

Լավագույն պրակտիկաներ

  1. Պլանավորված փոփոխություններից մեկ օր առաջ TTL-ն իջեցրեք 300 վ-ի, հետո կրկին բարձրացրեք։
  2. Nameserver-ները փոխելուց առաջ բոլոր գրառումները պատճենեք նոր DNS host։
  3. Հրապարակեք SPF, DKIM և DMARC յուրաքանչյուր դոմենի համար, որը նամակ է ուղարկում, իսկ երբեք չուղարկող դոմենների համար՝ SPF «-all» և DMARC reject։
  4. Օգտագործեք CAA գրառումներ՝ սահմանափակելու համար, թե որ certificate authority-ները կարող են ձեզ համար սերտիֆիկատ թողարկել։
  5. Միացրեք registrar lock, auto-renew, 2FA և DNSSEC։
  6. Ջնջեք այն գրառումները, որոնք ցույց են տալիս ռեսուրսներ, որոնք այլևս չեք վերահսկում։

Տարածված սխալներ

  • Գրառումները խմբագրել registrar-ում, մինչդեռ nameserver-ները ցույց են տալիս այլ պրովայդեր։
  • CNAME դնել apex դոմենի վրա MX գրառումների կողքին՝ կոտրելով էլ. փոստը։
  • Nameserver-ները փոխել՝ առանց նախապես MX և TXT գրառումները պատճենելու։
  • Մոռանալ www գրառումը, այնպես որ www.example.com-ը resolve չի լինում։
  • Թույլ տալ, որ դոմենը ժամկետանց դառնա, որովհետև երկարաձգման նամակը գնացել է նախկին աշխատակցին։

Խորը վերլուծություն

07Delegation, glue record-ներ և SOA

Zone-ը DNS ծառի այն մասն է, որի համար պատասխանատու է nameserver-ների մեկ խումբ։ .com zone-ը ձեր A record-ը չի պահում. այն պահում է NS record-ներ, որոնք example.com-ը delegate են անում ձեր nameserver-ներին։ Եթե ձեր nameserver-ները գտնվում են նույն դոմենի ներսում (ns1.example.com), առաջանում է «հավի և ձվի» խնդիր, ուստի ծնող zone-ը նաև պահում է դրանց IP հասցեները որպես glue record-ներ, որոնք սահմանվում են registrar-ում։ Յուրաքանչյուր zone սկսվում է SOA record-ով. հիմնական nameserver-ը, կոնտակտը, serial համարը, որով secondary-ները հասկանում են, թե երբ է պետք թարմացումները փոխանցել, և negative caching-ի TTL-ը։ Վերջին արժեքը որոշում է, թե որքան ժամանակ են resolver-ները հիշում, որ անունը գոյություն չունի։ Lame delegation լինում է, երբ ծնողը մատնացույց է անում nameserver-ներ, որոնք իրականում չեն պատասխանում այդ zone-ի համար, ինչը որոշ resolver-ների մոտ դանդաղ կամ ձախողված lookup-ներ է առաջացնում։

bash
# Delegation as seen by the .com servers
dig example.com NS @a.gtld-servers.net +norecurse
# SOA: primary NS, serial, refresh, retry, expire, negative TTL
dig example.com SOA +short
# A name that does not exist returns NXDOMAIN plus the SOA
dig nothing-here.example.com A

08DNSSEC. պատասխանների ստորագրում

Դասական DNS-ը չունի ապացուցելու միջոց, որ պատասխանն իսկական է, ուստի cache-poisoning հարձակումը կարող էր օգտատերերին ուղարկել կեղծ IP։ DNSSEC-ը ավելացնում է ստորագրություններ։ Ձեր DNS host-ը ստորագրում է յուրաքանչյուր record set (RRSIG record-ներ) zone key-ով, որը հրապարակված է որպես DNSKEY record։ Ծնող zone-ը պահում է DS record՝ ձեր key-ի hash-ը, որը դուք ավելացնում եք registrar-ում։ Validating resolver-ները հետևում են շղթային՝ root-ի key-ից դեպի .com, դեպի ձեր DS, դեպի ձեր DNSKEY, դեպի պատասխանի ստորագրությունը։ Եթե որևէ բան չի համընկնում, resolver-ը կեղծ պատասխանի փոխարեն վերադարձնում է SERVFAIL։ Գործառնական ռիսկն այն է, որ անհամապատասխանությունը կոտրում է նաև օրինական դոմենը. DNS host-ը փոխելը առանց նախապես DS record-ը հեռացնելու կամ թարմացնելու դոմենն անհասանելի է դարձնում բոլոր validating resolver-ների համար։ Managed provider-ները կառավարում են key rotation-ը, ձեր գործը DS record-ն է։

bash
dig example.com DNSKEY +dnssec +short
dig example.com DS +short          # what the parent publishes
dig example.com A +dnssec          # look for the "ad" flag from a validating resolver
# Online: dnsviz.net shows the full chain of trust

09Ժամանակակից record-ներ. HTTPS/SVCB, CAA մանրամասներ և serve-stale

HTTPS record-ը (RFC 9460, SVCB-ի տեսակ) թույլ է տալիս դոմենին բրաուզերներին դեռ միանալուց առաջ ասել, թե որ պրոտոկոլներն է աջակցում (օրինակ՝ h3 և h2), այլընտրանքային port-եր, IP hint-եր և key-եր Encrypted Client Hello-ի համար։ Այն կարող է նաև դրվել apex-ի վրա և մատնացույց անել այլ hostname, ինչը մասամբ լուծում է apex-CNAME-ի հին խնդիրը այն բրաուզերների համար, որոնք աջակցում են։ Cloudflare-ը և այլ provider-ներ այն ավտոմատ հրապարակում են proxied hostname-ների համար։ CAA record-ները կարող են պարունակել նաև iodef (ուր CA-ները հաղորդում են մերժված հարցումների մասին) և issuewild (որ CA-ն կարող է wildcard թողարկել)։ Resolver-ի կողմում շատ իրականացումներ հետևում են serve-stale-ին (RFC 8767). եթե ձեր authoritative սերվերներն անհասանելի են, դրանք կարող են որոշ ժամանակ շարունակել մատուցել ժամկետանց պատասխաններ։ Սա օգնում է հասանելիությանը խափանումների ժամանակ, բայց նշանակում է, որ շատ կարճ TTL-ը երբեք արագ failover-ի երաշխիք չէ։

bash
dig example.com HTTPS +short
# 1 . alpn="h3,h2" ipv4hint=203.0.113.10
dig example.com CAA +short
# 0 issue "letsencrypt.org"
# 0 issuewild ";"          <- nobody may issue wildcards
# 0 iodef "mailto:[email protected]"

10Անվտանգություն. takeover-ներ, zone-ի հիգիենա և anycast

Subdomain takeover լինում է, երբ record-ը, սովորաբար CNAME, մատնացույց է անում ձեր ջնջած third-party ռեսուրս, օրինակ՝ cloud storage bucket, PaaS հավելված կամ landing-page ծառայություն։ Ուրիշը վերցնում է այդ ռեսուրսի անունը և հիմա բովանդակություն է մատուցում ձեր subdomain-ով, իսկ ձեր cookie-ները նրա scope-ում են։ Կանխեք դա՝ DNS record-ները ջնջելով ռեսուրսից առաջ կամ դրա հետ միասին, և պարբերաբար audit անելով zone-ը։ Հիգիենայի այլ կանոններ. երբեք մի թույլատրեք բաց zone transfer-ներ (AXFR) որևէ մեկին, խուսափեք wildcard record-ներից, եթե դրանք նպատակային չեն, և ներքին hostname-ները մի պահեք հրապարակային DNS-ում, քանի որ դրանք բացահայտում են ձեր ցանցի քարտեզը։ Կայունության համար լավ DNS provider-ները օգտագործում են anycast. նույն nameserver IP-ն հայտարարվում է բազմաթիվ վայրերից, ուստի հարցումները գնում են մոտակա առողջ կետ, իսկ մեծ հեղեղները բաշխվում են։

Իրական իրավիճակներ

01

DNS-ը նոր provider տեղափոխելուց հետո email-ը դադարեց աշխատել

Խնդիր

Ուրբաթ օրը nameserver-ները փոխվեցին նոր DNS host-ի։ Կայքն աշխատում է, բայց այդ պահից ելքային նամակներն ընկնում են spam, իսկ որոշ մուտքային նամակներ bounce են լինում։

Ինչպես լուծել

Համեմատեք հին zone-ի export-ը նոր zone-ի հետ՝ record առ record։ Ստուգեք MX-ը dig-ով, հետո SPF-ը apex-ում, DKIM selector TXT record-ները (օրինակ՝ selector1._domainkey) և _dmarc-ը։ Սովորական բացթողումը բացակայող DKIM selector-ն է կամ երկու TXT record-ի բաժանված SPF-ը, ինչն անվավեր է։ Բացակայողը վերստեղծեք ճշգրիտ՝ նույն արժեքներով։ Եթե հին nameserver-ները դեռ պատասխանում են, ուղղակիորեն հարցում արեք դրանց՝ կորած record-ները վերականգնելու համար։ Ուղարկեք թեստային նամակ որևէ mailbox և կարդացեք authentication results header-ը՝ հաստատելու spf=pass, dkim=pass և dmarc=pass։

02

DNS host-ը փոխելուց հետո դոմենն անհասանելի դարձավ

Խնդիր

Nameserver-ները նոր provider-ին ուղղելուց հետո որոշ օգտատերեր տեսնում են կայքը, իսկ մյուսները ստանում են «server can't be found» սխալ։ dig-ը 1.1.1.1-ի դեմ վերադարձնում է SERVFAIL։

Ինչպես լուծել

Այս պատկերը տիպիկ է DNSSEC-ի անհամապատասխանության համար. registrar-ը դեռ հրապարակում է DS record-ը հին provider-ի key-երի համար, ուստի validating resolver-ները մերժում են նոր պատասխանները։ Ստուգեք dig example.com DS-ով և dnsviz.net-ով։ Ամենաարագ լուծումը registrar-ում հին DS record-ը հեռացնելն է. resolver-ները վերականգնվում են DS-ի TTL-ի ավարտից հետո։ Հետո միացրեք DNSSEC-ը նոր provider-ի մոտ և ավելացրեք նրա DS record-ը։ Հաջորդ անգամ հետևեք հերթականությանը. հեռացրեք DS-ը, սպասեք նրա TTL-ին, փոխեք nameserver-ները, հետո նորից միացրեք DNSSEC-ը։

03

Մոռացված subdomain-ը սկսում է spam մատուցել

Խնդիր

Անվտանգության թիմը հաղորդում է, որ promo.example.com-ը ցույց է տալիս կազինոյի էջ։ Մարքեթինգային արշավը, որի համար այն ստեղծվել էր, ավարտվել է մեկ տարի առաջ, և դրա hosting հաշիվը փակվել է։

Ինչպես լուծել

Սա subdomain takeover է կախված (dangling) CNAME-ի միջոցով։ Անմիջապես ջնջեք record-ը, հետո ստուգեք՝ արդյոք հարձակվողը կարող էր սահմանել ծնող դոմենին scope արված cookie-ներ, և եթե այո, rotate արեք session-ները։ Audit արեք ամբողջ zone-ը. կազմեք բոլոր CNAME և A record-ների ցանկը և հաստատեք, որ յուրաքանչյուր target դեռ ձերն է։ Ցանկացած ծառայության offboarding checklist-ում ավելացրեք կանոն. նախ հեռացնել DNS-ը, հետո ջնջել ռեսուրսը։ Դիտարկեք գործիքներ, որոնք մոնիթորինգ են անում Certificate Transparency log-երը՝ ձեր դոմենների համար անսպասելի սերտիֆիկատներ հայտնաբերելու համար։

Արագ ուղեցույց

Authoritative nameserver-ներ
dig example.com NS +short
Պատասխան ուղիղ authoritative սերվերից
dig example.com A @ns1.example-dns.net +norecurse
Resolver-ի քեշում մնացած TTL-ը
dig example.com A @8.8.8.8 | grep -A1 "ANSWER SECTION"
Resolve-ի ամբողջական ճանապարհը
dig +trace example.com
Zone-ի serial և negative TTL
dig example.com SOA +short
DNSSEC-ի delegation record-ը
dig example.com DS +short
Հակադարձ lookup (PTR)
dig -x 203.0.113.10 +short
Մաքրել DNS քեշը macOS-ում
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Մաքրել DNS քեշը Ubuntu-ում (systemd-resolved)
resolvectl flush-caches
Արգելել բոլոր wildcard սերտիֆիկատները
example.com. CAA 0 issuewild ";"

Իմ իրական նախագծերում

  • Կառավարում եմ իմ և հաճախորդների կայքերի DNS-ը․ դրանցից մի քանիսում DNS-ի համար օգտագործվում է Cloudflare, և պլան կա բոլոր դոմենները տեղափոխել այնտեղ։
  • Սերվերային միգրացիաներում հետևում եմ հերթականությանը՝ գույքագրում, պատճենում, ստուգում, DNS-ի փոխարկում, և հին սերվերը պահում եմ, մինչև ամեն ինչ հաստատվի։
  • Իմ համախմբման պլանը փոստը տեղափոխում է hosted պրովայդերի, ինչը նշանակում է MX, SPF, DKIM և DMARC գրառումները զգուշորեն վերագրել։

Հարցեր և պատասխաններ

Q1Ո՞րն է տարբերությունը registrar-ի և DNS պրովայդերի միջև։

Registrar-ն այն տեղն է, որտեղ գրանցում և երկարաձգում եք դոմենը և որտեղ նշում եք նրա nameserver-ները․ այն այդ պատվիրակման մասին հայտնում է TLD registry-ին։ DNS պրովայդերն աշխատեցնում է այդ nameserver-ները և պահում իրական գրառումները, օրինակ՝ A, CNAME, MX և TXT։ Դրանք կարող են լինել նույն ընկերությունը, բայց հաճախ այդպես չէ․ դոմենը կարող է գրանցված լինել մի ընկերությունում և DNS-ի համար օգտագործել Cloudflare-ը։ Գլխավոր գործնական կետն այն է, որ գրառումները նշանակություն ունեն միայն այն պրովայդերում, որին ցույց են տալիս nameserver-ները։ Դրանք որևէ այլ տեղ խմբագրելն ազդեցություն չունի, ինչը բացատրում է «գրառումը փոխեցի, բայց ոչինչ չեղավ» տիպի բազմաթիվ support տոմսեր։

Q2Ինչո՞ւ է DNS-ի փոփոխությունը ժամանակ պահանջում, որպեսզի երևա։

Որովհետև պատասխանները քեշավորվում են resolver-ների, օպերացիոն համակարգերի և բրաուզերների կողմից՝ գրառման TTL-ի չափով։ Եթե հին գրառումն ուներ մեկ օր TTL, որոշ օգտատերեր կարող են հին IP-ն տեսնել մինչև մեկ օր։ Nameserver-ների փոփոխություններն ավելի երկար են տևում, քանի որ TLD-ում պատվիրակումը քեշավորվում է առանձին, հաճախ 24–48 ժամով։ Այսինքն՝ դա propagation չէ տվյալներ մղելու իմաստով, դա քեշերի ժամկետանց դառնալն է։ Ես դրա համար պլանավորում եմ՝ միգրացիայից շատ առաջ իջեցնում եմ TTL-ն, փոխարկում, dig-ով ստուգում մի քանի հանրային resolver-ների և authoritative սերվերի դեմ և հին սերվերը աշխատեցնում եմ, մինչև թրաֆիկն ամբողջությամբ տեղափոխվի։

Q3Կարելի՞ է CNAME դնել root դոմենի վրա։

DNS ստանդարտով՝ ոչ։ CNAME-ը նշանակում է, որ այս անունը alias է և այլ գրառումներ չունի, բայց apex-ը պետք է ունենա SOA և NS գրառումներ, և սովորաբար՝ MX և TXT։ Այնտեղ CNAME դնելը հակասում է դրանց և կարող է կոտրել էլ. փոստը։ Պրովայդերները դա լուծում են CNAME flattening-ով, ALIAS կամ ANAME գրառումներով․ դուք կարգավորում եք alias, և DNS սերվերն ինքն է resolve անում թիրախը և վերադարձնում A և AAAA գրառումներ։ Այնպես որ, եթե hosting պլատֆորմը ձեզ hostname է տալիս, apex-ի վրա օգտագործեք այդ հնարավորությունը, կամ apex-ը ուղղեք IP-ներին և www-ի վրա օգտագործեք CNAME։

Q4Ինչպե՞ս են SPF-ը, DKIM-ը և DMARC-ը աշխատում միասին։

SPF-ը TXT գրառում է, որը թվարկում է, թե որ սերվերները կարող են նամակ ուղարկել ձեր դոմենի անունից․ ստացողները ստուգում են ուղարկողի IP-ն։ DKIM-ը յուրաքանչյուր նամակին ավելացնում է կրիպտոգրաֆիկ ստորագրություն, և ստացողներն այն ստուգում են DNS-ում selector-ի տակ հրապարակված public key-ով։ DMARC-ը դրանք կապում է տեսանելի From դոմենին․ այն ասում է, որ առնվազն մեկը պետք է անցնի և համընկնի (align), սահմանում է քաղաքականություն ձախողումների համար (none, quarantine, reject) և թե ուր ուղարկել հաշվետվությունները։ Միասին դրանք կանխում են spoofing-ը և բարելավում առաքելիությունը։ DMARC-ը սկսում եմ p=none-ով՝ հաշվետվություններ հավաքելու համար, շտկում եմ բոլոր օրինական ուղարկողներին, հետո անցնում quarantine-ի և reject-ի։

Q5Ինչպե՞ս կտեղափոխեիր կայքը նոր սերվեր առանց downtime-ի։

Նախ գույքագրում եմ ամեն ինչ՝ ֆայլեր, տվյալների բազա, cron job-եր, environment variable-ներ, սերտիֆիկատներ և DNS գրառումներ։ Համապատասխան գրառումների TTL-ն իջեցնում եմ 300 վայրկյանի՝ առնվազն մեկ TTL ժամանակահատված առաջ։ Կարգավորում եմ նոր սերվերը, պատճենում տվյալները և այն ուղղակիորեն ստուգում hosts ֆայլի գրառմամբ կամ curl --resolve-ով։ Վերջնական անցման համար սառեցնում եմ գրառումները (writes) կամ սինքրոնացնում տվյալների բազան, հետո փոխարկում A գրառումները։ Հետևում եմ երկու սերվերների լոգերին․ հարցումները հնից աստիճանաբար պակասում են, երբ քեշերը ժամկետանց են դառնում։ Հին սերվերին չեմ դիպչում, մինչև նորը որոշ ժամանակ անխափան աշխատի, հետո բարձրացնում եմ TTL-ն և ապամոնտաժում հինը։

Սենիոր մակարդակի հարցեր

S1Ինչպե՞ս կօգտագործեք DNS-ը failover-ի համար, և որո՞նք են դրա սահմանափակումները։

Managed DNS-ը կարող է health check-եր անել և փոխել պատասխանները, երբ endpoint-ը ձախողվում է, օրինակ՝ Route 53 failover routing-ը կամ CDN-ի load-balancing ֆունկցիան։ Մոտ 60 վայրկյան TTL-ով օգտատերերի մեծ մասը տեղափոխվում է մի քանի րոպեում։ Սահմանափակումներն իրական են. resolver-ները և client-ները կարող են քեշավորել TTL-ից ավելի երկար, որոշները մատուցում են stale պատասխաններ, երբ չեն կարողանում թարմացնել, իսկ երկարակյաց կապերը շարունակում են խոսել հին IP-ի հետ մինչև վերամիանալը։ DNS-ը նաև չի տեսնում հավելվածի առողջությունը այն սահմաններից դուրս, ինչ ստուգում է check-ը։ Ուստի DNS failover-ը համարում եմ կոպիտ, ռեգիոնալ մեխանիզմ, իսկ արագ, per-request failover-ի համար օգտագործում եմ load balancer կամ anycast proxy։ Երկու կայքերի միջև տվյալների replication-ը սովորաբար ավելի բարդ մասն է։

S2Արդյո՞ք յուրաքանչյուր դոմեն պետք է DNSSEC ունենա։

Արժե միացնել, երբ ձեր registrar-ը և DNS host-ը աջակցում են դրան ավտոմատացված key management-ով, քանի որ այն արգելափակում է կեղծ պատասխանները validating resolver-ների համար և հնարավոր է դարձնում DANE-ի նման ֆունկցիաներ mail-ի համար։ Գինը գործառնական ռիսկն է. սխալ կամ հնացած DS record-ը վերածվում է լիարժեք outage-ի բոլորի համար, ովքեր օգտագործում են validating resolver-ներ, իսկ դա այսօր օգտատերերի մեծ մասն է։ Միգրացիաները պահանջում են զգույշ հերթականություն, և որոշ provider-ներ չեն աջակցում multi-signer կարգավորումներ։ Փոքր թիմի համար ես միացնում եմ այն managed provider-ի մոտ, migration runbook-երում փաստաթղթավորում եմ DS-ի հեռացման քայլը և մոնիթորինգ եմ անում արտաքին checker-ով։ Առանց ավտոմատացման և runbook-ի սխալ կարգավորված DNSSEC-ը ավելի վատ է, քան դրա բացակայությունը։

S3Ինչպե՞ս եք պլանավորում DNS-ը multi-tenant SaaS-ի համար՝ հաճախորդների դոմեններով։

Հաճախորդները CNAME-ը, օրինակ՝ shop.customer.com, ուղղում են ձեր կառավարած կայուն hostname-ին, օրինակ՝ tenants.example-saas.com, իսկ apex-ի համար իրենց կողմում պետք է ALIAS կամ flattening, կամ A record anycast IP-ներին։ Սեփականությունը ստուգում եք TXT token-ով, հետո ավտոմատ թողարկում եք սերտիֆիկատներ՝ սովորաբար HTTP-01-ով, երբ տրաֆիկը հասնում է, կամ CDN-ի custom-hostname պրոդուկտով, որը կառավարում է validation-ը և renewal-ը։ Routing-ը Host header-ով գտնում է tenant-ին։ Կարևոր ռիսկեր. հաճախորդը հեռացնում է CNAME-ը, բայց դուք պահում եք mapping-ը, կամ ջնջում եք tenant-ին, մինչդեռ նրա record-ը դեռ ձեզ է մատնացույց անում, ուստի պետք են մոնիթորինգ և cleanup job-եր։ Սերտիֆիկատների թողարկման rate limit-ները և չհաստատված դոմենների համար հստակ error էջերը լրացնում են դիզայնը։

Բառարան

Zone
DNS namespace-ի այն մասը, որի համար authoritative է nameserver-ների մեկ խումբ, օրինակ՝ example.com-ը և նրա subdomain-ները։
Apex
Ինքը՝ «մերկ» դոմենը (example.com), որը կոչվում է նաև root կամ naked domain։
Recursive resolver
Սերվեր, որը client-ների անունից փնտրում է պատասխանները և քեշավորում դրանք, օրինակ՝ 1.1.1.1-ը։
Authoritative nameserver
Սերվեր, որը պահում է zone-ի իրական record-ները և տալիս վերջնական պատասխանը։
Glue record
Nameserver-ի IP հասցե, որը պահվում է ծնող zone-ում. անհրաժեշտ է, երբ nameserver-ը իր իսկ դոմենի ներսում է։
NXDOMAIN
DNS պատասխան, որը նշանակում է, որ անունն ընդհանրապես գոյություն չունի։
DS record
Zone-ի DNSSEC key-ի hash, որը հրապարակվում է ծնող zone-ում՝ վստահության շղթան կապելու համար։
PTR record
Reverse DNS. IP հասցեն համապատասխանեցնում է hostname-ի. կարևոր է mail սերվերների համար։
Anycast
Մեկ IP հասցե, որը հայտարարվում է բազմաթիվ վայրերից, որպեսզի տրաֆիկը հասնի մոտակա աշխատող սերվերին։
Subdomain takeover
Երբ ինչ-որ մեկը վերցնում է ջնջված third-party ռեսուրսը, որին դեռ մատնացույց է անում ձեր DNS record-ը։

Պրոդուկտի գաղափար ունե՞ք։Եկեք ստեղծենք այն։

Պատմեք ձեր գաղափարի, պրոդուկտի կամ թիմի մասին։ Սովորաբար պատասխանում եմ մեկ աշխատանքային օրվա ընթացքում։