簡介
本檔案介紹無線控制器上Bonjour通訊協定的實作,並提供幫助排解問題的准則。
必要條件
需求
思科建議您瞭解以下主題:
- Bonjour協定基礎知識
- 有關如何在WLC上設定mDNS的基本知識
- 組播路由基礎知識
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- AIR-CT2504-K9 WLC,8.2.141.0
- WS-C3560CX-8PC-S
- AIR-CAP3702I-E-K9
- Apple電視
- Iphone5s,10.2
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
Bonjour協定是一種Apple服務發現協定,它使用組播域名系統(mDNS)服務記錄來查詢本地網路上的裝置和服務。Bonjour協定對服務公告和服務查詢進行操作。每個查詢或通告都傳送到Bonjour組播地址ipv4 224.0.0.251(ipv6 FF02::FB)。此協定在UDP埠5353上使用mDNS。
Bonjour協定使用的地址是本地鏈路組播地址,因此只轉發到本地L2網路。由於生存時間(TTL)設定為1,因此路由器無法使用組播路由來重定向流量。這意味著所有服務提供商/源(通告該服務)和Bonjour客戶端(請求服務)必須位於同一個子網中。這會導致可擴充性問題。
為了解決此問題,思科無線LAN控制器(WLC)充當Bonjour閘道。WLC偵聽Bonjour服務,從來源/主機快取這些Bonjour廣告(AirPlay、AirPrint等)。例如,Apple TV和Bonjour客戶請求/請求服務時作出回覆。這樣,源主機和客戶端可以位於不同的子網中。
設定
網路圖表
含偵錯的封包流
在Cisco WLC上執行mDNS時,一般會執行四個基本步驟。這些步驟說明如下:
步驟 1.在WLC上全域性啟用mDNS時
如果您沒有建立自訂mDNS設定檔(如圖所示),WLC會監聽這些預設服務。
每個服務都有一個與其關聯的服務字串。服務字串用於將服務例項與服務查詢匹配。服務型別始終包含服務名稱和協定。此外,它可以包含一個或多個子型別識別符號。 AppleTV服務使用:_airplay._tcp.local。
當全域性啟用mDNS時,控制器會針對有線(管理和動態介面)和無線網路上的所有服務將mDNS查詢傳送到224.0.0.251。
在WLC交換器連線埠的此擷取中,封包80、81和82 show WLC會透過有線網路使用管理來源IP(10.48.39.142)和動態介面(192.168.232.11和192.168.239.8)向224.0.0.251傳送查詢,如下圖所示。
封包83顯示WLC透過無線方式傳送查詢。內部資料包顯示從管理介面到224.0.0.251的WLC查詢。由於此查詢通過無線進行,因此capwap報頭會新增到資料包中,而外部源IP仍然是管理源IP,但目的地是組播IP 239.100.100.100,如下圖所示。
那麼,此組播IP 239.100.100.100來自何處?在WLC上,存取點(AP)多點傳送模式(controller > general)設定為多點傳送,多點傳送群組位址為239.100.100.100(這只是一個範例,說明239範圍內的任何ip)。AP加入此組播組並監聽。WLC將查詢轉發到此組,AP接收該查詢並通過無線傳送它。位址239.100.100.100(這不是靜態的,這是您在下一個範例中設定的)僅出現在WLC和AP之間的capwap標頭中,無線使用者端看不到其中的任何內容(但可以看到內部原始mdns封包),如圖所示。
請記住,在此設定中,WLC是VLAN 1中的2504,AP是VLAN 231。由於裝置位於不同的vlan中,您需要對vlan 1和239在有線上啟用組播路由才能使此功能正常工作。
注意:如果在有線上未為wlc和AP管理VLAN啟用組播路由,則必須將AP組播模式設定為單播。在此模式下,控制器會將每個組播資料包單播到與控制器關聯的每個AP。此模式效率非常低,建議不要使用。
此捕獲是詳細的查詢資料包,如下圖所示。
調試反映的內容與捕獲中看到的內容相同。在此代碼片段中,只顯示來自管理介面的查詢。
(Cisco Controller) >debug mdns all enable
Cisco Controller) >*emWeb: Feb 22 16:24:18.203: bgSetBonjourAccessPolicy :1192 Bonjour AccessPolicy status is already in requested state Disabled
*emWeb: Feb 22 16:24:18.203: bgSetBonjourQueryInterval :1359 Bonjour query interval is already configured for requested value = 15
*Bonjour_Process_Task: Feb 22 16:24:18.215: bonjourProcessTask : 220 Processing message type = BONJOUR_AGGREGATED_QUERY
*Bonjour_Process_Task: Feb 22 16:24:18.215: sendBonjourPkt : 3881 sendBonjourPkt msg-type = BONJOUR_AGGREGATED_QUERY toSend = all
*Bonjour_Process_Task: Feb 22 16:24:18.216: Send to Wired, All vlan is TRUE
*Bonjour_Process_Task: Feb 22 16:24:18.216: sendBonjourPacketToWired : 3652 sending aggregated query on interface = management
*Bonjour_Process_Task: Feb 22 16:24:18.216: buildBonjourPacket : 2916 Preparing for l2 Multicast send
*Bonjour_Process_Task: Feb 22 16:24:18.216: buildBonjourPacket : 2936 allVlan = 0 , vlanId = 0
*Bonjour_Process_Task: Feb 22 16:24:18.216: buildBonjourPacket : 2948 simInterfaceMacAddrGet( management ) = 00:A2:89:B9:62:60
*Bonjour_Process_Task: Feb 22 16:24:18.216: Inside buildBonjourAggregatedQuery, available len = 1458
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : 7339 Sending mDNS AGGREGATED query for services configured in MSAL-DB
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : [ 1 ] Including SRV = AirPrint in aggregated query packet
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : [ 2 ] Including SRV = AirTunes in aggregated query packet
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : [ 3 ] Including SRV = AppleTV in aggregated query packet
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : [ 4 ] Including SRV = HP_Photosmart_Printer_1 in aggregated query packet
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : [ 5 ] Including SRV = HP_Photosmart_Printer_2 in aggregated query packet
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : [ 6 ] Including SRV = Printer in aggregated query packet
*Bonjour_Process_Task: Feb 22 16:24:18.216: -----------------------------------------
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : PACKET-1 mDNS-QUERY sent for [ 6 ] services
*Bonjour_Process_Task: Feb 22 16:24:18.216: fillBonjourAggregatedQuery : mDNS-QUERY sent for all services in [ 1 ] packets
*Bonjour_Process_Task: Feb 22 16:24:18.216: -----------------------------------------
*Bonjour_Process_Task: Feb 22 16:24:18.216: buildBonjourPacket : 3054 BONJOUR_AGGREGATED_QUERY: buildBonjourAggregatedQuery()STATUS = 0
*Bonjour_Process_Task: Feb 22 16:24:18.216: buildBonjourPacket MCAST-DST-IP ADDR = 224.0.0.251
步驟 2.WLC快取Bonjour服務(Apple TV廣告)
在此資料包中,Apple TV(192.168.239.37)向224.0.0.251傳送通告。由於本例中Apple TV是無線的,因此您可以看到通過capwap傳送的廣告。WLC僅注意到一次mDNS服務回應,但快取專案具有TTL,且必須保留keepalive才能將其維護,如圖所示。
Apple TV的詳細響應如下圖所示。
這些調試顯示Apple TV響應WLC的查詢。在這種情況下,Apple TV回應了21項服務,其中只有Airplay服務感興趣。
*Bonjour_Msg_Task: Feb 23 16:22:02.372: 18:ee:69:11:dc:60 Parsing 21 Bonjour Answers.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : 1562 aStringNameStr = Wireless Team (4)._airplay._tcp.local.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : 1579 RR: Wireless Team (4)._airplay._tcp.local., aType: 16, aClass: 32769, aTTL: 4500, aDataLen: 207, ptr: 0x327a9ca8, end: 0x327aa100
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : 1581 aStringNameStr : Wireless Team (4)._airplay._tcp.local.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: Found Service Name:_airplay._tcp.local., Service Provider Name:Wireless Team (4)._airplay._tcp.local.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgServiceAllowedInMsalDb : 181 srv_str = _airplay._tcp.local. type = Wireless
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgServiceAllowedInMsalDb : 195 Incoming Service Advertisement string = _airplay._tcp.local.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: Service-Name = AppleTV Service-String = _airplay._tcp.local. Type = all Origin = Wireless FOUND and is ALLOWED FOR LEARNING
<<< Airplay service registered in WLC DB >>
*Bonjour_Msg_Task: Feb 23 16:22:02.374: Service Name:_airplay._tcp.local. is supported in Master-service-db
*Bonjour_Msg_Task: Feb 23 16:22:02.374: aDataLen: 2, aSrPtrRecord.aSrvProName.size: 39
*Bonjour_Msg_Task: Feb 23 16:22:02.374: Updating updateBonjourSrPtrDb:
*Bonjour_Msg_Task: Feb 23 16:22:02.374: aType: 12, aClass: 1, aTTL: 4500, aDataLen: 2, ptr: 0x327a9d93, end: 0x327aa100
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : .. < SP-SR_PTR PKT >...
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : SERVICE NAME ......... = AppleTV
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : SERVICE STRING ....... = _airplay._tcp.local.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : SERVICE PROVIDER ..... = Wireless Team (4)._airplay._tcp.local.
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : aTTL ................. = 4500n
*Bonjour_Msg_Task: Feb 23 16:22:02.374: bgProcessServiceAdvRsp : 1546 msg : 0x327a9bda, ptr : 0x327a9d93, end : 0x327aa100, pld_len : 877
步驟 3.WLC偵聽客戶端服務查詢
稍後,在任一時間點,無線客戶端(192.168.232.98)傳送請求空中播放服務的查詢(通常當客戶端開啟具有空中播放功能的應用時),如圖所示。
*Bonjour_Msg_Task: Feb 27 17:03:15.603: 00:6d:52:5d:5a:7d Parsing 2 bonjour questions
*Bonjour_Msg_Task: Feb 27 17:03:15.603: 00:6d:52:5d:5a:7d Query Service Name: _airplay._tcp.local., RR-Type: TYPE_DOMAIN_NAME_PTR , Class: 1
*Bonjour_Msg_Task: Feb 27 17:03:15.603: processBonjourPacket : 1017 qNameStr : _airplay._tcp.local., bonjServiceNameStr : _airplay._tcp.local., bonjSpNameStr : _airplay._tcp.local.
*Bonjour_Msg_Task: Feb 27 17:03:15.603: Service Name : AppleTV Service String : _airplay._tcp.local. is supported in MSAL-DB
*Bonjour_Msg_Task: Feb 27 17:03:15.603: 00:6d:52:5d:5a:7d SRV : _airplay._tcp.local. is supported by client profile : default-mdns-profile
步驟 4.WLC傳送單播響應到客戶端查詢Bonjour服務
WLC使用快取的服務Wireless Team(4)。_airplay._tcp.local進行響應。內部封包的來源IP是使用者端vlan的動態介面,在本案例中為192.168.232.11,如下圖所示。
調試片段
BONJOUR_AGGREGATED_QUERY_RESPONSE
*Bonjour_Process_Task: Feb 27 17:03:45.229: buildBonjourQueryResponsePld : SRV-NAME ..... : AppleTV
*Bonjour_Process_Task: Feb 27 17:03:45.229: buildBonjourQueryResponsePld : SP-NAME....... :
*Bonjour_Process_Task: Feb 27 17:03:45.229: buildBonjourQueryResponsePld : SEND TO ...... : BONJOUR_PKT_TO_WIRELESS
*Bonjour_Process_Task: Feb 27 17:03:45.229: buildBonjourQueryResponsePld : VLAN ......... : 232
*Bonjour_Process_Task: Feb 27 17:03:45.229: buildBonjourQueryResponsePld : IS MCAST ..... : NO
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : DST-MAC ...... : 00:6D:52:5D:5A:7D
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : DST-IP ....... : 192.168.232.98
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : ALL mDNS-AP .. : 0
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : TTL COUNTER .. : TIMEOUT_RESET
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : RESTART TIME . : 0
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : SNOOP STATUS . : 0
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : LSS STATUS ... : DISABLED
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : RSP SRV NAME . : AppleTV
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : MSG-ID ....... : 0
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld : POLICY STATUS : DISABLED
*Bonjour_Process_Task: Feb 27 17:03:45.230: buildBonjourQueryResponsePld INCLUDING SpData : Wireless Team (4)._airplay._tcp.local. in AGGREGATED QUERY RESPONSE
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID SR-PTR RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID SD-PTR RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID SRV RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID TXT RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID NSEC RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID DOMAIN RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: fillBonjourDomain : 6055 : attaching SP-DOMAIN RR
*Bonjour_Process_Task: Feb 27 17:03:45.233: VALID DOMAIN-NSEC RR FOUND, attaching.....
*Bonjour_Process_Task: Feb 27 17:03:45.233: buildBonjourPacket DST-IP ADDR = 192.168.232.98
*Bonjour_Process_Task: Feb 27 17:03:45.233: Transmitting bonjour Pkt to STA: 00:6D:52:5D:5A:7D
*Bonjour_Process_Task: Feb 27 17:03:45.233: Unicast Packet sent to client 00:6D:52:5D:5A:7D success.
驗證和疑難排解
本節提供的資訊可用於確認組態及對其進行疑難排解。
為了在mdns中識別和隔離問題,需要正確配置,因此幾乎不需要基本檢查。
步驟1.必須全域性啟用mDNS。
在GUI上導航Controller > mDNS 如下圖所示。
在 CLI 上:
show network summary (snippet)
mDNS snooping............................... Enabled
mDNS Query Interval......................... 15 minutes
步驟 2.如果您使用自定義mDNS配置檔案,請確保所有必需的服務都新增到該配置檔案。
步驟 3.確保SSID下啟用了mDNS,並且正確的mdns配置檔案已對映到SSID。
在GUI上導覽至WLAN > WLAN ID > Advanced,如下圖所示。
在 CLI 上:
show wlan
(snippet)
mDNS Status...................................... Enabled
mDNS Profile Name................................ default-mdns-profile
步驟 4. 驗證mDNS域服務中是否列出了mDNS服務提供程序。這會列出WLC快取的服務的域名(Apple TV、airprinters)。
在GUI中,導覽至Controller > mDNS > mDNS Domain Name IP> Summary,如下圖所示。
在 CLI 上:
show mdns domain-name-ip summary
Number of Domain Name-IP Entries................. 1
DomainName MAC Address IP Address Vlan Id Type TTL Time left (sec) (sec)
-------------------- ---------------- ---------------- ------- ------ ------ ------
Wireless-Team-3.local. 18:ee:69:11:dc:60 192.168.239.37 239 Wireless 4725 4163
步驟 5. 驗證該服務提供商是否也在特定服務本身的下方列出。
在GUI上,導覽至Controller > mDNS > General > Service Name,如下圖所示。
在 CLI 上:
show mdns service detailed AppleTV
Service Name..................................... AppleTV
Service String................................... _airplay._tcp.local.
Service Id....................................... 3
Service query status............................. Enabled
Service LSS status............................... Disabled
Service learn origin............................. Wireless and Wired
Number of Profiles............................... 1
Profile.......................................... default-mdns-profile
Number of Service Providers ..................... 1
Number of priority MAC addresses ................ 0
ServiceProvider MAC Address AP Radio MAC Vlan Id Type TTL Time left(sec) (sec)
-------------------- ---------------- ---------------- ------- ------ ----- ---------
Wireless Team (4)._airplay._tcp.local. 18:EE:69:11:DC:60 A4:6C:2A:7C:8F:80 239 Wireless 4500 3841
步驟 6.如果WLC沒有發現該服務,則檢查是否要在bonjour瀏覽器(Controller>>mDNS>>mDNS瀏覽器)下學習該服務。 Bonjour瀏覽器是在WLC上看到的所有服務通告的快取,由於配置不允許學習,因此未發現該內容。您可以從Bonjour瀏覽器中選擇和新增服務,這在您測試和實施新服務時非常方便。
步驟 7.以下是調試Bonjour的命令:
debug mdns error enable
debug mdns message enable
debug mdns detail enable
debug mdns all enable
Bonjour browser和show mdns service not-learned也可用作調試工具。
步驟 8.如前所述,如果WLC和AP位於不同的子網中,並且AP組播模式設定為組播,請確保在兩個vlan之間的有線網路上啟用組播路由。在此設定中,vlan是vlan 1(WLC)和vlan 231(AP)。
Conf t
!
interface Vlan1
ip pim sparse-dense-mode
!
interface Vlan231
ip pim sparse-dense-mode
!
正在播放的組播路由:
Gateway#sh ip mroute 239.100.100.100
IP Multicast Routing Table
-------snippet--------------------
(*, 239.100.100.100), 2w4d/stopped, RP 10.48.39.5, flags: SJC
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Vlan231, Forward/Sparse-Dense, 2w0d/00:02:10
Vlan232, Forward/Sparse-Dense, 2w4d/00:02:11
(10.48.39.142, 239.100.100.100), 2w4d/00:02:50, flags: T
Incoming interface: Vlan1, RPF nbr 0.0.0.0, RPF-MFD
Outgoing interface list:
Vlan231, Forward/Sparse-Dense, 2w0d/00:02:10, H
除了這些核對清單之外,關鍵是要瞭解mDNS在WLC上執行時的資料包流量。資料包流和調試有助於深入瞭解先前的
驗證命令不足。