
Раньше я мог работать между машинами в моей локальной сети, но теперь это не работает. Конечно, я могу использовать 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. У меня была эта проблема некоторое время назад. К сожалению, это было некоторое время назад; и поскольку я не помню, что я делал вчера, я не могу дать вам точный ответ о том, что я сделал, чтобы решить ее.
Надеюсь это поможет!
Тодх