je_suis_la_vie: (псиносрач)
[personal profile] je_suis_la_vie
Люди запанікували, що українських провайдерів нагинають перекривати ДНС-и... Регочу...

DNS - Domain Name System. Доменна Іменна Система якщо дослівно, красивіше, Система Доменних Імен, де слово "домен" означає "галузка", тобто гілочку, за яку відповідає ось оцей серверок. Розгалужена Система Імен українською правильніше і пояснюваніше.

Вступ.
ДНС-и порівнюють з телефонами. Ось у вашому телефоні є набір номерів, як вони туди потрапляють? Ви самі їх туди заносите. А звідки ви їх знаєте? Вам їх надиктовує власник номеру. А якби власника не було поряд? Уявіть, що ви знаєте власника лише за іменем, ви ввели його ім'я, для уточнення дату народження (щоб вилучити потрапляння на тезку), тицьнули на зелену кнопочку, і телефон якось сам знайшов його номер. Чарівним чином.
Або пам'ятаєте як термінатор шукав Сару Конор? Зайшов до телефонної будки, відкрив телефонну книгу і знайшов там три імені з номерами та адресами. Це аналог ДНС.

Розділ 1. Як і з чого все починається?
Як завжди уважних та доскіпливих людей цікавить - а де ж початок всього?
На моєму компі початок є ось тут: /var/named/etc/root.hint
Прочитаймо цей файл.

; $OpenBSD: root.hint,v 1.10 2013/01/03 18:37:19 gonzalo Exp $
;
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . "
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.cache
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: Jan 3, 2013
; related version of root zone: 2013010300
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
;
; FORMERLY C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; FORMERLY TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13
D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2D::D
;
; FORMERLY NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FE::53
;
; OPERATED BY VERISIGN, INC.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FD::1
;
; OPERATED BY ICANN
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42
;
; OPERATED BY WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:DC3::35
; End of File

Ви й самі його можете собі качнути почитати з серверів FTP.INTERNIC.NET або RS.INTERNIC.NET.

ДНС - це величезне й величне розгалуження. Таке собі мирове дерево Іґдрасіль. Корінь, з чого все починається позначений крапочкою - ".". Це так звані сервери горішнього рівня - Top Level Domain - просто крапочка. Бо насправді компи читають доменні імена ззаду наперед, і виглядає воно насправді ось так - facebook.com. - крапочка в кінці, бачите? Просто ви її не ставите, ваші застосунки її самі поставлять, бібліотека, що звертається до ДНС-у сама її підставить, не хвилюйтесь.

Отже це початок. Треба просто звантажити собі цей файлик і підкласти вашому компу, і ваш ДНС сервер на вашому компі знатиме імена та айпі адреси Top Level Domain. Це найважливіше. Він їх знатиме і звертатиметься до них по допомогу.

2. Як воно виглядає в житті?

Ну ось ви відкрили оглядача, і написали йому адресу вгорі в рядку www.facebook.com (крапочку ви забули, та й взагалі не знаєте про її існування, але бібліотека сама її матиме на увазі й додасть)

У вашому компі ще стоїть вказівка, дана вам вашим надавачем послуг - до якого найближчого ДНС сервера звертатися. Всі провайдери надають свої такі ДНС для своїх користувачів. Ну ви налаштовували, або всі налаштування ДНС приходять вам разом з DHCP (я не розписуватиму тут, що це таке).

Отже ваш комп лізе до вказаного йому ЯВНО (у вашій угоді з провайдером ці айпі адреси провайдерівських ДНС-ів вказані) найближчого ДНС-сервера, який ще нічого не знає про Фейсбук. Звідсюди всю брудну роботу виконує оцей самий провайдерівський найближчий до вас ДНС-сервер.

а) Ваш ДНС має такий же список - один в один, запевняю вас - як я подавав вище.
І ваш комп питає його, скажи мені айпі адерсу для www.facebook.com Той поліз за словом до себе в кишеню, нічого там не знайшов і звертається до одного з тих із "точкових серверів" (список вище). Візьму для вас перший з них.

. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30

