Contents

Introduction

Prerequisites

Requirements

Componentes Utilizados

Informações de Apoio

Configurar

Diagrama de Rede

Fluxo de pacotes com depurações

Etapa 1. Quando você habilita globalmente o mDNS no WLC

Etapa 2. A WLC armazena em cache os serviços Bonjour (anúncio de Apple TV )

Etapa 3. A WLC ouve as consultas do cliente para serviços

Etapa 4. WLC envia resposta unicast a consultas de clientes para serviços Bonjour

Verificação e Troubleshooting

Introduction

Este documento descreve a implementação do protocolo Bonjour no controlador sem fio e fornece diretrizes para ajudar a solucionar problemas.

Prerequisites

Requirements

A Cisco recomenda que você tenha conhecimento destes tópicos:

- Conhecimento básico do Protocolo Bonjour

- Conhecimento básico de como configurar mDNS em WLC

- Conhecimento básico de roteamento multicast

Componentes Utilizados

As informações neste documento são baseadas nestas versões de software e hardware:

- AIR-CT2504-K9 WLC, 8.2.141.0

- WS-C3560CX-8PC-S

- AIR-CAP3702I-E-K9

- Apple TV

- Iphone5s, 10.2

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. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.

Informações de Apoio

O protocolo Bonjour é um protocolo de descoberta de serviços da Apple que localiza dispositivos e serviços em uma rede local com o uso de registros de serviço multicast Domain Name System (mDNS). O protocolo Bonjour opera em anúncios de serviço e consultas de serviço. Cada consulta ou anúncio é enviado ao endereço multicast Bonjour ipv4 224.0.0.251 (ipv6 FF02::FB). Este protocolo usa mDNS na porta UDP 5353.

O endereço usado pelo protocolo Bonjour é o endereço multicast de link local e, portanto, é encaminhado somente para a rede L2 local. Os roteadores não podem usar o roteamento multicast para redirecionar o tráfego porque o tempo de vida (TTL) está definido como 1. Isso significava que todos os provedores de serviços/origens (que anunciam o serviço) e clientes Bonjour (que solicitam o serviço) tinham que estar na mesma sub-rede. Isso leva a problemas de escalabilidade.

Para resolver esse problema, o Cisco Wireless LAN Controller (WLC) atua como um Gateway Bonjour. A WLC escuta os serviços Bonjour, armazena em cache esses anúncios Bonjour (AirPlay, AirPrint, etc.) da origem/do host. Por exemplo, a Apple TV e responde aos clientes Bonjour quando eles pedem/solicitam um serviço. Dessa forma, você pode ter as origens e os clientes em sub-redes diferentes.

Configurar

Diagrama de Rede

Fluxo de pacotes com depurações

Há quatro etapas básicas que ocorrem quando o mDNS é executado em uma WLC da Cisco. Essas etapas são descritas a seguir:

Etapa 1. Quando você habilita globalmente o mDNS no WLC

A WLC escutará esses serviços padrão se você não tiver um perfil mDNS personalizado criado conforme mostrado na imagem.

Cada um desses serviços tem uma string de serviço associada a ele. As cadeias de caracteres de serviço são usadas para associar instâncias de serviço a consultas de serviço. Um tipo de serviço sempre contém o nome do serviço e o protocolo. Além disso, pode conter um ou mais identificadores de subtipo. O serviço AppleTV usa: _airplay._tcp.local.

Quando o mDNS é ativado globalmente, o controlador envia consultas mDNS para 224.0.0.251 para todos os serviços em redes com fio (gerenciamento e interfaces dinâmicas) e sem fio.

Nessa captura na porta do switch WLC, os pacotes 80, 81 e 82 mostram que a WLC envia uma consulta a 224.0.0.251 pela rede com fio com o IP de origem do gerenciamento (10.48.39.142) e interfaces dinâmicas (192.168.232.11 e 192.168.239.8) como mostrado na imagem.

O pacote 83 mostra que a WLC envia uma consulta pela rede sem fio. O pacote interno mostra a consulta WLC para 224.0.0.251 da interface de gerenciamento. Como essa consulta é feita pela rede sem fio, o cabeçalho capwap é adicionado ao pacote com o IP de origem externo ainda a ser o de gerenciamento, mas o destino é o IP multicast 239.100.100.100, como mostrado na imagem.

Agora, de onde vem esse IP multicast 239.100.100.100? Na WLC, o modo multicast do Access Point (AP) (controlador > geral) foi definido como multicast com o endereço de grupo multicast como 239.100.100.100 (é apenas um exemplo, qualquer ip no intervalo 239). Os APs se unem a esse grupo multicast e escutam nele. A WLC encaminha a consulta para esse grupo, os APs a recebem e a enviam pelo ar. O endereço 239.100.100.100 (isto não é estático, isto é o que você configurou no próximo exemplo) aparece somente no cabeçalho capwap entre o WLC e os APs, os clientes wireless nunca veem nada dele (mas podem ver o pacote mdns original interno) como mostrado na imagem.

