简介
本文档介绍如何在无线控制器上实施Bonjour协议,并提供帮助排除问题的指南。
先决条件
要求
Cisco 建议您了解以下主题:
- Bonjour协议的基础知识
- 有关如何在WLC上配置mDNS的基本知识
- 组播路由的基础知识
使用的组件
本文档中的信息基于以下软件和硬件版本:
- AIR-CT2504-K9 WLC、8.2.141.0
- WS-C3560CX-8PC-S
- AIR-CAP3702I-E-K9
- 苹果电视
- Iphone5s,10.2
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
Bonjour协议是一种Apple服务发现协议,它使用组播域名系统(mDNS)服务记录定位本地网络上的设备和服务。Bonjour协议适用于服务通告和服务查询。每个查询或通告都发送到Bonjour组播地址ipv4 224.0.0.251 (ipv6 FF02::FB)。该协议在UDP端口5353上使用mDNS。
Bonjour协议使用的地址是本地链路组播地址,因此只转发到本地L2网络。路由器无法使用组播路由重定向流量,因为生存时间(TTL)设置为1。这意味着所有服务提供商/源(通告该服务)和Bonjour客户端(请求服务)必须位于同一子网中。这会导致可扩展性问题。
为了解决此问题,思科无线局域网控制器(WLC)充当Bonjour网关。WLC侦听Bonjour服务,从源/主机缓存这些Bonjour广告(AirPlay、AirPrint等)。例如,Apple TV和Bonjour客户端请求/请求服务时作出回复。这样,源设备和客户端可以位于不同的子网中。
配置
网络图
带调试的数据包流
当mDNS在Cisco WLC上运行时,会执行基本的四个步骤。这些步骤说明如下:
步骤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发送查询,如图所示。
数据包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
第二步: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
第三步: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
第四步: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
第二步:如果使用自定义mDNS配置文件,请确保所有所需的服务都添加到该配置文件。
第三步:确保在SSID下启用了mDNS,并且正确的mdns配置文件已映射到SSID。
在GUI中导航到WLAN > WLAN ID > Advanced,如图所示。
从CLI:
show wlan <ID> (snippet)
mDNS Status...................................... Enabled
mDNS Profile Name................................ default-mdns-profile
第四步: 验证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
第五步: 验证服务提供商是否也在特定服务自身下列出。
在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
第六步:如果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上运行时的数据包流。数据包流和调试有助于深入了解先前的
验证命令不足。