# Домэйн нэрийн систем

**Домэйн нэрийн систем** (Англи: Domain Name System буюу **DNS**, *Дий-Эн-Ээс*) нь интернэт протоколоор холбоотой байгаа компьютер болон түүнтэй адилтгах зүйлсийг хооронд нь ялгах зориулалттай, шаталсан, төвлөрсөн бус нэрийн систем юм.

Хамгийн нийтлэг хэрэглээ нь дэлхий даяар тархан байрласан компьютерүүдийн үйлчилгээ болон хэрэглээний зорилгоор тэдгээрийн домэйн нэрийг нь тоон IP хаяг руу нь хөрвүүлэх үйлдэл юм. Тус системийг 1985 оноос хойш интернэтийн салшгүй хэсэг болгон хэрэглэж байна.

Домэйн нэрийн системийг интернэтэд зориулсан утасны лавлахтай төстэй байдлаар тайлбарладаг. Тодруулбал компьютерийн хост нэрийг IP хаяг руу хөрвүүлэх систем. Жишээлбэл *www.example.com* гэсэн хаягийг 192.0.43.101 (IPv4) болон 2001:500:88:200::10 (IPv6) гэсэн хаягууд руу (эсрэгээр нь бас хөрвүүлнэ) хөрвүүлнэ гэсэн үг юм. Утасны лавлахаас ялгаатай шинж чанар нь төгсгөлийн хэрэглэгчийн үйлчилгээний байрлал болон сүлжээний өөрчлөлтөөс үл хамааран маш хурдан өөрчлөлт ордог — иймд мэдээлэл өөрчлөгдсөн хэдий ч өмнө нь хэрэглэж байсан домайн нэрээ үргэлжлүүлэн ашиглах боломжийг олгодог.

DNS-ийг ашигласнаар хэрэглэгч нар компьютер эсвэл үйлчилгээ чухам яг хаана байрлаж байгааг нь мэдэх шаардлагагүйгээр утга учиртай хэлбэржсэн байрлалын нөөц URL (Uniform Resource Locators), и-мэйл хаягийг хэрэглэж болдог.

## Түүх

Интернетэд бүх үйлдэл нь IP хаягийн тусламжтайгаар явагддаг. Жишээ нь www.google.com гэж хандахад цаана нь 66.102.7.99 гэсэн IP хаяг дуудагдаж байдаг. Хүн бүр 66.102.7.99 гэдгийг тийм ч амархан цээжилж чадахгүй тэгээд ч интернэт маш том, олон хаяг тогтооход хэцүү гэдгээс үүдэн домэйн нэрийн систем гэдэг үйлчилгээ гарч ирсэн. Өөрөөр хэлбэл компьютерийн ойлгох хаягийг хүнд тогтооход амар хаягтай холбож өгч бидэнд интернетийг маш хялбарчилж өгдөг үйлчилгээ юм.

DNS зохиогдохоос өмнө буюу 1982 оноос өмнө ARPANET-ийн эрин үед сүлжээнд байгаа компьютер бүр өөр дээрээ *hosts.txt* гэсэн нэртэй файлыг Stanford Research Institute-д байгаа компьютерээс сэргээж авдаг байсан. Нэмж дурьдахад hosts файл нь ихэнх орчин үеийн үйлдлийн системүүд дээр ч гэсэн өгөгдмөлөөрөө байсаар хэвээр байгаа бөгөөд ерөнхийдөө дотоод хостыг 127.0.0.1 гэсэн хаяг руу хөрвүүлэлтийг агуулж байдаг. Олон үйлдлийн системүүд логик нэрийн тодорхойлолтыг ашигладаг бөгөөд логик тодорхойлолт нь компьютерийг удирдан зохион байгуулагчид нь нэрийн тодорхойлолтыг аргыг нь боломжит давуу эрхээр нь тохируулах боломжийг хангаж өгдөг. Сүлжээний хуртай өсөлтөөс хамааран нэгдсэн үйлчилгээтэй гараар хийгддэг hosts файл нь тогтворгүй болсон. Ийм ч учраас системийг илуу уян хатан болгож, хэрэгцээтэй мэдээллүүдийг тараах чадвартай болгон өөрчлөх шаардлагтай болсон.

