Ранее у меня был установлен Xubuntu 16.04, и он распознавал имена хостов, установленные моим маршрутизатором (Tomato).
Например, у меня в сети есть компьютер с именем mate
со статическим IP-адресом 192.168.2.202
, и раньше я мог это сделать:
$ host mate
mate has address 192.168.2.202
Но теперь я получаю следующее:
$ host mate
Host mate not found: 2(SERVFAIL)
На этот раз я выполнил минимальную настольную установку, поэтому мне интересно, есть ли какой-то пакет, который мне не хватает.
$ cat /var/run/systemd/resolve/resolv.conf:
nameserver 192.168.2.1
$ cat /var/run/NetworkManager/resolv.conf
nameserver 127.0.0.53
$ netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 3421/VBoxHeadless
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 663/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 950/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 737/cupsd
tcp6 0 0 :::5900 :::* LISTEN 3421/VBoxHeadless
tcp6 0 0 :::22 :::* LISTEN 950/sshd
tcp6 0 0 ::1:631 :::* LISTEN 737/cupsd
udp 14784 0 0.0.0.0:52712 0.0.0.0:* 2092/VirtualBox
udp 8704 0 0.0.0.0:53789 0.0.0.0:* 2092/VirtualBox
udp 9536 0 0.0.0.0:5353 0.0.0.0:* 730/avahi-daemon: r
udp 19648 0 0.0.0.0:55126 0.0.0.0:* 2092/VirtualBox
udp 8704 0 0.0.0.0:39114 0.0.0.0:* 2092/VirtualBox
udp 13248 0 0.0.0.0:41109 0.0.0.0:* 2092/VirtualBox
udp 0 0 0.0.0.0:57555 0.0.0.0:* 730/avahi-daemon: r
udp 3648 0 0.0.0.0:59213 0.0.0.0:* 2092/VirtualBox
udp 8064 0 0.0.0.0:59519 0.0.0.0:* 2092/VirtualBox
udp 3648 0 0.0.0.0:48795 0.0.0.0:* 2092/VirtualBox
udp 3648 0 0.0.0.0:48900 0.0.0.0:* 2092/VirtualBox
udp 36096 0 127.0.0.53:53 0.0.0.0:* 663/systemd-resolve
udp 37120 0 0.0.0.0:68 0.0.0.0:* 1066/dhclient
udp 15424 0 0.0.0.0:33008 0.0.0.0:* 2092/VirtualBox
udp 3648 0 0.0.0.0:49597 0.0.0.0:* 2092/VirtualBox
udp 14464 0 0.0.0.0:33395 0.0.0.0:* 2092/VirtualBox
udp 0 0 0.0.0.0:631 0.0.0.0:* 828/cups-browsed
udp 19840 0 0.0.0.0:49883 0.0.0.0:* 2092/VirtualBox
udp 14592 0 0.0.0.0:33614 0.0.0.0:* 2092/VirtualBox
udp6 0 0 :::51356 :::* 730/avahi-daemon: r
udp6 49344 0 :::5353 :::* 730/avahi-daemon: r
$ systemd-resolve --status
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 6 (vboxnet2)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 5 (vboxnet1)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 4 (vboxnet0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 3 (wlp4s1)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 2 (eno1)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.2.1
Мой маршрутизатор - 192.168.2.1
Использование dig
показывает, что маршрутизатор правильно сообщает имя хоста.
$ dig @192.168.2.1 mate
; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @192.168.2.1 mate
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47046
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;mate. IN A
;; ANSWER SECTION:
mate. 0 IN A 192.168.2.202
;; Query time: 0 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Mon Jun 18 18:53:26 PDT 2018
;; MSG SIZE rcvd: 38
Но если я не упомяну DNS IP-адрес маршрутизатора, я его не найду.
$ dig mate
; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> mate
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 65394
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;mate. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Mon Jun 18 19:06:13 PDT 2018
;; MSG SIZE rcvd: 33
Таким образом, кажется, что, хотя он указан в /var/run/systemd/resolve/resolv.conf
, он не используется. Как мне это исправить?
Похоже, это связано с этой проблемой:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624320
В новой установке /etc/resolv.conf
связан с /run/systemd/resolve/stub-resolv.conf
вместо /run/systemd/resolve/resolv.conf
.
Обновление в соответствии с https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624320/comments/8 исправило его.
Вот что происходит: systemd-resolved не разрешает локальные доменные имена, если имена не являются полностью определенными именами, такими как mate.local
Как сказано в документе о Systemd-networkd , неплохое решение - обрезать файл /etc/nsswitch.conf
sudo nano /etc/nsswitch.conf
Изменить строку хостов
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat systemd
group: compat systemd
shadow: compat
gshadow: files
# ---- MODIFY THIS LINE ------------------------------------------------
# hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
# ---- TO --------------------------------------------------------------
hosts: files mdns4_minimal dns myhostname
# ---- THATS ALL -------------------------------------------------------
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
[ 1116] Объяснение: /etc/hosts
), затем с помощью avahi (zeroconf), затем запрашивает сервер DNS. И больше не останавливайтесь, если avahi не находит локальное имя как [NOTFOUND=return]
принудительно. Надеюсь, что это ясно.
перезапустить службу
sudo systemctl restart systemd-resolved
Обходной путь, указанный в этом комментарии к отчету об ошибке , решил эту проблему для моей установки Ubuntu 18.04 LTS.
Disable and stop the systemd-resolved service:
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved
Then put the following line in the [main] section of your /etc/NetworkManager/NetworkManager.conf:
dns=default
Delete the symlink /etc/resolv.conf
rm /etc/resolv.conf
Restart network-manager
sudo service network-manager restart