Журнал LinuxFormat - перейти на главную

LXF170:Се­ти: DNS-сер­ве­ры

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

DNS-сер­ве­ры

Нейл Бот­вик по­ка­зы­ва­ет, как на­стро­ить ло­каль­ный сер­вер до­мен­ных имен (DNS) с dnsmasq.

(thumbnail)
Наш эксперт. У Ней­ла Бот­ви­ка по ком­пь­ю­те­ру в ка­ж­дой ком­на­те, но по со­об­ра­же­ни­ям безо­пас­но­сти он ни за что не ска­жет вам, где на­хо­дит­ся цен­траль­ный сер­вер.

Бы­ли вре­ме­на, когда и один ком­пь­ю­тер до­ма счи­тал­ся ди­вом. По­том мы на­ча­ли поль­зо­вать­ся Ин­тернетом и ут­ру­ж­дать­ся вся­ки­ми се­те­вы­ми за­тея­ми, но о них в основ­ном за­бо­ти­лись про­вай­дер и мо­дем. Ес­ли по­яв­лял­ся вто­рой ком­пь­ю­тер, бы­ло до­воль­но про­сто на­стро­ить ста­ти­че­скую ад­ре­са­цию и сле­дить за тем, что есть что. А те­перь в ка­ж­дом до­ме по несколь­ку под­клю­чен­ных уст­ройств, и неко­то­рые из них под­клю­ча­ют­ся из раз­ных мест. А зна­чит, нам нуж­но некое сред­ст­во ав­то­ма­ти­че­­ской на­строй­ки для управ­ления ад­ре­са­ми, вы­де­ления их уст­рой­ст­вам при необ­хо­ди­мо­сти и вы­да­чи дру­гим уст­рой­ст­вам ад­ре­са уст­рой­ст­ва, с ко­то­рым они хо­тят по­об­щать­ся. Здесь дей­ст­ву­ют два от­дель­ных про­то­ко­ла. DNS (Domain Name Service – сер­вис до­мен­ных имен) – это те­ле­фон­ная книга Ин­тернета: он на­хо­дит IP-ад­рес ком­пь­ю­те­ра, с ко­то­рым вы хо­ти­те по­об­щать­ся, будь то но­ут­бук в со­седней ком­на­те или боль­шая по­ис­ко­вая сис­те­ма. DHCP (Dynamic Host Configuration Protocol – про­то­кол ди­на­ми­че­­ской на­строй­ки хоста) – сред­ст­во, с по­мо­щью ко­то­ро­го уст­рой­ст­во го­во­рит се­ти: «При­вет, я здесь» и по­лу­ча­ет в от­вет IP-ад­рес, а так­же дру­гую по­лез­ную ин­фор­ма­цию: о мар­шру­ти­за­ции се­ти и рас­по­ло­жении сер­ве­ров DNS.

Сер­вис до­мен­ных имен

Сер­ве­ры DNS обыч­но пре­достав­ля­ют­ся ва­шим про­вай­де­ром или боль­ши­ми пуб­лич­ны­ми сер­ве­ра­ми, но они зна­ют толь­ко о пуб­лич­ных ад­ре­сах. Что про­изой­дет, ес­ли вам по­на­до­бит­ся ад­рес дру­го­го уст­рой­ст­ва в ва­шей се­ти? Раньше для это­го ис­поль­зо­ва­лась ста­ти­че­­ская ад­ре­са­ция, и спи­сок всех локаль­ных хостов хранил­ся в фай­ле /etc/hosts на ка­ж­дом локаль­ном ком­пь­ю­те­ре, но се­го­дня это непрак­тич­но. Это не толь­ко об­ре­менитель­но из-за уве­ли­чения ко­ли­че­­ст­ва уст­ройств: ста­ти­че­­ская ад­ре­са­ция для мо­биль­ных уст­ройств – где-то по­се­ре­дине ме­ж­ду неудоб­ной и невоз­мож­ной.

