2025/04/21

Avahi暨FindDevice一瞥

摘要

本文概要記錄mDNS協定伺服端常駐程式Avahi與客戶端工具程式FindDevice的基本操作。

本文

mDNS即multicast DNS,用於不包含本地名稱伺服器的小型網路上解析主機名稱至IP位址,使用了一個特別保留的領域名稱.local。Linux作業系統上的常駐程式Avahi為一mDNS協定伺服端,Windows作業系統搭配工具程式FindDevice則為mDNS協定客戶端。隨後將於Ubuntu 18.04安裝Avahi,搭配Windows 11 Pro和從Github下載的FindDevice,於區域網路內進行mDNS基本測試。

步驟1,參考這裡,於Ubuntu安裝並重啟Avahi常駐程式。

sudo apt-get install avahi-daemon
sudo systemctl restart avahi-daemon.service

步驟2,參考這裡,於Ubuntu停用systemd-resolved服務。

sudo systemctl stop systemd-resolved.service

步驟3,參考這裡,為Ubuntu設置特別的主機名稱。

sudo hostnamectl set-hostname hello-world

步驟4,參考這裡,於Windows藉由瀏覽器來下載FindDevice工具程式。

步驟5,於Windows嘗試以IPv4來ping剛剛設置的Ubuntu主機;其中,未指定.local名稱後綴。

ping -4 hello-world -n 1

步驟6,於Windows嘗試以IPv6來ping剛剛設置的Ubuntu主機;其中,未指定.local名稱後綴。

ping -6 hello-world -n 1

步驟7,於Windows嘗試以預設形式執行FindDevice;由於預設尋找的服務為_factorch._tcp.local、而該服務Avahi未支援,所以尋找結果為空;其中,服務有指定.local名稱後綴。

FindDevice

步驟8,於Avahi建立一個服務,一個簡易的作法是複製範例的SSH服務、而該服務名稱為_ssh._tcp,接著重啟Avahi。

sudo cp /usr/share/doc/avahi-daemon/examples/ssh.service /etc/avahi/services/
sudo systemctl restart avahi-daemon.service

步驟9, 於Windows嘗試以指定服務的形式來執行FindDevice;由於尋找的服務_ssh._tcp.local被Avahi所支援,所以尋找結果非空;其中,服務有指定.local名稱後綴。

FindDevice --service _ssh._tcp.local --display-port

完成。

相關圖例如下所示。

伺服端的位址

伺服端的主機名稱

伺服端相關服務,如mDNS的5353,所佔據的埠號

封包交握,針對IPv4的ping、以及此前的mDNS查找

成功之IPv4的ping

封包交握,針對IPv6的ping、以及此前的mDNS查找

成功之IPv6的ping

封包交握,針對FindDevice尋找不存在的預設服務

FindDevice尋找不存在的預設服務致使結果為空

Avahi範例服務(SSH服務)

封包交握,針對FindDevice尋找存在的特定服務

FindDevice尋找存在的特定服務致使結果非空

 

參考文獻

https://en.wikipedia.org/wiki/Multicast_DNS
https://en.wikipedia.org/wiki/.local
https://avahi.org/
https://pjack1981.blogspot.com/2012/07/avahi.html
https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu
https://blog.csdn.net/easylife206/article/details/128795903
https://github.com/microsoft/FindDevice

 

沒有留言: