Що е то DNS и с какво се яде?

1
Добави коментар
burgaslan
burgaslan

Сега ще разчоплим какво точно е това животно DNS и какво точно прави.

Зад странното съкращение DNS се крие Domain Name System или преведено на български: “Система за имена на домейните”. Сложно изглежда, а? Всъщност не е никак сложно. Това представлява система за улесняване на мрежовата комуникация от човешка гледна точка. Как така? Ами ето…

Мрежова комуникация

Важно нещо. Вашият компютър трябва да си комуникира правилно с другите компютри по мрежата. Само така ще имате достъп до локална мрежа и интернет. За да функционира правилно една мрежа, всички компютри трябва да имат валидни адреси в определен стандарт(най-често IPv4 или IPv6).  Тоест и вашият компютър трябва да има валиден адрес, както и другите компютри в мрежата трябва да имат валидни адреси.

Те изглеждат от порядъка на 93.48.185.59(за IPv4 стандарт) или от порядъка на 2001:0:9d38:6ab8:3096:163b:3f57:fefc(за IPv6 стандарт). Какво ви засяга вас адреса на вашият компютър? Ами да – нищо. Но ви засяга адреса на останалите компютри, към които искате връзка. Така например, ако искате да отворите някой сайт, трябва да знаете неговият адрес. Искаме да отворим например google. Трябва да въведем адрес 173.194.39.246. Сложно, нали? А сега си представете да се налагаше да запомните адресите на 10, 20 или 50 сайта. Още по-сложно.

DNS комуникация

Точно поради тази сложна причина, се налага да се въведе улеснение за хората, за да не се налага да се помнят всички тези цифри. И така, в едни много специални места е указано, че когато въведете google.bg вие всъщност имате предвид че искате да се свържете с 173.194.39.246. И се свързвате.

Точно това е DNS систеамта. Чудничко, нали? Съпоставяне на имена с адреси в компютърен стандарт. Така можете да запомните gmail.com, google.bg, wikipedia.org – съвсем без да се налага да помните дълги поредици от цифри. Когато въведете имената им, DNS системата се включва, открива какъв е техният адрес и го ползва вместо вас.

Основни проблеми на DNS

Естествено, всяка система си има проблеми. В нашият случай, за да улесни помненето на адреси от хора, DNS понякога допуска грешки, създава проблеми или просто не е достатъчно сигурна за безопасна употреба.

Кои са допусканите грешки и как да се спасим от тях? Основните допускани грешки в процеса на работа са в кеширането на резултатите по погрешен начин. Когато вие искате да отворите facebook.com например, вашият компютър праща запитване към DNS сървъра(чиято роля е да дава адресите в “цифров вид”) и си записва отговора.

В нашият пример, искаме да отворим facebook. Нашият компютър прави запитване – какъв е адреса на facebook.com? И получава отговор. Например 1.1.1.1, което е грешен отговор. Някъде по трасето нещо се е объркало, но нашият компютър приема това за валиден отговор и се опитва да се свърже с този адрес. Естествено, ние виждаме резултат – facebook.com: такъв сайт не съществува.

Всъщност, такъв сайт съществува, но той не се намира на 1.1.1.1, както си мисли нашият компютър, а на 173.252.110.27(или 2a03:2880:2110:df07:face:b00c:0:1 за IPv6). По-лошото е, че когато се опитате да го отворите отново, компютъра ви казва “А! Аз наскоро съм питал за този адрес, знам го, facebook.com е 1.1.1.1″. И се опитва наново да отвори този адрес, който е невалиден.

Как да се оттървем от този проблем? Елементарно. Просто трябва да информираме компютъра, че DNS резултата му е грешен и трябва да го погледне наново. Това става по няколко начина. Най-елементарният е да изполваме Ctrl+F5 за презареждане на страницата без използване на кеш(поддържано от повечето браузъри, като FireFox, Opera, IE, Chrome…).

Друг вариант е техническият подход. Пускаме си cmd: (WinKey+R) -> cmd(enter) и въвеждаме “ipconfig /flushdns”. Това указва да се изчисти изцяло кеша за всички DNS резултати.

C:\>ipconfig /flushdns
Настройка протокола IP для Windows
Кэш сопоставителя DNS успешно очищен.
C:\>

След което просто пробваме да отворим сайта наново. Ако проблема е бил в DNS кеша, трябва да е разрешен.

Какви проблеми създава DNS? Многотипни. Едни от най-широко разпространените проблеми са блокиране на достъпа доопределен сайт(цензура) или блокиране на достъпа до всички сайтове(тип “спряха ми интернета”). Какво ще рече това?

Блокиране до един сайт – цензура. Да речем, че аз съм вашият интернет доставчик. И не искам да отваряте сайт Х(alabala.com). Указвам, че всеки път, когато вашият компютър попита, сайт Х ще е с адрес 1.2.3.4, който не съществува. И воалла – вие вече не можете да отворите сайта, понеже нямате “цифровият му адрес”. Нещо по-кофти. Мога да кажа, че сайт Х всъщнсот е сайт У. И така, когато вие въведете alabala.com, ще бъдете пренасочвани към facebook.com например, а не към истинският сайт, който искате да посетите.