Jon Postel, Paul Mockapetris нарын хүсэлтээр 1983 онд домайн нэрийн систем нь зохиогдож эхний хэрэгжүүлэлт нь хийгдэж байжээ. Эхний DNS -н нарийвчилсан тодорхойлолтууд нь Internet Engineering Task Force -ээр RFC 882 болон RFC 883 дээр нийтлэгдсэн бөгөөд түүнийг сүүлд 1987 оны 11 сард RFC 1034, RFC 1035 -ыг нийтэлснээр өмнөх тодорхойлолтуудыг хүчингүй болгосон байна. Үндсэн DNS протоколд нэмэлтээр санал болгох төрөл бүрийн өргөтгөлийн нэмэлт хүсэлтийн тайлбар (Англи: Request for comment) байдаг.

Энэ нь тухайн үедээ удирдлага нь төвлөрөөд байсан өгөгдлийн санг тархсан өгөгдлийн сан буюу сүлжээгээр агуулга нь тархсан, төвлөрсөн байдлаар байхаар боловсруулсан. Ингэснээр хэмжээ нь хязгааргүй өсөх боломжтой болжээ.

1984 онд Берклигийн 4 оюутан болох Douglas Terry, Mark Painter, David Riggle болон Songnian Zhou нар нь анхны UNIX нэрийн серверийн хэрэгжүүлэлт болох Berkley Internet Name Domain (BIND) серверийг бичжээ. 1985 онд Digital Equipment Corporation-ийн Kevin Dunlap DNS хэрэгжүүлэлтийг нилээн ач холбогдолтойгоор дахин бичсэн юм. Түүнээс хойш Mike Karels, Phil Almquist, and Paul Vixie нар BIND -ийг дэмжиж хөгжүүлж эхэлсэн. 1990 ээд оны эхээр BIND нь ялангуяа UNIX төрлийн системд тархсан бөгөөд DNS програм хангамж нь ер нь интернэтэд түлхүү хэрэглэгддэг байв. BIND-ийн бичилтийн эмзэг байдлын улмаас халдлагын өсөлт ихсэж улмаар хэсэгчлэн өдөөгдсөн нэмэлт нэрийн серверүүд хөгжүүлэгдэж эхэлсэн. Бусад орчин үеийн DNS -ийн програм хангамжтай харьцуулж болохуйц аюулгүй байдлыг хангасан бичилттэй BIND 9 гэсэн хувилбар бичигдсэн.

## Үйл ажиллагаа

Вэб броузер дээрээ аль нэг сайтын хаяг буюу домайн нэрийг бичмэгц, эсвэл аль нэг хаягаар и-мэйл илгээмэгц тэр бүгд эхлээд заавал домайн нэрийн үйлчилгээний сервэр рүү хандаж зохих IP-хаягийг нь олоод дараа нь ажиллаж эхэлдэг. Иймд домайн нэрийн үйлчилгээ бол Интернэтийн хамгийн чухал бөгөөд гол холбогч үйлчилгээ юм. Интернэт дэхь үйлдэл бүхэн домайн нэрээр хийгдэх учир домайн нэрийн үйлчилгээний сервэр маш их ачаалалтай, 100% найдвартай ажиллаж байх естой болно. Ийм их ачааллыг ямар ч компьютер дангаараа даахгүй. Энэ ачааллыг нэг дор төвлөрүүлэн үйлчлэх нь дэндүү их эрсдэлтэй, мөн дэлхий даяар нэг цэгээс үйлчлэх нь домайн нэрийн үйлчилгээний хурдад төдийгүй бусад бүх үйлчилгээнд муугаар нөлөөлөх боломжтой. Тиймд Интернэтийн домайн нэрийн үйлчилгээг дэлхий даяар олон зуун сервэр компьютер дээр хуваан авч үйлчилж байдаг. Жишээлбэл, ".mn" төгсгөлтэй (*domain.mn*, *num.edu.mn* гэх мэт) бүх домайны үйлчилгээг Датаком компани хариуцан ажилладаг. Интернэт бол маш том компьютерын сүлжээ учраас тухайн "DNS" сервер бүр дээр бүх мэдээлэл байх боломжгүй.

Тиймээс ч DNS серверүүд байнга хамтарч ажилладаг байна.

### Ажиллах алгоритм

1. Эхэлж эхний түвшиний "DNS" серверээс хэрэглэгчийн компьютер "www.wikipedia.org"-ын "IP" хаягийг асуух болно.
2. "DNS" дээр энэхүү мэдээлэл байхгүй тул дахин дараагийн түвшиний "DNS" серверээс асуух болно.
3. Хоёрдахь "DNS" дээр энэ домайны "IP" хаяг байгаа бол эхний "DNS"-руу мэдээллээ өгнө.
4. Эхний "DNS" тухайн мэдээллийг өөрийн сандаа нэмээд мөн хэрэглэгчрүү өгнө.
5. Хэрэглэгч "DNS"-ээс "www.wikipedia.org"-той холболт үүсгэх шаардлагатай мэдээлэлтэй болж
6. Хэрэглэгчийн компьютер "www.wikipedia.org"-той холболт хийнэ.

