摘要
本文概要記錄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
沒有留言:
不接受新意見。