让你的网络自己解释清楚,还不止于此

Lobsters Hottest 工具

摘要

一篇教程,介绍如何结合 arp-scan 与 DNS、DHCP 来识别和追踪家庭或办公网络中的设备,涵盖命名规范、MAC 地址厂商查询,以及 IPv6/NDP 的注意事项。

<p><a href="https://lobste.rs/s/m6l6ld/tell_your_network_explain_itself_then">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/10/22 15:58

# 让你的网络自我介绍一番 Source: https://unixdigest.com/tutorials/tell-your-network-to-explain-itself-and-then-some.html Published on 2026-10-22. 前几天我读了一篇博客文章,讲的是使用 `arp-scan` 列出网络中的每一台设备,以便更好地追踪设备,这很好,但我们可以做得更多。 我说的那篇文章是 Ben Calderon 写的《ARP! Tell your network to explain itself》(https://benjcal.space/blog/arp-tell-your-network-to-explain-itself/) 我网络上的设备也太多了,根本追踪不过来(它既承载了一些我的 homelab 内容,也承载了一些我的办公需求),多年来我尝试过不同的方法。 早期我做的事情之一是给每台设备起一个有意义的主机名,比如 "johnslaptop"、"janesdesktop"、"webserver"、"storageserver" 等等。但你可能也知道,当承担相同功能的机器越来越多时,这很快就会变成问题——"webserver" 就变成了 "oldwebserver",或者你用 "webserver1" 和 "webserver2",然后就忘了哪个是哪个。而且当设备更换使用者时,你还得改名,"johnslaptop" 就变成了 "alexlaptop" 之类的。 更好的方法是使用命名规范。如果你运行的是一个拥有大量设备的大型网络,这就特别有用,你可以采用类似 "region.location.devicetype.unitnumber" 的方案。在 homelab 中,很多人会选择他们喜欢的某部电影或电视剧中的角色名字作为主机名,比如 "homer"、"marge"、"bart" 等。 使用角色名的好处是,即使设备被用于其他用途或换了使用者,名字也不需要改变。但缺点是,现在你更难记住哪台设备是干什么的了。 而且在两种情况下,你都无法记住哪个 IP 地址属于哪台机器。 使用 `arp-scan` 来利用[地址解析协议](https://en.wikipedia.org/wiki/Address_Resolution_Protocol)(ARP)是确定你的网络中哪些 IPv4 设备正在运行的好方法,而且它比用 `nmap` 扫描快得多。 ``` $ arp-scan 192.168.1.0/24 Interface: eth0, type: EN10MB, MAC: 1g:36:4f:16:a2:3a, IPv4: 192.168.1.5 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) ... 192.168.1.5 b0:56:9a:e1:66:b9 Intel Corporate 192.168.1.12 1a:83:04:16:d4:a3 (Unknown) 192.168.1.23 30:ab:d6:d2:b3:36 ASUSTek COMPUTER INC. ... 15 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.10.0: 256 hosts scanned in 2.018 seconds (126.86 hosts/sec). 15 responded ``` 如果你使用的是 IPv6,那么 `arp-scan` 将不起作用,因为 IPv6 使用的是[邻居发现协议](https://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol)(NDP)而不是 ARP,不过如果你的网络已经部署了 IPv6,我相信你肯定已经知道这一点了。 在上面 `arp-scan` 的结果中,我们得到了 IP 地址、MAC 地址,有时(但只是有时)还能得到网卡的厂商信息。即便如此,这实际上只能告诉我哪些设备正在运行,从上面的结果我无法判断哪台是什么设备。特别是 192.168.1.12 那个没有列出厂商信息的。而且有时有好几台机器使用相同厂商的网卡。 DNS 来救场了! 在网络中使用 DNS 服务器有一个非常酷的好处,即使你的设备数量有限,你也能获得一个类似集中式"数据库"的东西,可以在其中配置所有设备的信息。如果你再结合 DHCP 服务器,就可以轻松地将特定的 IP 地址与特定的 MAC 地址关联起来,从而始终确保同一台设备自动获得相同的 IP 地址,而不需要在每台设备上单独管理。 使用 DHCP 和 DNS 的一个小缺点是,如果服务器宕了(比如你正在更新操作系统),你的网络就会暂时无法正常工作,机器无法获取 IP 地址,你也无法使用 DNS 进行查询。不过你可以通过只给最重要的设备分配静态 IP 地址,并确保这些 IP 地址与你 DNS 区域中使用的地址一致,来在一定程度上缓解这个问题。 不过真正酷的是,你可以使用 [TXT 记录](https://en.wikipedia.org/wiki/TXT_record)将任意文本关联到主机上! 在上面 192.168.1.12 的例子中,我不仅可以使用 `drill` 或 `dig` 查询设备的主机名: ``` $ drill -x 192.168.1.12 ;; ANSWER SECTION: 12.1.168.192.in-addr.arpa. 3600 IN PTR bart.home.arpa. ``` 我还可以从之前设置的 TXT 记录中获取非常有用的信息: ``` $ drill bart.home.arpa TXT ;; ANSWER SECTION: bart.home.arpa. 3600 IN TXT "Johns Intel i7-7700 Acer laptop" ``` 在我的网络中,我使用 [OpenBSD 作为路由器](https://unixdigest.com/openbsd-router-guide/),并将 [dhcpd](https://man.openbsd.org/dhcpd) 与 [unbound](https://nlnetlabs.nl/projects/unbound/about/) 结合使用,这样我只需要在一个地方输入设备的 IP 地址。 因此,bart.home.arpa 这台机器在 `/etc/dhcpd` 中的部分看起来像这样: ``` host bart.home.arpa { fixed-address bart.home.arpa; hardware ethernet 1a:83:04:16:d4:a3; } ``` 然后在 unbound 中我有以下配置: ``` local-data: "bart.home.arpa. IN A 192.168.1.12" local-data: 'bart.home.arpa. IN TXT "Johns Intel i7-7700 Acer laptop"' local-data-ptr: "192.168.1.12 bart.home.arpa" ``` 你只需要确保路由器启动时 dhcpd 在 unbound 之后启动。dhcpd 使用 `fixed-address` 字段向 DNS 服务器(这里是 unbound)查询属于该主机名的 IP 地址,以便将其分配给 `hardware ethernet` 字段中列出的特定 MAC 地址的设备。 你可以在 Raspberry Pi 上使用几乎任何 Linux 发行版或 BSD 变体来进行同样的设置,或者你也可以使用 [Pi-hole](https://pi-hole.net/) 搭配 [Dnsmasq](https://thekelleys.org.uk/dnsmasq/doc.html),它将 DHCP 和 DNS 整合在了一起。 即使你决定手动为所有设备分配静态 IP 地址而完全不使用 DHCP,拥有一个 DNS 服务器作为"数据库"来管理主机名和附加信息也是非常棒的,你只需要在设置时确保一切信息一致即可。 运行像 unbound 这样的本地递归 DNS 解析器的另一个主要好处是,你成为了自己的 DNS 提供商,不再需要依赖你的 ISP、Google、Cloudflare 或任何其他 DNS 提供商。你还可以屏蔽网站,比如投放广告的网站或用于收集遥测数据的机器。 今天就到这里,祝你愉快!

相似文章

ARP!让网络自己解释清楚

Lobsters Hottest

一篇面向初学者的博客,介绍地址解析协议(ARP)如何把 IP 地址映射到 MAC 地址,并演示 arp-scan、Wireshark 和 ip neighbour 等工具的使用,顺带提及 ARP 欺骗与广播风暴等安全话题。

设备如何自行发现加密DNS

Lobsters Hottest

本文解释了指定解析器发现(DDR)协议,该协议让设备能够自动发现加密DNS端点。它描述了查询如何工作、解析器如何响应,以及从普通DNS进行机会性升级的局限性。

Bad Apple 之 Traceroute 版

Hacker News Top

作者演示了如何使用 nftables 和 traceroute,通过注入带有不同 IPv6 地址的虚假跳点来显示 Bad Apple 动画,展示了一个创造性的网络黑客技巧。

掌控校园内所有投影仪和摄像头

Hacker News Top

科罗拉多矿业大学的一名学生构建了一个快速的暴力DNS枚举工具,用于发现校园网络中的所有设备,首先用Python实现,然后改用Rust,通过枚举本地DNS的子域名。