Kaip Nuolat Nustatyti DNS Serverius Linux Sistemoje: Išsamus Vadovas

Dažnai serverių administratoriai susiduria su situacija, kai po sistemos perkrovimo pakeisti DNS serveriai grįžta į savo pradinius nustatymus. Ši problema gali kilti dėl įvairių priežasčių, tačiau dažniausiai ji susijusi su tuo, kaip operacinė sistema tvarko tinklo konfigūracijos failus ir paslaugas. Šiame straipsnyje detaliai aptarsime, kodėl taip nutinka ir kaip užtikrinti, kad jūsų pasirinkti DNS serveriai išliktų nuolat nustatyti net po sistemos restartų.

/etc/resolv.conf failo vaidmuo ir dinamiškumas

Pagrindinis failas, kuriame Linux sistemose nurodomi DNS serveriai, yra /etc/resolv.conf. Šiame faile įrašomi adresai serverių, kurie atsakingi už domeno vardų pavertimą IP adresais. Pavyzdžiui, turinys gali atrodyti taip:

nameserver 8.8.8.8nameserver 8.8.4.4

Čia 8.8.8.8 ir 8.8.4.4 yra Google DNS serverių IP adresai. Tačiau didelė dalis šiuolaikinių Linux sistemų, ypač tų, kurios naudoja tinklo valdymo įrankius, tokius kaip NetworkManager ar systemd-networkd, šį failą generuoja dinamiškai. Tai reiškia, kad failo turinys gali būti perrašomas automatiškai, kai pasikeičia tinklo sąsajos būsena arba po sistemos paleidimo. Būtent todėl jūsų pakeitimai /etc/resolv.conf faile gali dingti po perkrovimo - sistema tiesiog perrašo failą su savo automatiškai nustatytais DNS serveriais.

Linux kompiuterio veikimo schema

Norint suprasti, kodėl taip nutinka, svarbu žinoti, kad šie automatiniai pakeitimai dažnai atliekami siekiant prisitaikyti prie DHCP (Dynamic Host Configuration Protocol) gaunamų nustatymų. Jei jūsų serveris gauna tinklo konfigūraciją per DHCP, DNS serverių adresai, gauti per DHCP, bus automatiškai įrašyti į /etc/resolv.conf. Net jei jūs rankiniu būdu pakeičiate šį failą, kitą kartą, kai tinklo sąsaja atnaujins savo konfigūraciją (pavyzdžiui, po perkrovimo ar tinklo atjungimo/įjungimo), DHCP klientas vėl perrašys failą.

Periodinės Cron užduotys ir jų įtaka

Viena iš galimybių, kodėl DNS nustatymai gali būti keičiami periodiškai, yra cron užduotys. cron yra laiko pagrindu veikianti automatizuota užduočių vykdymo sistema, leidžianti planuoti komandų ar scenarijų vykdymą nustatytu laiku arba reguliariais intervalais. Jei sistemoje yra sukonfigūruota cron užduotis, kuri periodiškai keičia /etc/resolv.conf failo turinį, tai paaiškintų, kodėl jūsų pakeitimai dingsta.

Norėdami patikrinti, ar nėra sukonfigūruotų tokių užduočių, galite naudoti komandą crontab -l savo vartotojo vardu ir sudo crontab -l (arba sudo cat /etc/crontab ir peržiūrėti failus kataloge /etc/cron.d/). Jei rasite užduotį, kuri modifikuoja /etc/resolv.conf, ją reikės arba pašalinti, arba pakeisti, kad ji nustatytų jūsų pageidaujamus DNS serverius. Daugiau informacijos apie periodines cron užduotis rasite apsilankę atitinkamuose forumuose ir dokumentacijoje.

Įvaldykite „Linux Cron“ užduotis per 10 minučių – automatizuokite užduotis kaip profesionalas

rc.local failo naudojimas nuolatiniams pakeitimams

Kitas būdas užtikrinti, kad jūsų pasirinkti DNS serveriai būtų nustatyti po kiekvieno sistemos paleidimo, yra naudoti /etc/rc.local failą. Šis failas yra specialus scenarijus, kuris paleidžiamas sistemos inicijavimo proceso pabaigoje, prieš prisijungiant vartotojams. Tai reiškia, kad visos komandos, įrašytos į /etc/rc.local, bus vykdomos vieną kartą kiekvieno paleidimo metu.