Блокиране на достъпа до всички сайтове – спиране на интернета от начинаещи доставчици на интернет. Вероятно сте чували от приятел, който са му спрели интернета, но има Skype който работи. И се чудите как става? DNS е отговора. Skype не ползва DNS и не му е необходим за да работи – той оперира директно с адреси. Вероянто в този случай просто е отказан достъп до DNS сървъра. Така, когато въведете facebook.com например, вашият компютър се опитва да погледне какъв е адреса на сайта, но не получава отговор. Когато не получи отговор, просто не може да продължи и ви изкарва съобщение, че има проблем с връзката. Но пък Skype или другите технологии, които не разчитат на DNS нямат проблем да работят.

Как се обхождат двата проблема?!? Елементарно. Използвайте независим DNS, ако не можете да разчитате на вашият. Google предлага два безплатни DNS сървъра за публично ползване. Освен че са супер бързи в отговорите, те са стабилни, а и са на доста по-високо ниво от който и да е доставчик в България, ЕС или Европа. Как да го направите? Задайте си ръчно DNS сървъри 8.8.8.8 и втори резервен 8.8.4.4. Няма да пускам детайлно разясняване от-до, защото мисля, че не е наложително, а само екраче с крайният резултат, да се ориентирате:

Такъв е задоволителният краен резултат. Така вече няма да ви дреме особено какво решава да прави вашият интернет доставчик – да ви спира интернета по DNS или да ви налага някаква цензура. Особено полезно за абонати на БТК/Виваком/Глобул/МТел(при тях е желателно директно рутера да се насочи към тези DNS-и, а не всеки компютър поотделно, но… както и да е).

Проблеми със сигурността на DNS – какви са? О, големи. Тази система отваря място за цял раздел атаки над компютърните мрежи. Представете си, че намерите начин да видите или да влияете на резултатите, които се получават при запитвания за адреси. Лошо! А още по-лошо е, че има начини. Не един, не два.

Най-силно уязвими са локалните мрежи. Тоест, ако ние с вас използваме интернет от един и същ безжичен рутер. В това положение е елементарно да се види вие кои сайтове посещавате. Също така не е особено трудно да се манипулира системата, за да се генерират грешки. Един (вече) стар и подъл метод е наречен DNS poisoning. Ще го обясним тук, за да получите някаква представа какво се случва.

Аз и вие се намираме в една и съща безжична мрежа. Вие отваряте facebook.com. Вашият компютър пита безжичният рутер “Кaкъв е адреса на facebook.com?”. И получава отговор 173.252.110.27. Отваряте сайта успешно. Аз виждам това чрез слушане на трафика и знам какво сте направили.

Така, стъпка 2-ра: подготовка и отравяне на рутера. Първо, създавам някакво подобие на facebook.com на моят компютър. Толкова убедително, че когато го видите, да не се усъмните особено. Всичко е добре, но моят адрес е 93.41.22.197. Вие никога няма да отворите моят адрес, да се подведете че това е facebook и да си въведете името и паролата, нали? Правилно.

Стъпка 3-та: отравяне на рутера. Сега аз отварям facebook. Моят компютър прави запитване към рутера: “Кaкъв е адреса на facebook.com?”. И получава отговор 173.252.110.27. Но вместо моят компютър да е доволен, казва на рутера “Грешка, няма сайт на този адрес. Провери отново…”. Рутера проверява наново и пак връща резултат 173.252.110.27 за адрес на facebook. Отново връщаме грешка на рутера – там няма такъв сайт. И нашият компютър вметва, че последният път, когато успешно е отворил сайта се е намирал на 93.41.22.197. Рутера отново проверява и казва, че адреса на facebook е 173.252.110.27, но ако той не сработи, може да се пробва резервен 93.41.22.197. Връщаме съобщение за грешка на 173.252.110.27 и съобщение за успех на 93.41.22.197. Така, след още дълги поредици манипулации рутера вижда, че facebook връща много грешки, ако се даде резултат 173.252.110.27(истинският адрес) и никакви грешки за 93.41.22.197(моят компютър).

Рано или късно, евентулано рутера предпочита резултата 93.41.22.197 като верен или защото се включва системата му за ранно предсказване на грешките, или защото буфера му приема стойността за кеш(има и други варианти).

Така, следващият път когато вие се опитате да обновите страницата facebook(която тя си прави автоматично), рутера ще ви насочи към моето фалшиво копие. Което ще ви каже “Здрасти, дай име, дай парола”. И ако вие дадете името и паролата – аз вече ги имам. В последствие инстантно ви пускам към истинският facebook, за да не заподозрете нещо.

Цялата тази атака(DNS poisoning) отнема между 20 и 30 секунди за изпълнение и сложността й не е особено голяма(за локална мрежа). Подобен тип атаки по-трудно се реализират от външна мрежа, но не са невъзможни.

И в крайна сметка? Сега би трябвало да сте наясно какво се случва горе-долу, когато напишете google.bg и започне зареждането (: Както и с няколко други безполезни факта.