自分のLAN上のデバイスのホスト名を表示できません。私の最初のノートブック(Ubuntu 18.04 LTS Desktop)では、次のコマンドの結果は次のとおりです。
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
使用地図、以下を使用してLANを検索できます。
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 の最小化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
IPアドレスを名前に変換できるDNSサーバーへのアクセス権がありません。
ホスト名とIPアドレスを接続する別の方法がありますが、コンピュータが複数台ある場合は、DNSが最善の答えです。
あなたのコメントによると、はい、/etc/resolv.confにはDNSサーバーのアドレスを含める必要があります。小規模ネットワークでは、通常はルータと同じです。
答え2
arp
IPをホスト名に変換する方法を決定するためにシステムを調査しています。そのスイッチを使用すると、-n
それを削除し、ホスト名を変換せずにIPのみを表示します。
ほとんどの Linux ツールと同様に、arp
検索に NS (Name Service Switch) を使用します。コマンド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
10.0.2.2 IPを見つけるためにクエリを行う場合:
$ getent hosts 10.0.2.2
10.0.2.2 gateway
IPがローカルファイルにない場合は、次にDNSで検索されます。私のIPはすべてこの仮想マシンのプライベートIPであり、私の仮想マシンで定義されたDNSに明示的に表示されないため、次のように定義されたDNSがあります。
$ more /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3
メモ: arp
利用可能な名前が見つからないため、疑問符を表示するしかありません。