mDNS(multicast DNS)
It is a zero-configuration service
Network: 224.0.0.251:5353/UDP
It is implemented by the Apple Bonjour and open source Avahi software packages.
原理
1)每個進入局域網的主機, 如果開啟了mDNS服務的話,都會向局域網內的所有主機組播一個消息,我是誰,和我的IP地址是多少。
2)然後其他也有該服務的主機就會響應,也會告訴你,它是誰,它的IP地址是多少。
Avahi 是一個在內網內, 用來廣播自己是什麼服務以及用來尋找那些服務的一個工具,
Avahi 是 mdns 的 server, 用來廣播通知他人我的 ip (利用.local)
nss-mdns 是解析它人 .local 位址
安裝完nss-mdns後,到 /etc/nsswitch.conf, 找到 hosts: , 設成以下:
hosts: files mdns4_minimal mdns4 [NOTFOUND=return] dns
http://pjack1981.blogspot.com/2012/07/avahi.html
-------------以上記錄一下目前收集的mDns基礎知識,沒太多時間把它好好整理
一般來說都是給系統(普遍都是 DHCP 配發 DNS server 給各位)處理,也就是系統內的 Name Service Switch(簡稱 NSS)去做解析,但是這東西有些年頭了,新的協定像是 DNSSEC、DNS over TLS 都沒有支援,對於安全性來說是減少了許多。
於是在 systemd 裡面就有了 systemd-resolved 出現來代替 NSS 的位置。
大部分前面都說過了,就從設定檔開始說起吧!
大致上跟域名解析會有幾個檔案有關係:
/etc/hosts
這是本機的 DNS 查詢,這個優先權最大,有符合的話會直接被套用不會再查詢。
/etc/resolv.conf
這是 DNS 伺服器設定的位置,需要查詢就會從這裡抓伺服器。
/etc/systemd/resolved.conf
這是 systemd-resolved 的設定檔,也是今天的主軸。
/etc/systemd/resolved.conf
MulticastDNS=yes
設定完重啟服務
sudo systemctl daemon-reload
sudo systemctl restart systemd-networkd
sudo systemctl restart systemd-resolved
另一個方法
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
sudo systemctl restart NetworkManager //會讓systemd-resolve的配置重置
查到各個網路界面與 Global 的設定的詳細內容,可以用這個檢查剛才的設定是否成功
systemd-resolve --status
如果已在名稱伺服器組態中使用了 .local 網域,則必須在 /etc/host.conf 中關閉此選項
設定 systemd-resolved說明
DNS=
基本上是會從 DHCP 裡面撈,如果撈不到就會抓 /etc/resolv.conf 來用。
FallbackDNS=
如果連 /etc/resolv.conf 都沒有可以用的,就會抓這裡的來用,基本上不太會用到這裡的位置。
DNSSEC=
有 yes、no 以及 allow-downgrade,最後一個(也是預設選項)就是如果查詢時簽名驗證失敗的話,也允許使用結果。
但是有開啟 DNSSEC 的話都會增加一點反應時間,如果覺得查詢變很慢的話,可以考慮關閉一下 DNSSEC。
Cache=
開啟本機快取,算是最主要得功能之一,因為你查詢過後,就可以直接從本機撈不用再往外跑一次,速度會快上許多,又如果有開啟 DNSSEC 的話,更不用走大老遠再次查詢已經驗證過的資料了。
上面設定完後,可以看一下下面的工具,方便偵錯或是檢視運作情況。
resolvectl
常用的會有:
resolvectl query domain | ip address
用於 DNS 的正向或反向查詢,取決於輸入資料。
裡面也會寫查詢的協議、回應時間等等資料。
resolvectl status
查詢目前 systemd-resolved 的設定。
resolvectl statistics
查詢 systemd-resolved 的統計資料,像是快取數量及命中率。
resolvectl flush-caches
清除本機 DNS 快取,一般來說應該用不到,除非 DNS 被污染而快取錯誤的資料吧。
改完config,run 這個
sudo systemd-resolve --interface eno1 --set-mdns=yes
sudo systemctl restart systemd-resolved
avahi-daemon -r
REF
https://www.freedomwolf.cc/2020/01/dns_by_systemd/
https://itw01.com/8TCKBEK.html
PSA: mDNS and .local ICE candidates are coming
mDNSResolver
https://github.com/madpilot/mDNSResolver/tree/master/src
Particle_mDNSResolver
https://github.com/thedim-witted/Particle_mDNSResolver
libmicrodns
https://github.com/videolabs/libmicrodns
mdnsresolver
https://github.com/martinevsky/mdnsresolver/blob/master/main.cpp
How to configure systemd-resolved for mdns multicast dns on local network?
沒有留言:
張貼留言