Харин дараагийн удаа хэрэглэгч "www.example.com"-той холболт хийх хэрэгтэй болоход эхний "DNS" шаардлагатай мэдээллийг шууд өгөх боломжтой болно. Учир нь өмнө хоёрдахь "DNS"-ээс авсан мэдээллээ өөр дээрээ хадгалсан байх болно.

## Бүтэц

DNS бол Интернэт дээр тулгуурласан, бүрэн эрхт root буюу эх сервер, Top Level Domain буюу Дээд Түвшний Домэйн (TLD) сервер, домэйн тус бүрийн мэдээллийг агуулж байдаг бусад жижиг нэрийн серверүүдээс бүтсэн нарийн төвөгтэй систем юм.

Дэлхийд 13 ROOT сервер тархан байрлаж ажилладаг ба эдгээр нь бусад серверүүдийг бүртгэн top leүel домэйнуудад хариуцан ажилладаг.

Домэйн нэрийн систем нь уруугаа харсан мод хэлбэрийн бүтэцтэй байдаг. Хамгийн дээд талд нь root бүс байдаг.

Модны түвшингүүдийг label гэнэ. Мөн өөрөөсөө доош 1 label мэдэж байхыг zone гэнэ.

Домэйн нэрийн систем нь дараах 2 чиглэлд ажилладаг.

1. Forward zone: домайныг IP –руу хөрвүүлэх
2. Reverse zone: IP –ийг домайнруу хөрвүүлэх

## Нэрийн сервер

Домэйн нэрийн систем нь домайн бүрийн баталгаажсан нэрийн серверийн (Англи: authoritative name server) тодорхойлсноор домайн нэрүүдийг тэдгээрийн IР хаяг руу нь хариуцлагатайгаар хөрвүүлж хуваарилдаг. Баталгаажсан нэрийн сервер нь өөрсдийн домайнд байгаа хөрвүүлэлтийг найдвартай хийдэг бөгөөд мөн бусад баталгаажсан нэрийн серверүлтэй тэдгээрийн болон өөрсдийн дэд домайнээ ээлжлэн дамжуулдаг. Энэ механизм нь DNS -д зориулагдсан, алдаанд тэсвэртэйгээс (fault tolerant) гадна бүртгэлийн төвийг ганцхан байхаас зайлсхийхэд тусладаг түүнчлэн тогтмол анхаарах, шинэчлэх үйлдлийг хангаж өгдөг. Нэмж хэлэхэд маш олон домайн бүртгэгчийн бүртгэлд бичигдэн тархсан байгаа мэдээлэл нь найдвартай үйлчилгээтэйг нь хангаж байхын зэрэгцээ мэдээлэлд шинэчлэл хийгддэг.

Домайнүүд нь бүртгэгчээс бүртгэгчийн хооронд хугацаанаас үл хамааран зөөгддөг. домайн нэрийн систем нь мөн энэхүү үйлчилгээнийхээ өгөгдлийн сангийн техникийн функцуудыг нь тодорхой зааж байдаг. Энэ систем нь DNS протокол, өгөгдлийн бүтцийн загварчлалыг маш нарийн тодорхойлохоос гадна DNS -д хэрэглэгддэг интернэтийн протоколын бүрэлдэхүүн хэсэг болсн өгөгдлийг солилцдог. Интернэт нь домэйн нэрийн шатлал болон интернэт протоколын нэрийн муж гэсэн 2 үндсэн нэрийн мужлалд ангилагддаг. домайн систем нь домайн нэрийн шатлалыг баталгаажуулах мөн эдгээрийн нэрийн мужлалтын хөрвүүлэлтийг үйлчилгээг хангадаг. Интернэт нэрийн сервер болон холболтын протоколууд нь домайн нэрийн системийн хэрэгжүүлэлтйиг хийдэг. DNS домайн нэрийн бичилтийг хадгалдаг бөгөөд хадгалахдаа хаягийн бичилт (A эсвэл АААА ), нэрийн серверийн бичилт (NS), мэйл солилцогчийн бичилт (MX) гэх мэтээр бичилт хийж хадгалдаг. DNS нь хариу үйлдэл хийхдээ өгөгдлийн сангийхаа хүслэлтүүдийн хариултыг эсрэгээр хийдэг.

Дараах үндсэн 2 төрлийн нэрийн сервер байдаг.