Тут вказано дві айпіадреси - звична, стара, розроблена ще в нетрях Пентагону IPv4 та новомодна - IPv6. Що таке IPv6, я вам не розповідатиму, а візьму звичну для вас IPv4
Ваш сервер поліз до 198.41.0.4 зі своїм питанням - дай мені айпі www.facebook.com
Це виглядає ось так:
dig @198.41.0.4 www.facebook.com A
Копнути цей самий 198.41.0.4, на предмет www.facebook.com запис типу А - тобто IPv4

Відповідь нам прийшла да долі секунди:

;; AUTHORITY SECTION:
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.

;; ADDITIONAL SECTION:
m.gtld-servers.net. 172800 IN A 192.55.83.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
c.gtld-servers.net. 172800 IN A 192.26.92.30
b.gtld-servers.net. 172800 IN A 192.33.14.30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
a.gtld-servers.net. 172800 IN A 192.5.6.30

І відповідь ця чимось нагадує отой самий первинний список, з якого починається Всесвіт Міжмережжя.

Розтлумачу:

Насправді 198.41.0.4 відповів нам, що він не знає нічого про www.facebook.com - але має список ДНС серверів для ЗОНИ com. Ось тобі їхній список, запитай у них, може вони щось знають.
Це відповідь так званого "ледачого ДНС сервера". Інакше він загнеться, а щоб не загнувся його роботу треба оптимізувати, ось він і опитмізовує.
Ну добре, каже ваш ДНС, бере один із цих авторитетних серверів зі списку і йде до нього з таким же питанням (візьму перший для вас):

dig @192.55.83.30 www.facebook.com A
Знову ж: покопати 192.55.83.30 на предмет www.facebook.com, щоб отримати запис типу А.
А шо ж він нам відповість?

; <<>> DiG 9.4.2-P2 <<>> @192.55.83.30 www.facebook.com A
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41555
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.facebook.com. IN A

;; AUTHORITY SECTION:
facebook.com. 172800 IN NS a.ns.facebook.com.
facebook.com. 172800 IN NS b.ns.facebook.com.

;; ADDITIONAL SECTION:
a.ns.facebook.com. 172800 IN A 69.171.239.12
b.ns.facebook.com. 172800 IN A 69.171.255.12

О! Ось ми і підійшли до філософії самої назви Розгалужена Система Імен. Тобто на всі питання щодо www.facebook.com зможе відповісти ВІДПОВІДАЛЬНИЙ (авторитетний) за свою галузку a.ns.facebook.com. або b.ns.facebook.com. - айпі адреси 69.171.239.12 69.171.255.12 відповідно.

Тобто відповідь отого одного з відповідальних за зону com. тлумачимо так: я не знаю нічого про www.facebook.com, але ось у мене список відповідальниз ДНС серверів для зони (галузки) facebook.com. - запитай у них, може вони знають. Це теж "оптимізована" відповідь "ледачого сервера".

І ваш ДНС іде нарешті до одного з цих відповідальних за зону facebook.com. візьмемо перший:

dig @69.171.239.12 www.facebook.com A
А у відповідь:
;; ANSWER SECTION:
www.facebook.com. 3600 IN CNAME star.c10r.facebook.com.

;; AUTHORITY SECTION:
c10r.facebook.com. 172800 IN NS a.ns.c10r.facebook.com.
c10r.facebook.com. 172800 IN NS b.ns.c10r.facebook.com.

;; ADDITIONAL SECTION:
a.ns.c10r.facebook.com. 172800 IN A 69.171.239.11
b.ns.c10r.facebook.com. 172800 IN A 69.171.255.11

Тобто нас перекинули на трохи інші ДНС сервери - це раз, а друге ми отримали не відповідь на запит на тип відповіді А, але нам повернули тип CNAME - CANONICAL NAME - канонічне :) ім'я, на яке можна повісити будь-яке інше. І буде так, що ви ніби звертаєтеся до www.facebook.com, але насправді потрапляєте на star.c10r.facebook.com. :) А веб сервер розпізнає із заголовка вашого оглядача, що запит стосується www.facebook.com і перехоплює на себе цей запит і відповідає вам.
Отже, нам лише перепитати у 69.171.239.11 або 69.171.255.11 про star.c10r.facebook.com

