簡介
本檔案說明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顯示WLC使用管理來源IP (10.48.39.142)和動態介面(192.168.232.11和192.168.239.8),透過有線網路向224.0.0.251傳送查詢,如下圖所示。
Packet 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以快取的服務無線組(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.
驗證與疑難排解
本節提供的資訊可用於確認組態和對其進行疑難排解。
為了辨識和隔離mdn中的問題,需要正確配置,因此不需要進行基本檢查。
步驟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 <ID> (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瀏覽器和show mdns service not-learnt也可用作調試工具。
步驟 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上運行時的資料包流。資料包流和調試有助於深入瞭解先前的
驗證命令不足。