El conjunto de documentos para este producto aspira al uso de un lenguaje no discriminatorio. A los fines de esta documentación, "no discriminatorio" se refiere al lenguaje que no implica discriminación por motivos de edad, discapacidad, género, identidad de raza, identidad étnica, orientación sexual, nivel socioeconómico e interseccionalidad. Puede haber excepciones en la documentación debido al lenguaje que se encuentra ya en las interfaces de usuario del software del producto, el lenguaje utilizado en función de la documentación de la RFP o el lenguaje utilizado por un producto de terceros al que se hace referencia. Obtenga más información sobre cómo Cisco utiliza el lenguaje inclusivo.
Cisco ha traducido este documento combinando la traducción automática y los recursos humanos a fin de ofrecer a nuestros usuarios en todo el mundo contenido en su propio idioma. Tenga en cuenta que incluso la mejor traducción automática podría no ser tan precisa como la proporcionada por un traductor profesional. Cisco Systems, Inc. no asume ninguna responsabilidad por la precisión de estas traducciones y recomienda remitirse siempre al documento original escrito en inglés (insertar vínculo URL).
Este documento describe la implementación del protocolo Bonjour en el controlador inalámbrico. Su propósito es ayudarle a entender el flujo de trabajo y proporcionar pautas para solucionar problemas.
Cisco recomienda que tenga conocimiento sobre estos temas:
La información que contiene este documento se basa en las siguientes versiones de software y hardware.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.
Bonjour protocol es un protocolo de detección de servicios de Apple que localiza dispositivos y servicios en una red local con el uso de registros de servicio del sistema de nombres de dominio (mDNS) multidifusión. El protocolo Bonjour funciona en anuncios de servicio y consultas de servicio. Cada consulta o anuncio se envía a la dirección multicast Bonjour ipv4 224.0.0.251 (ipv6 FF02::FB). Este protocolo utiliza mDNS en el puerto UDP 5353.
La dirección utilizada por el protocolo Bonjour es la dirección multicast local del link y por lo tanto sólo se reenvía a la red L2 local. Los routers no pueden utilizar el routing multidifusión para redirigir el tráfico porque el tiempo de vida (TTL) está establecido en 1. Esto significaba que todos los proveedores/fuentes de servicio (que anuncian el servicio) y los clientes Bonjour (que piden servicio) debían estar en la misma subred. Esto da lugar a problemas de escalabilidad.
Para solucionar este problema, el controlador de LAN inalámbrica (WLC) de Cisco actúa como gateway Bonjour. El WLC escucha los servicios de Bonjour, almacena en caché estos anuncios de Bonjour (AirPlay, AirPrint, etc.) del origen/host. Por ejemplo, Apple TV y responde a los clientes Bonjour cuando solicitan/solicitan un servicio. De esta manera, puede tener los orígenes y clientes en diferentes subredes.
Hay cuatro pasos básicos que se realizan cuando mDNS se ejecuta en un WLC de Cisco. Estos pasos se describen a continuación:
El WLC escucha estos servicios predeterminados si uno no tiene un perfil mDNS personalizado creado como se muestra en la imagen.
Cada uno de estos servicios tiene asociada una cadena de servicio. Las cadenas de servicio se utilizan para hacer coincidir las instancias de servicio con las consultas de servicio. Un tipo de servicio siempre contiene el nombre del servicio y el protocolo. Además, puede contener uno o más identificadores de subtipos. El servicio AppleTV utiliza: _airplay._tcp.local.
Cuando mDNS está habilitado globalmente, el controlador envía consultas mDNS a 224.0.0.251 para todos los servicios en redes por cable (interfaces dinámicas y de administración) y redes inalámbricas.
En esta captura en el puerto del switch del WLC, los paquetes 80, 81 y 82 muestran que el WLC envía una consulta a 224.0.0.251 sobre la red cableada con IP de origen de las interfaces de administración (10.48.39.142) y dinámicas (192.168.232.11 y 1 92.168.239.8) como se muestra en la imagen.
El paquete 83 muestra que el WLC envía una consulta a través de la red inalámbrica. El paquete interno muestra el WLC consultando a 224.0.0.251 desde la interfaz de administración. Dado que esta consulta se realiza a través de la red inalámbrica, el encabezado capwap se agrega al paquete con la IP de origen externa para que siga siendo la de administración, pero el destino es IP multicast 239.100.100.100 como se muestra en la imagen.
Ahora, ¿de dónde viene esta IP multicast 239.100.100.100? En el WLC, el modo de multidifusión del punto de acceso (AP) (controlador > general) se configuró en multidifusión con dirección de grupo de multidifusión como 239.100.100.100 (es sólo un ejemplo, cualquier ip en el rango 239). Los AP se unen a este grupo multicast y lo escuchan. El WLC reenvía la consulta a este grupo, los AP la reciben y la envían por el aire. La dirección 239.100.100.100 (esto no es estático, esto es lo que configuramos en el siguiente ejemplo) sólo aparece en el encabezado capwap entre el WLC y los AP, los clientes inalámbricos nunca ven nada de él (pero puede ver el paquete mdns original interno) como se muestra en la imagen.
Recuerde que en esta configuración el WLC es un 2504 en vlan 1 y el AP está en vlan 231. Dado que los dispositivos se encuentran en diferentes vlan, es necesario tener habilitado el ruteo multicast para vlan 1 y 239 en el cableado para que esto funcione.
Nota: Si el ruteo multicast no está habilitado en el cableado para wlc y la vlan de administración AP, entonces el modo multicast AP debe configurarse en unicast. En este modo, el controlador unifica cada paquete multicast a cada AP asociado al controlador. Este modo es muy ineficiente y no se recomienda.
Esta captura es el paquete de consulta en detalle como se muestra en la imagen.
Las depuraciones reflejan lo mismo que se ve en las capturas. Aquí el fragmento de código sólo muestra la consulta de la interfaz de administración.
(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
En este paquete, Apple TV ( 192.168.239.37 ) envía anuncios a 224.0.0.251 . Como en este caso Apple TV es inalámbrico , se puede ver el anuncio que se envía por capwap. El WLC toma nota solamente una vez de la respuesta del servicio mDNS, sin embargo, que la entrada de la memoria caché tiene un TTL y las señales de mantenimiento son necesarias para mantenerlo como se muestra en la imagen.
La respuesta detallada de Apple TV es como se muestra en la imagen.
Estos debugs muestran Apple TV en respuesta a las consultas del WLC . En este escenario, Apple TV respondió con 21 servicios de los cuales sólo el servicio Airplay es de interés.
*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
Más adelante, en cualquier momento, el cliente inalámbrico (192.168.232.98) envía una consulta que solicita el servicio de reproducción en el aire (normalmente cuando el cliente abre una aplicación que es apta para la reproducción en directo) como se muestra en la imagen.
*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
El WLC responde con el servicio en caché Wireless Team (4)._airplay._tcp.local. La IP de origen del paquete interno es la interfaz dinámica de la vlan del cliente, en este caso 192.168.232.11 como se muestra en la imagen.
Fragmento de código de depuración
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.
Esta sección proporciona información que puede utilizar para confirmar y resolver problemas de su configuración.
Para identificar y aislar los problemas en mdns, la configuración debe ser correcta y, por lo tanto, requiere pocas comprobaciones básicas.
Paso 1. mDNS debe estar habilitado globalmente.
Desde la GUI navegue Controller > mDNS como se muestra en la imagen.
Desde CLI:
show network summary (snippet)
mDNS snooping............................... Enabled
mDNS Query Interval......................... 15 minutes
Paso 2. Si utiliza un perfil mDNS personalizado, asegúrese de que se le agregan todos los servicios necesarios.
Paso 3. Asegúrese de que mDNS esté habilitado bajo el SSID y que el perfil mdns correcto esté asignado al SSID.
Desde la GUI, navegue hasta WLAN > WLAN ID > Advanced como se muestra en la imagen.
Desde CLI:
show wlan(snippet)
mDNS Status...................................... Enabled
mDNS Profile Name................................ default-mdns-profile
Paso 4. Verifique si el proveedor de servicio mDNS aparece en los servicios de dominios mDNS. Esto enumera los nombres de dominio (Apple TV, airprinter) de los servicios que han sido almacenados en caché por el WLC.
Desde la GUI, navegue hasta Controller > mDNS > mDNS Domain Name IP> Summary como se muestra en la imagen.
Desde 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
Paso 5. Compruebe si el proveedor de servicios también aparece en el propio servicio específico.
Desde la GUI, navegue hasta Controller > mDNS > General > Service Name como se muestra en la imagen.
Desde 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
Paso 6. Si el WLC no detecta el servicio, verifique si se aprenderá bajo el navegador bonjour (Controller>>mDNS>>mDNS>>mDNS browser). El buscador Bonjour es una memoria caché de todos los anuncios de servicio que se ven en el WLC y no se descubren porque la configuración no permite aprender. Puede agregar servicios seleccionándolos en el navegador Bonjour, lo que resulta práctico cuando prueba e implementa un nuevo servicio.
Paso 7. Estos son los comandos para depurar Bonjour:
debug mdns error enable
debug mdns message enable
debug mdns detail enable
debug mdns all enable
Bonjour browser y show mdns service not-learning también podrían utilizarse como una herramienta de depuración.
Paso 8. Como se mencionó anteriormente, si el WLC y el AP están en subredes diferentes y el modo de multidifusión AP está configurado en multicast, entonces asegúrese de que el ruteo multicast esté habilitado en la red cableada entre las dos vlan. En esta configuración, las vlan son vlan 1 (WLC) y vlan 231 (AP).
Conf t
!
interface Vlan1
ip pim sparse-dense-mode
!
interface Vlan231
ip pim sparse-dense-mode
!
Routing multidifusión en juego:
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
Junto con estas listas de verificación, la clave es entender el flujo de paquetes cuando mDNS se ejecuta en el WLC. El flujo de paquetes y las depuraciones ayudan a profundizar en las áreas donde los comandos de verificación anteriores son insuficientes.