目錄

簡介

必要條件

需求

採用元件

背景資訊

設定

網路圖表

含偵錯的封包流

步驟 1.在WLC上全域性啟用mDNS時

步驟 2.WLC快取Bonjour服務（Apple TV廣告）

步驟 3.WLC偵聽客戶端服務查詢

步驟 4.WLC傳送單播響應到客戶端查詢Bonjour服務

驗證和疑難排解

簡介

本檔案介紹無線控制器上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上執行時的資料包流量。資料包流和調試有助於深入瞭解先前的

驗證命令不足。