Norint pakeisti DNS serverius naudojant rc.local, pirmiausia reikia užtikrinti, kad pats failas egzistuotų ir būtų vykdomas. Senesnėse sistemose jis dažnai būdavo aktyvus pagal nutylėjimą, tačiau naujesnėse sistemose gali reikėti jį sukurti arba suaktyvinti. Jei failas egzistuoja, bet jame nėra reikiamų komandų, galite pridėti eilutes, kurios pakeis /etc/resolv.conf failo turinį.

Pavyzdžiui, norint nustatyti Google DNS serverius, rc.local failo pabaigoje (prieš exit 0 komandą, jei ji egzistuoja) galite pridėti šias komandas:

echo "nameserver 8.8.8.8" > /etc/resolv.confecho "nameserver 8.8.4.4" >> /etc/resolv.conf

Pirmosios komandos echo "nameserver 8.8.8.8" > /etc/resolv.conf naudoja operatorių > , kuris perrašo failą. Tai reiškia, kad jei /etc/resolv.conf faile buvo koks nors turinys, jis bus visiškai pakeistas. Antroji komanda echo "nameserver 8.8.4.4" >> /etc/resolv.conf naudoja operatorių >>, kuris prideda naują eilutę failo pabaigoje, nepanaikindamas ankstesnių įrašų. Taip užtikrinama, kad failas turės abu nurodytus DNS serverius.

Schematinis rc.local failo veikimo pavaizdavimas

Svarbu suprasti komandų įterpimo eiliškumą /etc/rc.local faile. Komandos vykdomos iš eilės nuo failo pirmosios eilutės (t. y., nuo viršaus). Todėl jei turite kelias komandas, kurios atlieka skirtingas operacijas, jų tvarka gali būti svarbi. Šiuo atveju, norint pakeisti DNS, svarbiausia, kad DNS serverių nustatymo komandos būtų vykdomos po to, kai kitos tinklo paslaugos jau yra inicijuotos ir galimai perrašiusios /etc/resolv.conf failą. Dažniausiai rc.local paleidžiamas pakankamai vėlai, kad tai nebūtų problema, tačiau sudėtingesnėse sistemose gali tekti atsižvelgti į tai, kokia tvarka paleidžiamos kitos tinklo paslaugos (pvz., mysql, apache ir kt.).

Alternatyvūs metodai ir tinklo konfigūracijos valdytojai

Nors rc.local yra paprastas ir efektyvus sprendimas, jis nėra vienintelis. Šiuolaikinėse Linux sistemose vis dažniau naudojami pažangesni tinklo konfigūracijos valdytojai, tokie kaip NetworkManager ar systemd-networkd. Šie įrankiai suteikia daugiau lankstumo ir galimybių konfigūruoti tinklo nustatymus, įskaitant DNS serverius.

Naudojant NetworkManager

Jei jūsų sistema naudoja NetworkManager, DNS serverius galima nustatyti per jo konfigūracijos failus arba naudojant komandinės eilutės įrankį nmcli.

Per nmcli:

  1. Nustatykite pageidaujamus DNS serverius konkrečiai tinklo sąsajai (pvz., eth0):bashsudo nmcli connection modify eth0 ipv4.dns "8.8.8.8,8.8.4.4"sudo nmcli connection modify eth0 ipv4.dns-search "example.com"
  2. Atnaujinkite tinklo ryšį:bashsudo nmcli connection up eth0Šis metodas užtikrina, kad NetworkManager pats tvarkys DNS nustatymus ir jie išliks net po perkrovimo.

Naudojant systemd-networkd

systemd-networkd yra kitas populiarus tinklo konfigūracijos valdytojas. DNS serveriai nustatomi jo konfigūracijos failuose, kurie paprastai randami /etc/systemd/network/ kataloge.

Pavyzdžiui, galite sukurti arba modifikuoti .network failą (pvz., 10-eth0.network) su tokiu turiniu:

[Match]Name=eth0[Network]DHCP=ipv4DNS=8.8.8.8DNS=8.8.4.4

Po pakeitimų reikia perkrauti systemd-networkd paslaugą:

sudo systemctl restart systemd-networkd

Šie metodai yra laikomi modernesniais ir labiau rekomenduojamais nei rc.local naudojimas, nes jie integruojasi tiesiogiai su sistemos tinklo valdymo mechanizmais.

Tinklo konfigūracijos failų apsauga nuo perrašymo

Jei naudojate dinamines tinklo konfigūracijas ir norite vis tiek kontroliuoti /etc/resolv.conf failą, galite pabandyti jį padaryti tik skaitomu (read-only) arba naudoti specialius chattr komandos atributus. Tačiau tai gali sukelti kitų problemų, nes kai kurios paslaugos gali tikėtis galėti rašyti į šį failą.

Pavyzdžiui, galite pabandyti:

sudo chattr +i /etc/resolv.conf

Ši komanda padarys failą nekintamu, t.y., jo negalės modifikuoti net root vartotojas. Norėdami vėl leisti modifikacijas, naudokite:

sudo chattr -i /etc/resolv.conf

Šis metodas yra drastiškas ir dažnai nerekomenduojamas, nes gali sutrikdyti normalią tinklo paslaugų veiklą. Geriau yra naudoti tinkamus konfigūracijos valdytojus.

Įvairių tinklo protokolų piktogramos

Saugumas, monitoringas ir optimizavimas

Nustatydami DNS serverius, svarbu atsižvelgti ir į serverio saugumą, monitoringą bei optimizavimą. Pasirinkus patikimus ir greitus DNS serverius, galite pagerinti svetainių ir paslaugų pasiekiamumą bei greitį. Taip pat svarbu reguliariai stebėti DNS serverių veiklą ir užtikrinti, kad jie veiktų be trikdžių.

Kai kurios rekomendacijos serverių saugumui apima:

  • Naudoti ne tik viešus, bet ir privačius, patikimus DNS serverius, jei įmanoma.
  • Konfigūruoti DNSSEC (DNS Security Extensions), jei jūsų DNS serveriai tai palaiko, siekiant apsisaugoti nuo DNS spoofing atakų.
  • Stebėti DNS užklausų laiką ir atsakymų dažnumą, kad laiku pastebėtumėte galimus sutrikimus.

Optimizavimo požiūriu, pasirinkus geografiškai artimiausius DNS serverius ar serverius su mažu atsako laiku, galima žymiai pagreitinti domenų rezoliuciją, kas tiesiogiai veikia vartotojo patirtį ir svetainės ar programos našumą.

Apibendrinant ir praktiniai patarimai

Problema, kai pakeisti DNS serveriai savaime grįžta į pradinius nustatymus po perkrovimo, yra gana dažna ir dažniausiai susijusi su dinamiška tinklo konfigūracija, cron užduotimis arba netinkamai sukonfigūruotu failų tvarkymu.

  • Visada tikrinkite /etc/resolv.conf: Suprasdami, kaip ir kada šis failas yra generuojamas, galite pasirinkti tinkamiausią sprendimą.
  • Naudokite tinkamus įrankius: Naujesnėse sistemose pirmenybę teikite NetworkManager ar systemd-networkd konfigūracijoms.
  • rc.local kaip pasirinkimas: Jei ankstesni metodai neveikia arba norite paprasto sprendimo, rc.local gali būti gera alternatyva, tačiau supraskite jo veikimo principus.
  • Tikrinkite cron: Niekada nepamirškite patikrinti cron užduočių, kurios gali periodiškai keisti jūsų nustatymus.

Sėkmingai konfigūravus DNS serverius, užtikrinsite stabilesnį ir greitesnį ryšį su interneto ištekliais. Jei susiduriate su sudėtingesnėmis situacijomis, serverių administravimo, konfigūravimo ir įvairių tarnybų diegimo klausimais, visada galite ieškoti informacijos specializuotuose forumuose, kur rasite rekomendacijų bei patarimų.

tags: #init #dns #serveriai