dnsmasq – локаль­ный кэ­ши­рую­щий сер­вер DNS для ис­поль­зо­вания в локаль­ных се­тях. У него есть па­ра пре­иму­ществ по сравнению с DNS-сер­ве­ра­ми в Ин­тернете. Во-пер­вых, ему мож­но со­об­щить па­ра­мет­ры сво­ей локаль­ной се­ти, и он смо­жет раз­ре­шать име­на хостов для всех ва­ших уст­ройств. Во-вто­рых, в нем есть кэ­ши­ро­вание. Ес­ли он не на­хо­дит имени хоста в сво­ем фай­ле hosts, он за­пра­ши­ва­ет ин­фор­ма­цию у пуб­лич­ных DNS-сер­ве­ров, как и пре­ж­де, но от­вет за­по­ми­на­ет, и когда тот же ад­рес по­на­до­бит­ся дру­го­му ком­пь­ю­те­ру в се­ти, от­вет бу­дет уже го­тов.

За­гру­зи­те его ис­ход­ный код с www.thekelleys.org.uk/dnsmasq или уста­но­ви­те dnsmasq из менед­же­ра па­ке­тов сво­его ди­ст­ри­бу­ти­ва обыч­ным об­ра­зом. Что­бы dnsmasq ра­бо­тал как про­стой кэ­ши­рую­щий сер­вер DNS для локаль­ной се­ти, спе­ци­аль­ной на­строй­ки не тре­бу­ет­ся. Ес­ли ком­пь­ю­тер, на ко­то­рый вы его уста­нав­ли­вае­те, уже име­ет вы­ход в Ин­тернет бла­го­да­ря вер­но за­дан­ным на­строй­кам в /etc/resolv.conf (/etc/resolv.conf со­дер­жит ад­ре­са ис­поль­зуе­мых сер­ве­ров имен) и об­ща­ет­ся с се­тью LAN бла­го­да­ря то­му, что все нуж­ные ад­ре­са есть в /etc/hosts, доста­точ­но про­сто уста­но­вить и за­пустить dnsmasq, так как по умол­чанию при раз­ре­шении ад­ре­сов про­грам­ма сна­ча­ла смот­рит в /etc/hosts и за­тем в /etc/resolv.conf. На дру­гих ком­пь­ю­те­рах се­ти за­дай­те ад­рес пер­вич­но­го сер­ве­ра DNS в со­от­вет­ст­вии с ад­ре­сом ком­пь­ю­те­ра, на ко­то­ром за­пу­щен dnsmasq. В Linux для это­го нуж­но из­менить /etc/resolv.conf так, что­бы в нем бы­ла стро­ка

nameserver 192.168.1.1

За­мените 192.168.1.1 на ад­рес сер­ве­ра dnsmasq. Ес­ли ком­пь­ю­те­ры по­лу­ча­ют ин­фор­ма­цию о под­клю­чении от мар­шру­ти­за­то­ра (ро­уте­ра) по DHCP, нуж­но за­дать этот ад­рес в web-ин­тер­фей­се ро­уте­ра, что­бы он всем объявил: нуж­но поль­зо­вать­ся dnsmasq.

Иметь под ру­кой локаль­ный сер­вер имен очень удоб­но, ес­ли все уст­рой­ст­ва на­строе­ны ста­ти­че­­ски, так как всю ин­фор­ма­цию о се­ти мож­но хранить в од­ном мес­те; но боль­шин­ст­во уст­ройств ожи­да­ет ди­на­ми­че­­ской кон­фи­гу­ра­ции по DHCP. Как же dnsmasq уз­на­ет ад­ре­са этих уст­ройств? Здесь есть очень про­стое ре­шение: у dnsmasq есть встро­ен­ный сер­вер DHCP.

Так как DHCP-сер­вер раз­да­ет IP-ад­ре­са, то он зна­ет ад­рес ка­ж­до­го уст­рой­ст­ва в се­ти; по­это­му в неболь­шой се­ти есть смысл объ­е­динить две опе­ра­ции, что и де­ла­ет dnsmasq. Ес­ли мы хо­тим, что­бы он вы­сту­пал в ка­че­­ст­ве DHCP-сер­ве­ра, при­дет­ся из­менить его файл на­строй­ки – /etc/dnsmasq.conf. Он со­дер­жит все па­ра­мет­ры по умол­чанию и уста­нав­ли­ва­ет­ся вме­сте с про­грам­мой, что по­вы­ша­ет риск пе­ре­за­пи­си это­го фай­ла при об­нов­лении про­грам­мы; по­это­му я соз­дал от­дель­ный файл в /etc/dnsmasq.d/ и рас­ком­мен­ти­ро­вал сле­дую­щую стро­ку в кон­це файла /etc/dnsmasq.conf:

conf-dir=/etc/dnsmasq.d

Что­бы вклю­чить сер­вер, нуж­но ак­ти­ви­ро­вать па­ра­метр dhcp-range – стро­ка в dnsmasq.conf по умол­чанию име­ет вид

  1. dhcp-range=192.168.0.50,192.168.0.150,12h

Ско­пи­руй­те ее в свой файл на­строй­ки, уда­ли­те сим­вол ком­мен­та­рия и из­мените ад­ре­са, что­бы они со­от­вет­ст­во­ва­ли ва­шей се­ти. Это на­ча­ло и конец диа­па­зо­на ад­ре­сов, из ко­то­ро­го dnsmasq мо­жет вы­де­лять ад­ре­са. Тре­тий па­ра­метр за­да­ет вре­мя дей­ст­вия ад­ре­са по умол­чанию – 12 ча­сов. Ес­ли DHCP у вас пре­достав­ля­ет ро­утер, от­клю­чи­те этот DHCP: два DHCP-сер­ве­ра в од­ной се­ти мо­гут при­вес­ти к пу­танице. По­сле из­менения лю­бо­го из фай­лов на­строй­ки dnsmasq нуж­но пе­ре­за­пустить сер­вис или от­пра­вить ему сиг­нал SIGHUP, что­бы он пе­ре­за­гру­зил свои на­строй­ки:

killall -HUP dnsmasq

Мар­шру­ти­за­ция Ин­тер­не­та

Те­перь лю­бое уст­рой­ст­во, под­клю­чен­ное к се­ти, по­лу­чит ад­рес от dnsmasq и начнет ис­поль­зо­вать dnsmasq в ка­че­­ст­ве сер­ве­ра имен по умол­чанию, но ско­рее все­го не смо­жет под­клю­чить­ся к Ин­тернету. За это от­ве­ча­ет тре­тий важ­ный па­ра­метр, пре­достав­ляе­мый сер­ве­ром DHCP – шлюз по умол­чанию. Так как мы не ука­за­ли dnsmasq, где находится шлюз, тот пред­по­ла­га­ет, что шлюз на том же ком­пь­ю­те­ре. Ес­ли dnsmasq за­пу­щен на ро­уте­ре, ника­ких про­блем нет; в про­тив­ном слу­чае нуж­но до­ба­вить в на­строй­ки ад­рес ро­уте­ра:

dhcp-option=option:router,192.168.1.2

Иногда бы­ва­ет ну­жен ста­ти­че­­ский ад­рес – от фай­ло­во­го сер­ве­ра ма­ло поль­зы, ес­ли вы не знае­те, где он. На­стро­ить та­кое уст­рой­ст­во мож­но вруч­ную со ста­ти­че­­ским ад­ре­сом, но что­бы его имя хоста мож­но бы­ло раз­ре­шить, нуж­но до­ба­вить ин­фор­ма­цию о нем в dnsmasq. Бо­лее чис­тый ва­ри­ант – оста­вить в нем ав­то­ма­ти­че­скую на­строй­ку и ве­леть dnsmasq на­зна­чать это­му уст­рой­ст­ву всегда один и тот же ад­рес. Здесь ста­но­вит­ся удоб­ным от­дель­ный ка­та­лог для хранения кон­фи­гу­ра­ции – так мож­но иметь один файл для об­щих на­стро­ек и от­дель­ный файл для спе­ци­фич­ных на­стро­ек ка­ж­до­го хоста, что де­ла­ет управ­ление се­тью го­раз­до ком­фортнее. Вот при­мер из мо­ей до­машней се­ти:

dhcp-host=B8:27:EB:8B:6F:CF,192.168.1.11,jeltz

txt-record=jeltz,”Raspberry Pi file server”

Здесь ва­жен па­ра­метр dhcp-host – он со­сто­ит из трех час­тей, раз­де­лен­ных за­пя­ты­ми. Пер­вая – MAC-ад­рес се­те­во­го ин­тер­фей­са, ис­поль­зуе­мо­го для под­клю­чения это­го ком­пь­ю­те­ра к се­ти. Что­бы его уз­нать, вы­полните ко­ман­ду ifconfig или ip link show или за­гляните в гра­фи­че­скую ути­ли­ту на­строй­ки се­ти (ес­ли на ком­пь­ю­те­ре есть гра­фи­че­­ский ин­тер­фейс). Вто­рая часть – IP-ад­рес, вы­де­ляе­мый уст­рой­ст­ву. Этот ад­рес не дол­жен быть ранее вы­дан­ным дру­го­му уст­рой­ст­ву. Что­бы точ­но это­го из­бе­жать, эти ад­ре­са долж­ны быть вне диа­па­зо­на, за­дан­но­го ранее в па­ра­мет­ре dhcp-range. Тре­тья часть – имя хоста, ко­то­рое бу­дет вы­де­ле­но уст­рой­ст­ву и ко­то­рое dnsmasq за­тем смо­жет раз­ре­шить при за­про­се от дру­го­го уст­рой­ст­ва в се­ти.

Вы мо­же­те недо­уме­вать, что де­ла­ет вто­рая стро­ка. А она на­зна­ча­ет ком­пь­ю­те­ру некое опи­сание, вы­во­ди­мое при за­пуске

dig +short hostname txt

Это удоб­но при раз­рас­тании се­ти или ухуд­шении па­мя­ти, и это про­сто на­по­ми­нание, вро­де ком­мен­та­рия в ко­де.

Хранение всех се­те­вых на­стро­ек в од­ном мес­те уп­ро­ща­ет управ­ление се­тью и ре­зерв­ное ко­пи­ро­вание на­стро­ек. Так как на­строй­ка всех уст­ройств по-прежнему ав­то­ма­ти­че­­ская, на них не нуж­но ниче­го ме­нять, ска­жем, при уста­нов­ке но­во­го ро­уте­ра с дру­гим ад­ре­сом. Ес­ли вы поль­зуе­тесь но­ут­бу­ком, у него мо­жет быть два ин­тер­фей­са, про­вод­ной и бес­про­вод­ной, с раз­лич­ны­ми MAC-ад­ре­са­ми, но вам, на­вер­ное, бы­ло бы удобнее, что­бы ка­ж­дый раз при под­клю­чении он по­лу­чал один и тот же ад­рес. Для это­го нуж­но лишь ука­зать оба MAC-ад­ре­са, раз­де­лен­ных за­пя­ты­ми, та­ким об­ра­зом:

dhcp-host=20:68:9d:bc:08:f5,50:46:5d:32:e2:51,192.168.1.8,hostname

В этом слу­чае dnsmasq пред­по­ла­га­ет, что вы знае­те, что де­лае­те, по­это­му не пы­тай­тесь од­но­вре­мен­но вклю­чить оба ин­тер­фей­са, ина­че что-нибудь мо­жет вый­ти из строя.

На на­шем уро­ке мы лишь по­верх­но­ст­но косну­лись воз­мож­но­стей dnsmasq. Когда вы начнете им поль­зо­вать­ся, ком­мен­та­рии в кон­фи­гу­ра­ци­он­ном фай­ле по умол­чанию и FAQ на сай­те про­ек­та да­дут вам го­раз­до боль­ше но­вых идей. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика