У Linux не вырашаецца DNS: прычыны і спосабы выпраўлення

Калі ў Linux інтэрнэт-злучэнне нібыта ёсць, але сайты не адкрываюцца, або доступ па IP-адрасе працуе, а па даменным імені — не, то вельмі верагодна, што праблема звязана з DNS. DNS пераўтварае даменныя імёны, такія як example.com, у рэальныя IP-адрасы. Калі гэты механізм не працуе, сетка можа выглядаць актыўнай, але нармальна карыстацца інтэрнэтам ужо не атрымаецца.

Тыповыя сімптомы

  • Браўзер паведамляе, што сервер не знойдзены
  • ping 8.8.8.8 праходзіць, а ping google.com — не
  • Не працуюць менеджары пакетаў, такія як apt, dnf, yum, pacman
  • З’яўляецца паведамленне Temporary failure in name resolution

Што праверыць спачатку

Спачатку трэба вызначыць, ці праблема закранае ўсю сетку, ці толькі DNS.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

Калі 8.8.8.8 даступны, а google.com — не, гэта звычайна сведчыць пра праблему DNS. Калі ж недаступны нават IP-адрас, тады прычына можа быць у Wi-Fi, сеткавым інтэрфейсе, шлюзе або маршрутызацыі.

Асноўныя прычыны

1. Памылка ў /etc/resolv.conf

У многіх сістэмах Linux інфармацыя пра DNS-серверы захоўваецца ў файле /etc/resolv.conf. Калі там няма правільнага nameserver, вырашэнне даменных імёнаў працаваць не будзе.

cat /etc/resolv.conf

Прыклад:

nameserver 8.8.8.8
nameserver 1.1.1.1

Калі файл пусты або паказвае на няправільны лакальны DNS, узнікнуць праблемы. Але на сучасных сістэмах гэты файл часта аўтаматычна ствараецца NetworkManager або systemd-resolved, таму ручныя змены могуць быць перазапісаны.

2. Праблема з systemd-resolved

У Ubuntu і падобных сістэмах systemd-resolved часта кіруе DNS і выкарыстоўвае 127.0.0.53 як лакальны рэзалвер. Калі гэта служба спынена, DNS можа перастаць працаваць.

systemctl status systemd-resolved
resolvectl status

Пры неабходнасці перазапусціце службу:

sudo systemctl restart systemd-resolved

3. NetworkManager не прымяняе DNS належным чынам

На настольных Linux-сістэмах NetworkManager часта атрымлівае DNS праз DHCP. Калі сеткавы профіль пашкоджаны або адбыўся збой пры перападключэнні, правільныя DNS-серверы могуць не прымяніцца.

nmcli dev show | grep DNS
nmcli connection show

Калі трэба, перазапусціце яго:

sudo systemctl restart NetworkManager

4. Уплыў VPN, проксі або файрвола

VPN можа накіроўваць DNS-запыты па няправільным шляху, а файрвол можа блакаваць порт 53. У такім выпадку сетка выглядае працаздольнай, але даменныя імёны не вырашаюцца.

5. Пашкоджаны або састарэлы DNS-кэш

Калі лакальны DNS-кэш пашкоджаны або састарэў, некаторыя дамены могуць не адкрывацца. У сістэмах з systemd-resolved або nscd можа дапамагчы ачыстка кэшу.

sudo resolvectl flush-caches

Практычныя крокі для выпраўлення

Крок 1: Праверка праз публічны DNS

nslookup google.com 8.8.8.8
dig google.com @8.8.8.8

Калі гэта працуе, значыць знешні DNS у парадку, а праблема, хутчэй за ўсё, у лакальнай канфігурацыі.

Крок 2: Часова задаць публічны DNS

sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'

Гэта толькі часовае рашэнне. Пасля перазагрузкі або паўторнага падключэння файл можа быць зноў зменены сістэмай. Для пастаяннага выпраўлення трэба наладзіць NetworkManager, netplan або systemd-resolved.

Крок 3: Праверце netplan у Ubuntu

sudo nano /etc/netplan/*.yaml

Прыклад:

nameservers:
  addresses: [8.8.8.8,1.1.1.1]

Пасля гэтага прымяніце змены:

sudo netplan apply

Крок 4: Зноў атрымаць налады DHCP

sudo dhclient -r
sudo dhclient

Калі DHCP-сервер выдаў няправільныя DNS-даныя, гэта можа дапамагчы.

Карысныя каманды для дыягностыкі

ping -c 4 8.8.8.8
ping -c 4 google.com
cat /etc/resolv.conf
systemctl status systemd-resolved
resolvectl status
nmcli dev show | grep DNS
nslookup google.com
dig google.com
journalctl -u systemd-resolved --no-pager | tail -n 50

Як прадухіліць паўтор праблемы

  • Не абмяжоўвайцеся толькі ручным рэдагаваннем /etc/resolv.conf
  • Разбярыцеся, хто кіруе DNS: DHCP, NetworkManager або systemd-resolved
  • Пасля наладкі VPN правярайце DNS-параметры
  • Для сервераў лепш выразна задаваць сталыя DNS-серверы

Выснова

Калі Linux не можа вырашыць DNS-імёны, найважнейшы першы крок — праверыць, ці працуе сувязь па IP-адрасе. Гэта дазваляе хутка зразумець, ці праблема толькі ў DNS, ці ва ўсёй сетцы. Далей варта паслядоўна праверыць /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP і налады VPN. Важна не толькі часова аднавіць працу, але і зразумець, які кампанент сістэмы насамрэч кіруе DNS.

Leave a Reply

Ваш адрас электроннай пошты не будзе апублікаваны. Неабходныя палі пазначаны як *