LXF141:DrBrown2

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

Что в име­ни нам... до­ме­на?

DNS Уз­на­ем, как DNS на­хо­дит игол­ку в сто­ге се­на.

Ма­лень­кий фраг­мент про­стран­­ст­ва имен DNS, где linuxformat на­хо­дит­ся на по­до­баю­щем ему мес­те — в цен­тре все­лен­ной.

В са­мом на­ча­ле эры меж­се­те­во­го взаи­мо­дей­ст­вия раз­ре­ше­ние име­ни – пре­об­ра­зо­ва­ние име­ни ком­пь­ю­те­ра в IP-ад­рес – осу­ще­ст­в­ля­лось пу­тем по­ис­ка име­ни в фай­ле hosts.txt. Файл хра­нил­ся на од­ном ком­пь­ю­те­ре и ко­пи­ро­вал­ся от­ту­да на все ос­таль­ные. Ко­гда ком­пь­ю­те­ров бы­ло не­сколь­ко со­тен и их ко­ли­че­ст­во рос­ло, ска­жем, на дю­жи­ну в день, схе­ма ра­бо­та­ла пре­крас­но. Но на со­вре­мен­ный Ин­тер­нет с мил­ли­ар­дом – или око­ло то­го – ком­пь­ю­те­ров ее рас­про­стра­нить нель­зя. (Что­бы не­мно­го про­яс­нить мас­штаб, ска­жу, что, со­глас­но сай­ту http://www.eurid.eu, в до­ме­не .eu поя­ви­лось 280 но­вых за­пи­сей толь­ко за по­след­ний час.) Что­бы с этим спра­вить­ся, нуж­на рас­пре­де­лен­ная ба­за дан­ных, а име­на ком­пь­ю­те­ров сле­ду­ет ор­га­ни­зо­вать в дре­во­вид­ную струк­ту­ру, до­пус­каю­щую эф­фек­тив­ный по­иск. Так поя­ви­лась DNS, или сис­те­ма до­мен­ных имен (Domain Name System).

Ес­ли в Ин­тер­не­те и есть не­вос­пе­тый ге­рой, то это DNS. Что в ней ге­рои­че­ско­го? А то, что боль­шая часть за­да­чи по­ис­ка ка­п­ли в мо­ре Ин­тер­не­та ле­жит на DNS. Изо всех глу­бин­ных тех­но­ло­гий Ин­тер­не­та эта са­мая глу­бин­ная. А по­че­му ге­рой не вос­пет? По­то­му что в от­ли­чие от web-, поч­то­вых или FTP-сер­ве­ров, у DNS нет кли­ент­ской час­ти, о ко­то­рой зна­ют ко­неч­ные поль­зо­ва­те­ли. Все это, как мы уви­дим, про­ис­хо­дит за ку­ли­са­ми.

На на­шем уро­ке мы раз­бе­рем­ся, как ра­бо­та­ет DNS, ис­сле­ду­ем не­боль­шую часть ее про­стран­ст­ва имен, по­смот­рим, как на са­мом де­ле вы­гля­дит «кли­ент» DNS, и вы­яс­ним, как его на­стро­ить.

Работа DNS це­ли­ком ос­но­ва­на на ор­га­ни­за­ции имен ком­пь­ю­те­ров в дре­во­вид­ную струк­ту­ру, фраг­мент которой по­ка­зан на ри­сун­ке. Ли­стья это­го де­ре­ва – име­на вро­де http://www.linuxformat.co.uk. Та­кие име­на на­зы­вают­ся пол­но­стью оп­ре­де­лен­ными име­нами до­ме­на (FQDN), и они очень по­хо­жи на пол­ные пу­ти к фай­лам в Linux, за ис­клю­че­ни­ем двух мо­мен­тов. Во-пер­вых, в DNS час­ти име­ни раз­де­ля­ют­ся точ­кой ., то­гда как час­ти пу­ти – слэ­шем /. Во-вто­рых, име­на в DNS за­пи­сы­ва­ют­ся «от млад­ше­го к стар­ше­му» – ме­нее зна­чи­мая часть ад­ре­са идет пер­вой, а име­на фай­лов за­пи­сы­ва­ют­ся «от стар­ше­го к млад­ше­му». Мы при­вык­ли к та­ко­му по­ряд­ку, по­сколь­ку так в ми­ре за­пи­сы­ва­ют обыч­ный поч­то­вый ад­рес: но­мер до­ма, ули­ца, го­род, стра­на. [А у нас строго наоборот]

За­про­сы DNS вы­пол­ня­ют­ся ре­кур­сив­но с по­лу­че­ни­ем ссы­лок на сер­ве­ры, на­хо­дя­щие­ся все глуб­же в ие­рар­хии, по­ка не най­дет­ся сер­вер, спо­соб­ный дать от­вет на ис­ход­ный за­прос.

По­смот­рим, что про­ис­хо­дит, ко­гда вы от­кры­вае­те в брау­зе­ре http://www.linuxformat.co.uk. Ком­пь­ю­те­ру нуж­но пре­об­ра­зо­вать FQDN в IP-ад­рес. Ес­ли это до­маш­ний ком­пь­ю­тер, он, ве­ро­ят­но, от­прав­ля­ет за­прос на DNS-сер­вер, за­пу­щен­ный на мо­де­ме/мар­шру­ти­за­то­ре, ко­то­рый пре­дос­тав­ля­ет вам ши­ро­ко­по­лос­ное под­клю­чение. Тот в свою оче­редь на­прав­ля­ет за­прос дру­го­му DNS-сер­ве­ру, ве­ро­ят­но, за­пу­щен­но­му у ва­ше­го про­вай­де­ра (см. ри­су­нок). Тут на­чи­на­ет­ся Ма­лень­кая Хит­рость™. Этот DNS-сер­вер на­чи­на­ет оп­ра­ши­вать кор­не­вые сер­ве­ра имен и по­лу­ча­ет ссыл­ку на DNS-сер­вер, у ко­то­ро­го есть ин­фор­ма­ция о до­ме­не uk. Про­цесс по­лу­че­ния ссы­лок на сер­ве­ры, на­хо­дя­щие­ся ни­же в ие­рар­хии имен, про­дол­жа­ет­ся, по­ка не на­хо­дит­ся сер­вер, спо­соб­ный раз­ре­шить за­прос и пре­дос­та­вить за­пра­ши­вае­мый IP-ад­рес. Ес­ли вы хо­ти­те уви­деть на­стоя­щий мар­шрут это­го про­цес­са, вы­пол­ни­те ко­ман­ду

dig +trace www.linuxformat.co.uk

На прак­ти­ке этот мар­шрут за­мет­но со­кра­ща­ет­ся, так как сер­ве­ры DNS кэ­ши­ру­ют ре­зуль­та­ты по­след­них за­про­сов и от­вет на за­прос час­то на­хо­дит­ся в кэ­ше. И ес­ли я зай­ду на один и тот же сайт два­ж­ды, во вто­рой раз за­прос не уй­дет даль­ше мое­го ло­каль­но­го DNS-сер­ве­ра. На са­мом де­ле, при под­клю­че­нии к web-сер­ве­ру брау­зе­ры час­то ис­поль­зу­ют соб­ст­вен­ный кэш, ко­то­рый ве­дут са­ми.

Дре­во­вид­ная струк­ту­ра имен DNS так­же спо­соб­ст­ву­ет ие­рар­хи­че­ско­му де­ле­ги­ро­ва­нию пол­но­мо­чий вы­бо­ра имен, га­ран­ти­руя, что FQDN-име­на ос­та­нут­ся уни­каль­ны­ми. На­при­мер, на­уч­ной об­ще­ст­вен­но­сти Ве­ли­ко­бри­та­нии по су­ти го­во­рят: «На­зы­вай­те свои ком­пь­ю­те­ры как угод­но, но имя долж­но за­кан­чи­вать­ся на .ac.uk». Пе­ре­да­вая пол­но­мо­чия на уро­вень ни­же, Кембриджскому уни­вер­си­те­ту го­во­рят: «На­зы­вай­те свои ком­пь­ю­те­ры как угод­но, но имя долж­но за­кан­чи­вать­ся на .cam.ac.uk»; и т. д.

Ис­ход­ные ма­те­риа­лы DNS на­зы­ва­ют­ся за­пи­ся­ми ре­сур­сов. Я опи­сал функ­цио­ни­ро­ва­ние DNS на ос­но­ве по­ис­ка име­ни ком­пь­ю­те­ра и воз­вра­ще­ния IP-ад­ре­са. Эта ин­фор­ма­ция хра­нит­ся в за­пи­сях ре­сур­сов ти­па A. DNS под­дер­жи­ва­ет и за­пи­си дру­гих ти­пов, для раз­лич­ных це­лей. Не­ко­то­рые из них при­ве­де­ны ни­же:

  • За­пи­си A Пре­об­ра­зу­ют име­на ком­пь­ю­те­ров в ад­ре­са фор­ма­та IPV4.
  • За­пи­си AAAA Пре­об­ра­зу­ют име­на ком­пь­ю­те­ров в ад­ре­са фор­ма­та IPV6. Ожи­да­ет­ся, что они по­лу­чат боль­шее рас­про­стра­не­ние в бу­ду­щем.
  • За­пи­си MX За­да­ют име­на поч­то­вых сер­ве­ров, ис­поль­зуе­мых ука­зан­ным до­ме­ном для об­ра­бот­ки поч­ты.
  • За­пи­си NS Эти за­пи­си за­да­ют сер­ве­ра имен для ука­зан­но­го до­ме­на.
  • За­пи­си PTR Ис­поль­зу­ют­ся в ос­нов­ном для об­рат­ных за­про­сов – пре­об­ра­зо­ва­ния IP-ад­ре­сов в име­на ком­пь­ю­те­ров.
  • За­пи­си CNAME Эти про­сто пе­ре­на­прав­ля­ют на дру­гое имя ком­пь­ю­те­ра; не­что вро­де алиа­са.

Об­рат­ные за­про­сы

Как мы ви­дим, DNS раз­ра­бо­та­на в ос­нов­ном для свя­зы­ва­ния до­мен­ных имен с IP-ад­ре­са­ми. Од­на­ко ино­гда ей при­хо­дит­ся вы­пол­нять об­рат­ное пре­об­ра­зо­ва­ние – из IP-ад­ре­сов в име­на ком­пь­ю­те­ров. Этот про­цесс на­зы­ва­ет­ся об­рат­ным за­про­сом DNS и мо­жет по­на­до­бить­ся, на­при­мер, ес­ли сер­вис ис­поль­зу­ет по­ли­ти­ку управ­ле­ния дос­ту­пом на ос­но­ве до­мен­но­го име­ни ком­пь­ю­те­ра кли­ен­та. Обыч­ная ие­рар­хия до­мен­ных имен не под­хо­дит для этой це­ли: что­бы най­ти за­пись A, со­дер­жа­щую за­дан­ный IP-ад­рес, при­дет­ся обы­скать це­лое про­стран­ст­во имен, это со­вер­шен­но не­ре­аль­ное пред­ло­же­ние.

Для раз­ре­ше­ния об­рат­ных за­про­сов су­ще­ст­ву­ет от­дель­ное де­ре­во имен со спе­ци­аль­ным име­нем до­ме­на in-addr.arpa. Это де­ре­во раз­ветв­ля­ет­ся на че­ты­ре уров­ня, со­от­вет­ст­вую­щих че­ты­рем так на­зы­вае­мым ок­те­там IP-ад­ре­са, как по­ка­за­но ни­же. Ка­ж­до­му из воз­мож­ных IP-ад­ре­сов со­от­вет­ст­ву­ет узел на ниж­нем уров­не это­го де­ре­ва. На ри­сун­ке по­ка­за­но по­ло­же­ние уз­ла для ад­ре­са 80.244.178.150. Ес­ли про­честь до­мен­ное имя это­го уз­ла «от млад­ше­го к стар­ше­му», мы по­лу­чим 150.178.244.80.in-addr.arpa, в ко­то­ром ок­те­ты IP-ад­ре­са идут в об­рат­ном по­ряд­ке.

Это стран­ное про­стран­ст­во имен ис­поль­зу­ет­ся для вы­пол­не­ния об­рат­ных за­про­сов, ко­гда вы на­чи­нае­те с IP-ад­ре­са и пре­об­ра­зуе­те его в FQDN.

Эти пря­мое и об­рат­ное про­стран­ст­во имен, пред­по­ло­жи­тель­но, аб­со­лют­но не за­ви­сят друг от дру­га, но на прак­ти­ке не­боль­шое со­от­вет­ст­вие есть, так как ком­пь­ю­те­ры в од­ной и той же IP-под­се­ти по всей ве­ро­ят­но­сти на­хо­дят­ся в од­ном до­ме­не.

Кли­ент­ская сто­ро­на DNS

Хо­тя име­ют­ся ути­ли­ты вро­де dig и nslookup, при­год­ные на ро­ли кли­ен­тов DNS, на прак­ти­ке они ис­поль­зу­ют­ся толь­ко для ди­аг­но­сти­ки. Ис­тин­ная кли­ент­ская сто­ро­на DNS скры­та в на­бо­ре биб­лио­теч­ных про­це­дур, на­зы­вае­мых пре­об­ра­зо­ва­те­ля­ми ад­ре­сов – функ­ций с та­ки­ми име­на­ми, как getaddrinfo() и gethostbyname().

В Linux эти пре­об­ра­зо­ва­те­ли ад­ре­сов мо­гут по­лу­чать ин­фор­ма­цию из раз­лич­ных ис­точ­ни­ков, вклю­чаю­щих:

  • Ло­каль­ный файл /etc/hosts.
  • Сер­вер имен в ло­каль­ной се­ти, та­кой как NIS или LDAP.
  • DNS.

Что­бы уз­нать, к ка­ким ис­точ­ни­кам об­ра­тить­ся, пре­об­ра­зо­ва­те­ли имен сна­ча­ла чи­та­ют так на­зы­вае­мый файл вы­бо­ра сер­ви­са имен /etc/nsswitch.conf, где они на­де­ют­ся разыскать следую­щую стро­ку:

hosts: files dns

За­пи­си в этом фай­ле ссы­ла­ют­ся пря­мо на име­на биб­лио­тек, ко­то­рые зна­ют, как ра­бо­тать с ка­ж­дым ис­точ­ни­ком. На­при­мер, за­пись “'files” ве­лит пре­об­ра­зо­ва­те­лю ис­поль­зо­вать биб­лио­те­ку libnss_files, за­пись “dns” – биб­лио­те­ку libnss_dns, как по­ка­за­но на ри­сун­ке ниже. В слу­чае DNS есть вто­рой файл, ко­то­рый ска­жет пре­об­ра­зо­ва­те­лям, где на­хо­дят­ся сер­ве­ры DNS. Это файл /etc/resolv.conf. Там вы най­де­те од­ну или не­сколь­ко ди­рек­тив nameserver, ко­то­рые за­да­ют ад­ре­са сер­ве­ров имен в ко­ли­че­ст­ве до трех, на­при­мер:

nameserver 192.168.1.254

Ес­ли ваш ком­пь­ю­тер по­лу­ча­ет се­те­вые на­строй­ки по DHCP или для ра­бо­ты с его се­те­вы­ми ин­тер­фей­са­ми ис­поль­зу­ет­ся Network-Manager, этот файл бу­дет за­пол­нен ав­то­ма­ти­че­ски. Од­на­ко для ком­пь­ю­те­ров со ста­ти­че­ски­ми на­строй­ка­ми се­ти вам мо­жет по­на­до­бить­ся из­ме­нить файл вруч­ную.

На­строй­ка раз­ре­ше­ния име­ни на кли­ен­те до­воль­но про­ста и кру­тит­ся во­круг фай­лов nsswitch.conf и resolv.conf.

Хит­ро­сти DNS

С по­мо­щью DNS мож­но де­ше­во и сер­ди­то рас­пре­де­лить на­груз­ку вкру­го­вую [round-robin]. С не­сколь­ки­ми за­пи­ся­ми в DNS для од­но­го и то­го же FQDN, ука­зы­ваю­щи­ми на раз­лич­ные IP-ад­ре­са, DNS вы­бе­рет из спи­ска со­вер­шен­но слу­чай­ный ком­пь­ю­тер. По­про­буй­те по­пин­го­вать http://pool.ntp.org, ка­ж­дый раз от­ме­чая пин­гуе­мый IP-ад­рес, и вы пой­ме­те, как это ра­бо­та­ет.

DNS так­же вы­сту­па­ет как со­уча­ст­ник в вир­ту­аль­ном хос­тин­ге – ил­лю­зии, при ко­то­рой соз­да­ет­ся ви­ди­мость на­ли­чия не­сколь­ких web-сер­ве­ров, то­гда как не­сколь­ко сай­тов на са­мом де­ле на­хо­дят­ся на од­ном ком­пь­ю­те­ре (с од­ним и тем же IP-ад­ре­сом). Это поч­ти пол­ная про­ти­во­по­лож­ность си­туа­ции с round-robin, так как те­перь в DNS есть не­сколь­ко FQDN, ука­зы­ваю­щих на один и тот же IP-ад­рес. На­при­мер, за­пи­си A для обо­их ад­ре­сов http://www.linuxformat.co.uk и http://www.tuxradar.co.uk ука­зы­ва­ют на IP-ад­рес 80.244.178.150.

За­пи­си NS

DNS выдает обиль­ную информацию о сво­ей структуре; в ос­нов­ном ее мож­но рас­ко­пать ко­ман­дой dig. Для начала, до­будем спи­сок корневых серверов имен, запросив NS-записи для домена .:

$ dig ns .
;; QUESTION SECTION:
;.				 IN	 NS
;; ANSWER SECTION:
.	 105306	 IN	 NS	 a.root-servers.net.
.	 105306	 IN	 NS	 b.root-servers.net.
.	 105306	 IN	 NS	 c.root-servers.net.
;; ADDITIONAL SECTION:
b.root-servers.net	 52989	 IN	 A	 192.228.79.201
c.root-servers.net	 400119	 IN	 A	 192.33.4.12
d.root-servers.net	 54917	 IN	 A	 128.8.10.90

Я со­кра­тил вы­вод этой ко­ман­ды. На са­мом де­ле, есть 13 кор­не­вых сер­ве­ров имен с име­на­ми от a до m. Фи­зи­че­ских сер­ве­ров на са­мом де­ле го­раз­до боль­ше три­на­дца­ти – под мно­ги­ми из этих имен скры­ва­ет­ся мно­же­ст­во сер­ве­ров, на­хо­дя­щих­ся на раз­лич­ных кон­ти­нен­тах. Все, что де­ла­ют кор­не­вые сер­ве­ры – вы­да­ют спи­ски DNS-сер­ве­ров для до­ме­нов верх­не­го уров­ня. Хо­тя они кри­тич­ны для ра­бо­ты DNS, их нель­зя на­звать уз­ким ме­стом схе­мы, пре­ж­де все­го по­то­му, что дру­гие DNS-сер­ве­ры кэ­ши­ру­ют ин­фор­ма­цию, пре­дос­тав­ляе­мую кор­не­вы­ми сер­ве­ра­ми.

Ин­те­рес­но взгля­нуть и на за­пи­си NS и для дру­гих до­ме­нов. На­при­мер, вот спи­сок сер­ве­ров имен для Кем­бридж­ско­го уни­вер­си­те­та, то­же по­лу­чен­ный по ко­ман­де dig:

$ dig ns cam.ac.uk
;; QUESTION SECTION:
;cam.ac.uk.			 IN	 NS 
;; ANSWER SECTION:
cam.ac.uk.	 81899	 IN	 NS	authdns0.csx.cam.ac.uk.
cam.ac.uk.	 81899	 IN	 NS	authdns1.csx.cam.ac.uk.
cam.ac.uk.	 81899	 IN	 NS	bitsy.mit.edu.
cam.ac.uk.	 81899	 IN	 NS	dns0.eng.cam.ac.uk.
cam.ac.uk.	 81899	 IN	 NS	dns1.cl.cam.ac.uk.
cam.ac.uk.	 81899	 IN	 NS	ns2.ic.ac.uk.
cam.ac.uk.	 81899	 IN	 NS	dns0.cl.cam.ac.uk.

(Эту ин­фор­ма­цию так­же мож­но по­лу­чить с по­мо­щью ко­ман­ды whois cam.ac.uk.) Вы ви­ди­те, что хо­тя боль­шин­ст­во этих сер­ве­ров и вправ­ду на­хо­дят­ся в об­слу­жи­вае­мых до­ме­нах, два из них тем не ме­нее не там. Это сер­ве­ры в Мас­са­чу­сет­ском тех­но­ло­ги­че­ском ин­сти­ту­те и Им­пер­ском кол­лед­же Лон­до­на (ic.ac.uk). А ес­ли рас­смот­реть сер­ве­ры имен для Им­пер­ско­го кол­лед­жа, вы об­на­ру­жи­те, что один из них си­дит в Кембридже. Вза­им­ный об­мен сер­ве­ра­ми ме­ж­ду уни­вер­си­те­та­ми – до­воль­но распространен­ное яв­ле­ние.

Так что в сле­дую­щий раз, ко­гда зай­де­те на Facebook от­пра­вить поч­ту, вспом­ни­те о DNS – не­вос­пе­том ге­рое се­ти.

Кэ­ши­ро­ва­ние

Мно­гие ком­по­нен­ты DNS, вклю­чая сер­ве­ры-за­глуш­ки [stub] DNS и пре­об­ра­зо­ва­те­ли ад­ре­сов, кэ­ши­ру­ют ре­зуль­та­ты, по­лу­чен­ные из пред­ше­ст­вую­щих за­про­сов. Кэ­ши­ро­ва­ние рез­ко сни­жа­ет ко­ли­че­ст­во про­хо­дя­ще­го боль­шие рас­стоя­ния DNS-тра­фи­ка, но из-за не­го DNS срав­ни­тель­но мед­лен­но реа­ги­ру­ет на из­ме­не­ния, по­то­му что об­нов­ле­ния не бу­дут рас­про­стра­нять­ся, по­ка не ис­те­чет срок об­нов­ле­ния за­пи­сей в кэ­ше. Мак­си­маль­ное вре­мя, в те­че­ние ко­то­ро­го ре­зуль­тат дол­жен хра­нить­ся в кэ­ше, за­да­ет­ся в по­ле Time To Live в са­мих за­пи­сях ре­сур­сов. Не­ко­то­рые из этих зна­че­ний (в се­кун­дах) мож­но уви­деть в при­ме­рах ра­бо­ты ко­ман­ды dig, при­ве­ден­ных на этом уро­ке. Обыч­но это ве­ли­чи­на по­ряд­ка 24 ча­сов.

До­ме­ны верхнего уров­ня

Су­ще­ст­ву­ет око­ло два­дца­ти об­щих до­ме­нов верхнего уров­ня в сти­ле .com и .edu. Доступ к неко­то­рым, вклю­чая .mil и .gov, силь­но ог­раничен; дру­гие, та­кие как .org, .com и .net бо­лее от­кры­ты. Су­ще­ст­ву­ет бо­лее двух­сот двух­бу­к­вен­ных до­ме­нов для на­званий стран, та­ких как .fr (Фран­ция) и .ca (Ка­на­да). Эти двух­бу­к­вен­ные ко­ды оп­ре­де­ле­ны в стан­дар­те ISO 3166‑1 alpha-2, но есть и из­вест­ные ис­клю­чения: Ве­ли­ко­бри­тания ис­поль­зу­ет до­мен .uk, хо­тя офи­ци­аль­ный код стра­ны gb, а Ев­ро­пей­ский со­юз .eu – во­все не стра­на!

Не­ко­то­рые до­ме­ны «под­ра­ба­ты­ва­ют» на «су­ет­но­сти». На­при­мер, Ту­ва­лу, стра­на пло­ща­дью око­ло де­ся­ти квад­рат­ных ки­ло­мет­ров с бу­к­вен­ным ко­дом tv, до­го­во­ри­лась с Verisign о про­да­же до­ме­нов .tv те­ле­ком­паниям, а .fm (вы­дан­ный Фе­де­ра­тив­ным Шта­там Мик­ронезии) час­то ис­поль­зу­ет­ся ра­дио­стан­ция­ми.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию