Невозможно разрешить hostname.local в локальной сети

Невозможно разрешить hostname.local в локальной сети

Раньше я мог работать между машинами в моей локальной сети, но теперь это не работает. Конечно, я могу использовать ssh, используя IP, но это DHCP, поэтому он может время от времени меняться. Обе машины работают под управлением Debian 9.12, одна из них — виртуальная машина на хосте Windows, но все равно это РАБОТАЛО; я не баловался с файлами конфигурации, просто регулярно обновлял.ssh [email protected]

ping hostname.local
ping: hostname.local: Name or service not known

(возможно, это не совсем то сообщение, которое я перевожу с французского)

ssh hostname.local
ssh: Could not resolve hostname hostname.local: Name or service not known

(вывод ssh на английском)

С сайта avahi.org:

Avahi — это система, которая облегчает обнаружение сервисов в локальной сети с помощью набора протоколов mDNS/DNS-SD.

Я рассмотрел /etc/resolv.conf, /etc/avahi/avahi-daemon.conf, /etc/nsswitch.confно это стандартная готовая конфигурация.

/etc/resolv.conf(сбрасывается при network-managerкаждом запуске)

# Generated by NetworkManager
search lan
nameserver xx.xx.xx.xx # DNS IPs obtained from DHCP
nameserver xx.xx.xx.xx 

man resolv.confговорит, что searchсписок содержит только локальное доменное имя по умолчанию (что-то вроде этого, я перевел со страницы руководства на французском); разве не должно быть localвместо lan?

Я попробовал изменить его и сразу же пинговать или ssh-подключиться к другому хосту в моей локальной сети (без перезапуска network-manager), это не сработало. А когда я перезапускаю network-manager, он перезаписывает /etc/resolv.confи устанавливает search lan.

/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
group:          compat
shadow:         compat
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Я пытался обнаружить хосты и службы с помощью avahi-browseи nbtscan, которые полагаются на avahi (zeroconf / Bonjour), но, похоже, они находят только хост, на котором они работают.

(Я знаю, что это, возможно, дубликат других вопросов, но я не нашел ответа, и у меня недостаточно репутации, чтобы что-либо сделать)

решение1

Нашел!

Похоже, у моего роутера действительно есть DNS-сервер:

nslookup host_ip router_ip
Server:     192.168.1.254
Address:    192.168.1.254#53

69.1.168.192.in-addr.arpa   name = hostname.lan.

Вот и ответ на вопрос .local«против» .lan.В последних версиях Debian локальным доменом является .lan.

Тем не менее, ping hostname.lanвозвращает неизвестный хост.

Благодаряhttps://askubuntu.com/questions/623940/network-manager-how-to-stop-nm-updating-etc-resolv-conf, я обнаружил, что /etc/resolv.confэто символическая ссылка на /var/run/NetworkManager/resolv.conf; поэтому мне пришлосьзаменить его моим собственнымresolv.conf:

search lan
nameserver 192.168.1.254

чтобы он использовал DNS маршрутизатора (который будет маршрутизировать запросы при необходимости).

Перезапускаю сетевой менеджер systemctl restart network-managerи всё работает как часы:

$ ping hostname.lan
PING hostname.lan (192.168.1.69) 56(84) bytes of data.
64 bytes from hostname.lan (192.168.1.69): icmp_seq=1 ttl=64 time=2.02 ms

( ping google.frчтобы убедиться, что запросы WAN обрабатываются)

решение2

В моем случае причина того, что один конкретный хост в сети не был доступен через префикс .local, заключалась просто в том, что на этом хосте была остановлена ​​служба демона avahi:

[~][0]$ service avahi-daemon status
○ avahi-daemon.service - Avahi mDNS/DNS-SD Stack
     Loaded: loaded (/lib/systemd/system/avahi-daemon.service; disabled; preset: enabled)
     Active: inactive (dead)
TriggeredBy: ○ avahi-daemon.socket
[~][3]$ service avahi-daemon start
[~][0]$ 
█[~][0]$ ping asus.local
PING asus.local (192.168.1.204) 56(84) bytes of data.
64 bytes from 192.168.1.204 (192.168.1.204): icmp_seq=1 ttl=64 time=0.892 ms
64 bytes from 192.168.1.204 (192.168.1.204): icmp_seq=2 ttl=64 time=0.848 ms
64 bytes from 192.168.1.204 (192.168.1.204): icmp_seq=3 ttl=64 time=0.784 ms
^C

решение3

Вам не нужно полное доменное имя; просто используйте часть хоста. Например:

`[root@darouter ~]# arping -I enp2s0f1 matilda
ARPING 192.168.100.12 from 192.168.100.254 enp2s0f1
Unicast reply from 192.168.100.12 [D0:67:E5:EB:37:25]  0.759ms
Unicast reply from 192.168.100.12 [D0:67:E5:EB:37:25]  0.801ms
Unicast reply from 192.168.100.12 [D0:67:E5:EB:37:25]  0.732ms
Sent 3 probes (1 broadcast(s))
Received 3 response(s)`

Я использовал arping, так как matilda — это коробка Windoz; это было проще, чем разбираться, как разрешить входящий пинг. Я бы отключил DNS на маршрутизаторе. Тамдолженбыть местом, куда можно вставить IP-адрес DNS-сервера, чтобы вы могли использовать свой внутренний DNS. Если ваш внутренний DNS не разрешается по имени хоста, вам нужно выяснить, где сломалась ваша конфигурация DNS. У меня была эта проблема некоторое время назад. К сожалению, это было некоторое время назад; и поскольку я не помню, что я делал вчера, я не могу дать вам точный ответ о том, что я сделал, чтобы решить ее.

Надеюсь это поможет!

Тодх

Связанный контент