У меня проблема с просмотром имен хостов устройств, расположенных в моей локальной сети. На моем первом ноутбуке (Ubuntu 18.04 LTS Desktop edition) результат следующей команды:

arp -a

Это именно то, что я хочу:

X (192.168.56.243) at 40:a3:cc:99:2d:66 [ether] on wlan0
test-test-test (192.168.56.146) at 48:bf:6b:e3:bf:5a [ether] on wlan0
TP-Link_Archer_ (192.168.56.1) at 10:7b:44:40:61:70 [ether] on wlan0

Используя nmap, я могу сканировать свою локальную сеть с помощью этой команды:

nmap -sn 192.168.56.0/24

И я получаю отличные результаты с именами хостов:

Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-07 09:07 EDT
Nmap scan report for TP-Link_Archer_ (192.168.56.1)
Host is up (0.0054s latency).
Nmap scan report for ZZ (192.168.56.156)
Host is up (0.00045s latency).

Однако на другом ноутбуке с установленным Debian 9 x64 Minimal отсутствует вся часть имен хостов. Всякий раз, когда я запускаю arp -a, я получаю следующее:

? (192.168.56.243) at 40:a3:cc:99:2d:66 [ether] on wlan0
? (192.168.56.146) at 48:bf:6b:e3:bf:5a [ether] on wlan0
? (192.168.56.1) at 10:7b:44:40:61:70 [ether] on wlan0

Кроме того, сканирование с помощью nmap -sn 192.168.56.0/24 дает следующий результат:

Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-07 09:17 EDT
Nmap scan report for 192.168.56.1
Host is up (0.0054s latency).
Nmap scan report for 192.168.56.156
Host is up (0.00045s latency).

Честно говоря, я понятия не имею, что происходит, скорее всего, я что-то упустил в установке Debian Minimal, которая установлена ​​в Ubuntu. Но я понятия не имею, где найти недостающую часть, чтобы машина Debian могла начать показывать мне имена хостов.

Любые идеи?

ИЗМЕНИТЬ: Мой /etc/nsswitch.conf именно такой:

root@zxcv:/home/test# cat /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 dns
networks:       files

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

netgroup:       nis

Однако я настроил виртуальную машину с мостовым сетевым адаптером, установил ту же версию Debian Minimal и могу получить имена хостов для всех IP-адресов. Теперь вопрос в том, какие пакеты/модули/сервисы отсутствуют в неисправном Debian, что не позволяет получить имена хостов?

1
RedS 7 Авг 2018 в 18:04
1
Правильно ли работает обратное разрешение имен на ноутбуке с Debian? Он нужен для преобразования IP-адресов (полученных из кеша ARP) в имена хостов.
 – 
garethTheRed
7 Авг 2018 в 16:40
Как я могу проверить, правильно ли он работает? На данный момент хост 192.168.561 в Debian дает мне хост 1.0.168.192.in-addr.arpa. не найдено: 3(NXDOMAIN)
 – 
RedS
7 Авг 2018 в 16:51

2 ответа

Лучший ответ

У вас нет доступа к DNS-серверу, который может преобразовывать IP-адреса в имена.

Существуют и другие способы связать имена хостов и IP-адреса, но если у вас более одного компьютера, лучше всего использовать DNS.

И в ответ на ваш комментарий, да, /etc/resolv.conf должен содержать адрес DNS-сервера. В небольшой сети это часто то же самое, что и маршрутизатор.

0
RalfFriedl 7 Авг 2018 в 20:37

arp опрашивает вашу систему, чтобы определить, как она может преобразовывать IP-адреса в имена хостов. Если вы используете переключатель -n, он откажется от этого и просто покажет IP-адреса без какого-либо преобразования в имена хостов.

Как и большинство инструментов в Linux, arp использует NS (переключатель службы имен) для поиска. Если вы strace свою команду arp, вы можете увидеть, что она ищет следующие вещи:

$ strace -s 2000 arp -a
...
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 5

Просмотрев этот файл, arp обнаружит, как он должен искать имена хостов.

$ grep hosts: /etc/nsswitch.conf
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

Это говорит о том, чтобы сначала просмотреть файлы, а затем запросить DNS 2-й ... Слово files здесь означает использовать системный файл /etc/hosts. Вы можете узнать, как это будет делать NS, используя команду getent hosts.

Примере

Например, на моей виртуальной машине CentOS 7:

$ arp -a
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
gateway (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
$ arp -an
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

Если мы запросим у getent поиск IP-адреса 10.0.2.2:

$ getent hosts 10.0.2.2
10.0.2.2        gateway

IP-адреса, если они не присутствуют локально в каких-либо файлах, будут затем искать в DNS. Поскольку все мои IP-адреса являются частными IP-адресами для этой виртуальной машины, и они явно не входят в определенный DNS моей виртуальной машины, который, кстати, определен здесь:

$ more /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3

ПРИМЕЧАНИЕ. У arp не остается другого выбора, кроме как показать вам вопросительный знак, потому что ему не удалось найти имя для использования.

1
slm 7 Авг 2018 в 16:47
Если мой /etc/resolv.conf не содержит IP-адрес маршрутизатора (который действует как DNS-сервер), может ли это быть причиной проблем?
 – 
RedS
7 Авг 2018 в 19:21
- это было бы следующим, что я бы попробовал.
 – 
slm
7 Авг 2018 в 19:54