dig @69.171.239.11 star.c10r.facebook.com. A
;; ANSWER SECTION:
star.c10r.facebook.com. 60 IN A 69.171.237.20

;; AUTHORITY SECTION:
c10r.facebook.com. 172800 IN NS a.ns.c10r.facebook.com.
c10r.facebook.com. 172800 IN NS b.ns.c10r.facebook.com.

;; ADDITIONAL SECTION:
a.ns.c10r.facebook.com. 172800 IN A 69.171.239.11
b.ns.c10r.facebook.com. 172800 IN A 69.171.255.11

Voilà! Нарешті ми отримали айпі адресу 69.171.237.20 Бо оці самі двоє авторитетних ДНС серверів 69.171.239.11 і 69.171.255.11 її й мали, бо вони авторитетні для "галузки" (виноградної гілки) під назвою facebook.com. і вони знають про неї все, але напряму на них потрапити не можливо, лише через підміну з CNAME, щоб перейти з 69.171.239.12 69.171.255.12 НА 69.171.239.11 69.171.255.11, де все й заховано. Цукербег хитрий.

Спробуйте взяти 69.171.237.20 та втулити собі в адресовий рядок оглядача. Що бачите?

3. На завершення.
Я не розписуватиму вам внутрішні переадресації Фейсбука, бо ви зараз запитаєте, - а звідки взялися: 173.252.110.27 (а це просто айпі адреса для facebook.com БЕЗ www попереду) з 31.13.81.128 - це вже тема іншої бесіди.

nslookup facebook.com

Non-authoritative answer:
Name: facebook.com
Address: 173.252.110.27

nslookup www.facebook.com

Non-authoritative answer:
www.facebook.com canonical name = star.c10r.facebook.com.
Name: star.c10r.facebook.com
Address: 31.13.81.128

А тимчасом, запам'ятайте: вислів "заблокувати ДНС-и" змушує мене гомерично реготати.
Принаймні якщо ваш провайдер перекриє (а він може, але лише для своєї внутрішньої мережі), то ви завжди зможете звернутися до загальнодоступного ДНС сервера Ґуґла за адресою 8.8.8.8 Він збрехати не дасть.

Висновки.
Отже:

- Ваш ДНС сервер, що виконував всю роботу - зветься "рекурсивним". Тобто таким, що пройшов на всю глиб послідовних запитів, доки не спустився до самого низу потрібної нам "галузки".

- Всі ці ДНС сервери, що відмахувалися від нього відписками звуться "кореневими серверами", вони ж "ледачі сервери", віддають лише посилання на того, хто на їхню думку знає відповіді, і так з кожною відповіддю ви наближаєтеся до істини.

- Коли ваш сусід теж запитає про www.facebook.com після того як ви запитали, то ваш ДНС-сервер спершу перевірить в своїх кишенях, а там знайде вже раніше притягнуту відповідь і відразу дасть її вашому сусідові, не повторюючи знову всього цього складного шляху. Це зветься "ДНС кеш". Кеші зберігаються TTL секунд (Time To Live - Час Скільки Жити) для канонічного імені ТТЛ дорівню 3600 секунд - година. Для айпі адреси 69.171.237.20 - 60 секунд, хвилина. Тобто через TTL часу ваш місцевий рекурсивний ДНС сервер матиме перевірити, перепитавши знову авторитетні сервери для "галузки" facebook.com. чи нічого не змінилося. Він не обов'язково повторюватиме весь цей довгий шлях, бо TTL для NS (Name Server - Сервер Імен) записів довжелезні - 3600000 секунд, і 172800 секунд. Тому він відразу звертатиметься до відповідальних за "галузку" facebook.com. не побираючись по тим "ледачим".

Ось так, дуже просто, не вдаючись занадто в техніку та зайві для пересічного читача деталі.

Прочитали - передавайте далі. :) Хай шакали здохнуть від люті.

Profile

je_suis_la_vie: (Default)
je_suis_la_vie

September 2017

S M T W T F S
     12
3456789
10 111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 23rd, 2017 04:39 pm
Powered by Dreamwidth Studios