Lembre-se de que nesta configuração a WLC é um 2504 na vlan 1 e o AP está na vlan 231. Como os dispositivos estão em vlans diferentes, você precisa ter o roteamento multicast ativado para vlan 1 e 239 na rede com fio para que isso funcione.

Observação: se o roteamento multicast não estiver habilitado na vlan de gerenciamento com fio para wlc e AP, o modo multicast do AP deverá ser definido como unicast. Neste modo, o controlador envia por unicast cada pacote multicast para cada AP associado ao controlador. Este modo é muito ineficiente e não é recomendado.

Essa captura é o pacote de consulta em detalhes como mostrado na imagem.

As depurações refletem a mesma coisa vista nas capturas. Aqui o fragmento mostra somente a consulta da interface de gerenciamento.

(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

Etapa 2. A WLC armazena em cache os serviços Bonjour (anúncio de Apple TV )

Nesse pacote, a Apple TV ( 192.168.239.37 ) envia anúncios para 224.0.0.251 . Como neste caso a Apple TV é sem fio , você pode ver o anúncio enviado sobre o capwap. A WLC observa apenas uma vez a resposta do serviço mDNS, no entanto, essa entrada de cache tem um TTL e manutenções de atividade são necessárias para mantê-la como mostrado na imagem.

A resposta detalhada da Apple TV é mostrada na imagem.

Essas depurações mostram a Apple TV em resposta às consultas da WLC . Neste cenário, a Apple TV respondeu com 21 serviços, dos quais apenas o serviço Airplay é de interesse.

*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

Etapa 3. A WLC ouve as consultas do cliente para serviços

Mais tarde, a qualquer momento, o cliente sem fio (192.168.232.98) envia uma consulta que solicita o serviço de reprodução ao ar (normalmente quando o cliente abre uma aplicação que seja compatível com reprodução ao ar) como mostrado na imagem.

*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

Etapa 4. WLC envia resposta unicast a consultas de clientes para serviços Bonjour

A WLC responde com o serviço em cache Wireless Team (4)._airplay._tcp.local. O IP origem do pacote interno é a interface dinâmica da vlan cliente, neste caso 192.168.232.11, como mostrado na imagem.

Trecho da depuração

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.

Verificação e Troubleshooting

Esta seção fornece informações que você pode usar para confirmar e solucionar problemas da sua configuração.

Para identificar e isolar problemas em mdns, é necessário que a configuração esteja correta e, portanto, requer poucas verificações básicas.

Etapa 1. O mDNS deve ser ativado globalmente.

Na GUI, navegue até Controller > mDNS conforme mostrado na imagem.

Do CLI:

show network summary (snippet)

mDNS snooping............................... Enabled

mDNS Query Interval......................... 15 minutes

Etapa 2. Se você usar um perfil mDNS personalizado, certifique-se de que todos os serviços necessários sejam adicionados a ele.

Etapa 3. Verifique se mDNS está habilitado no SSID e se o perfil mdns correto está mapeado para o SSID.

Na GUI, navegue para WLAN > WLAN ID > Advanced conforme mostrado na imagem.

Do CLI:

show wlan

(snippet)

mDNS Status...................................... Enabled

mDNS Profile Name................................ default-mdns-profile

Etapa 4. Verifique se o provedor de serviços mDNS está listado nos serviços de domínios mDNS. Isso lista os nomes de domínio ( Apple TV, airprinters) dos serviços que foram armazenados em cache pela WLC.

Na GUI, navegue até Controller > mDNS > mDNS Domain Name IP> Summary conforme mostrado na imagem.

Do 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

Etapa 5. Verifique se o provedor de serviços também está listado no próprio serviço específico.

Na GUI, navegue até Controller > mDNS > General > Service Name conforme mostrado na imagem.

Do 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

Etapa 6. Se o serviço não for descoberto pelo WLC, verifique se ele deve ser aprendido no navegador bonjour (Controller>>mDNS>>navegador mDNS). O navegador Bonjour é um cache de todos os anúncios de serviço vistos na WLC e não descobertos porque a configuração não permitiu aprender. Você pode selecionar e adicionar serviços do navegador Bonjour, o que é útil quando você testa e implementa um novo serviço.

Passo 7. Estes são os comandos para depurar Bonjour:

debug mdns error enable

debug mdns message enable

debug mdns detail enable

debug mdns all enable

O navegador Bonjour e o show mdns service not-learnt também podem ser usados como uma ferramenta de depuração.

Etapa 8. Como mencionado anteriormente, se a WLC e o AP estiverem em sub-redes diferentes e o modo multicast do AP estiver definido como multicast, verifique se o roteamento multicast está habilitado na rede com fio entre as duas vlans. Nessa configuração, as vlans são vlan 1 (WLC) e vlan 231 (AP).

Conf t

!

interface Vlan1

ip pim sparse-dense-mode

!

interface Vlan231

ip pim sparse-dense-mode

!

Roteamento multicast em jogo:

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 com essas listas de verificação, a chave é entender o fluxo de pacotes quando o mDNS é executado na WLC. O fluxo de pacotes e as depurações ajudam a mergulhar profundamente em áreas onde o

os comandos de verificação são insuficientes.