### Authoritative (Баталгаажсан)

Баталгаажуулалтын нэрийн сервер гэдэг нь үндсэн эх хувилбараас нь хариултыг өгдөг нэрийн сервер юм. Жишээлбэл: домайний удирдагч эсвэл динамик DNS аргаар авсан нэрийн хариулт нь өөрийн нэрийн серверээс дүрэм журмынх нь дагуу авсан хариутай зөрсөн тохиолдолд. Баталгаажуулалт нь гэдэг зүгээр л нэрийн сервер бөгөөд энэ нь асуултын хариуд серверийн удирдан зохион байгуулагчийн тохируулснаар тухайн домайн нэрийн сервер нь өөрийн мэдэж байгаа ямар DNS өгөгдөл (IPv4 IP, IPv6 IP, e-мэйл серверийн дуудлагын жагсаалт гэх мэт) нь ямар хостын нэр дээр байгааг нь гаргаж өгдөг гэсэн үг юм. Баталгаажуулалтын нэрийн сервер нь үндсэн сервер эсвэл туслах сервер аль алинаао нь ажиллаж болно. Үндсэн сервер нь бүх бүсүүдийн бичилтийн үндсэн хувийг нь хадгалдаг юм. Харин туслах сервер нь үндсэн серверийнхээ баталгаатай бичилтүүдийг өөр дээрээ хуулбарлаж авдаг ба мөн байнга шинэчлэл хийж байдаг ингэж ажиллахдаа DNS протоколын холболтын болон шинэчлэлийн механизмыг ашигладаг. Нэрийн серверийн хаягийн бичилтийн мэдээллийг бичилт нь дээд бүсэд байгаа серверийн бичилттэй өөрийн бичилтийн мэдээллийг харьцуулж шинэчлэл болон хуулбар хийж авч байдаг. Дээд түвшний домайний домайн бүртгэлд домайн бүртгэгчээр нэрийн бүртгэгчээр бүртгэл хийхэд анхдагч нэрийн серверийн баталгаажуулалт анхдагч нь байхгүй бол ядаж хоёрдогч нэрийн серверийн баталгаажуулалт шаарддаг. Хэрвээ нэг сервер нь хандах боломжгүй эсвэл үйл ажиллагаагаа явуулах боломжгүй болсон үед домайний үйл ажиллагааг хэвээр байлгах зорилгын үүднээс олон нэрийн серверийн хэрэгцээ байдаг. Анхдагч нэрийн серверүүд нь ихэвчлэн үндсэн нэрийн серверүүд байдаг бөгөөд ийм тохиолдолд хоёрдогч нэрийн сервер нь дрограмын флагаар баталгаажуулалт шэж тооцож байгаа сервер бөгөөд энэ нь хариултыг тодорхойлолтыг хангаж чадахуйц төлвийг заадаг бөгөөд дээр дурдсан баталгаажуулалтын биттэй хариуг баталгаажуулалтын харилт гэж нэрлэдэг. Энэ флаг нь ихэвчлэн дахин тодорхойлогддог бөгөөд ДНС удирдагчийн хүсэлтийн хэрэгслийн гаралтанд маш чухал үр дүн илтгэдэг. Энэхүү хэрэгсэлд илтгэж байгаа үр дүнд нь нэрийн серверийн баталгаажуулалтын домайн нэрийн асуултанд хариулж байгаа хариулт юм.

Authoritative сервер нь дараах үүргийг гүйцэтгэнэ.

* DNS мэдээллийг өөртөө агуулж, энэ мэдээллийг нийтэд зарлан, ирсэн асуулгуудад хариулах
* Бүртгэлтэй домэйны хувьд, жишээлбэл example.org, түүний дор орших хост нэрүүдэд IP хаяг оноож өгөх
* Бүлэг IP хаягуудад урвуу DNS мэдээлэл хэрэгтэй үед (IP-с хост нэр рүү)

### Caching

Caching сервер гэдэг нь өөр дээрээ ямар нэгэн DNS-н мэдээлэл агуулахгүйгээр зөвхөн асуулга явуулах үүрэгтэй. Асуулгаас ирсэн хариуг тодорхой хугацааны туршид өөр дээрээ хадгалан, дотроос ахин тийм хүсэлт ирэх юм бол ахин гадагшаа асуулга явуулахгүйгээр хурдан хариу өгөх боломжтой болдог. Ингэснээр зурвасын өргөнийг бага ашиглах ба цаг хугацааны хувьд болон authoritative серверийн ачааллыг багасгах давуу талтай.
Resource record:Нэрийн серверийн data файл нь resource record гэгдэх бичлэгүүдийг агуулж байдаг ба заримаас нь дурдвал:

