前陣子同事的客戶把網段切開來,然後呢?然後AirPrint就找不到了。
AirPrint跟Airplay還是Chromecast都使用mDNS也屬於Multicast,Mutlicast在網路環境中,只適合小範圍使用,像是個人或是家庭環境,只有一個網段,設備數也不多,就不會造成驚人影響。
Multicast預設也作用於一個VLAN中,不會跨網段。
因此,如果要跨網段,就需要特別手法,先撇除很少用的組播。讓多播跨網段有兩種方法:Multicast Forwarding、mDNS repeater。
Multicast Forwarding
簡單粗暴,把符合條件的Multicast,從A介面丟到B介面。
mDNS repeater
一種服務,當自己收到mDNS時,修改來源IP,內容不變,往另外一個介面丟。
在尋找服務時,客戶端會發出mDNS詢問,支援服務的設備會用mDNS回應。如果沒有詢問,支援服務的設備過一段時間也會用mDNS表達自己所支援的服務。
mDNS目的是用於發現,只要能收到,就可以看到從封包中看到Server的IP。
所以,重點是要讓客戶端可以收到Server的mDNS,這點使用Wireshark就能檢查。
如果要更快,客戶端的mDNS也要能到Server,這樣就能馬上建立連線。
如何在Fortigate上使用Mutlicast Forwarding
個人使用7.2.4版本 Fortigate 60E。
我的環境有兩區「internal」與「test」,這邊使用spotify做mDNS轉送功能的驗證,spotify有mDNS服務spotify_connect。
聲霸支援spotify_connect,所以只要我在「test」區域的電腦可以用spotify放音樂到「internal」的聲霸上就可以了。
利用Fortigate主控臺,輸入以下指令
config system settings
set multicast-forward enable
end
config firewall multicast-policy
edit 1
set srcintf "internal"
set dstintf "test"
set srcaddr "Soundbar"
set dstaddr "all"
next
edit 2
set srcintf "test"
set dstintf "internal"
set srcaddr "all"
set dstaddr "all"
next
end
第一條是限制只有聲霸的多播會轉送到test區域。第二條則是test區域所有裝置的mDNS都會送到internal區域。
藉此達到,在test區域設備一用mDNS問,轉送到internal區域,在internal區域的聲霸回應,又轉送回test區域,在test區域的設備接收到,就知道spotify可以投放的設備在哪個IP位置。非常及時。
實測也是如此。
雜談
關於mDNS服務的對策,各家都有一套,但是其本身設計就不適用於跨網段的場域,我仍不建議跨網段使用。
Sophos雖然也有Multicast Forwarding,但實測,只有SSDP能轉,最重要的mDNS卻轉不過去,但我也不懂為什麼。
Fortigate是看到某校園有mDNS大量洗,仔細看來源,Fortigate,原來如此。變成這次實作的可能選擇。
對於mDNS早就知道運作原理,但是卻沒有一個好用的解決方案,Aruba Airgroup用於無線環境很好用,但是碰上有線無線混合環境,就使不上力了。