* A-record (address): хостын нэрт харгалзах IP хаяг. Хостын нэрийг IP хаягт хөрвүүлэхэд ашиглана.
* PTR-record (pointer): IP хаягт харгалзах хост нэр. IP хаягыг хост нэрт хөрвүүлэхэд ашиглана.
* NS-record (name server): Өгөгдсөн домайнд харгалзах нэрийн сервер
* MX-record (mail exchanger): Өгөгдсөн домайнд харгалзах mail сервер
* CNAME-record (Canonical name): хост нэрийг alias –д хөрвүүлэх механизм. Нэг IP хаягтай хост олон(multiple) нэртэй байж болно. Жишээ нь зарим хүмүүс блог дээрээ домэйн аваад тавьчихсан байдаг

## Хаяг шийдвэрлэлтийн механизм

Домайн нэр шийдвэрлэгчид нь хамгийн зөв домайний хаяглалын дарааллаар тохиромжтой хариуцлагатай нэрийн серверүүдийг тодорхойлдог. ДНС хүсэлт гаргагч 3н нэрийн серверээс www.wikipedia.org ийн хаягийг шийдүүлэхээр асууж байна. Процессийн шалтгаан:

* Сүлжээний хост үндсэн нэрийн серверүүдийн хаягуудаар анхны кээшээ тохируулагдсан. Ийм сануулга дохио файл нь тодорхой үетэй хугацаагаар админы найдвартай нөөцөөс шинэчлэл хийж байдаг.
* Үндсэн серверүүдийн дундаас дээд түвшний домайний баталгаажуулалт серверийг олох хүсэлт
* 2-р түвшний домайний баталгаажуулалт серверийг олох хүсэлт
* домайн нэрийн хаягийн дараалал бүр дээр хостын хайсан хаягийг буцаах эцсийн алхам хүртэл өмнөх үйлдлүүдийг давтан хийнэ:

## DNS-тэй холбоотой өнөөгийн асуудлууд

Домэйн нэрийн сервер нь нь өөр дээрээ cache буюу түр санамж үүсгэдэгийг дээр дурдсан. Үүнтэй холбоотойгоор dns cache poisoning төрлийн халдлага гарч ирсэн. Энэхүү халдлагыг гол зорилго нь тэрхүү сервер дээр түр хадгалагдсан байгаа мэдээллийг өөрчлөх замаар таны холбогдохыг хүсэж байгаа сервер руу биш хакерууд өөрийн хүссэн сервер, вэб руу оруулахад оршино. Өөрөөр хэлбэл та өөрийн банкны вэб рүү нэвтрээд нууц үгээ хийж байна гэж бодож байхад үнэн хэрэгтээ шал өөр хакеруудын вэб рүү орчихсон өөрийн санхүүгийн мэдээллээ алдаж байх аюултай юм. Өөрөөр хэлбэл phishing төрлийн халдлагын сайжруулсан хэлбэр. Phishing төрлийн халдлага болоход анхаарал болгоомжтой байгаад мэдэж таслан зогсоож болдог бол, cache poisoning төрлийн халдлага нь мэдэх боломжгүй ба үүгээрээ үлэмж хор уршигтай. Нэг удаа амжилттайгаар энэхүү халдлагыг хийж чадсан бол үлэмж олон хэрэглэгчдэд хохирол явуулж чадах боломжтой. Caching домэйн сервер асуулга явуулаад хүлээж байх зуур халдлага үйлддэг байна.Энэ үед аuthorative серверийг DoS attack хийж гацаан өөрийн өөрчилсөн бичлэгтэй response-г caching сервер лүү илгээдэг байна.Домэйн нэрийн систем нь UDP 53-р портоор дамжин мэдээллээ солилцдог ба 16 битийн урттай transaction ID ашиглан солилцдог. Мөн имэйлийг замаас нь хялбархан унших өөрчлөх боломжоор хангах ба шийдэл нь гэвэл DNS серверүүдээс ирж байгаа мэдээллүүдийг баталгаажуулах тоон гарын үсэгтэй болгох, мөн DNS серверээс ирж буй хариултын Source port randomization хийж чагнахаас сэргийлэх боломжтой.Хэдийгээр DNS системийг UDP биш TCP системээр ажиллуулж болох ч энэ нь сүлжээний траффикийг ихэсгэх цаашлаад DNS серверүүдэд ачаалал үүсгэн гацаах зэрэг муу талтай юм.