Sommario

Introduzione

Prerequisiti

Requisiti

Componenti usati

Premesse

Configurazione

Esempio di rete

Flusso di pacchetti con debug

Passaggio 1. Quando si abilitano gli mDNS sul WLC a livello globale

Passaggio 2. WLC memorizza nella cache i servizi Bonjour (annuncio Apple TV )

Passaggio 3. WLC resta in ascolto di query client per i servizi

Passaggio 4. WLC invia risposte unicast a query client per servizi Bonjour

Verifica e risoluzione dei problemi

Introduzione

Questo documento descrive l'implementazione del protocollo Bonjour sul controller wireless e fornisce linee guida per la risoluzione dei problemi.

Prerequisiti

Requisiti

Cisco raccomanda la conoscenza dei seguenti argomenti:

- Conoscenze base del protocollo Bonjour

- Conoscenze base di come configurare mDNS su WLC

- Conoscenze base di routing multicast

Componenti usati

Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:

- AIR-CT2504-K9 WLC, 8.2.141.0

- WS-C350CX-8PC-S

- AIR-CAP3702I-E-K9

- Apple TV

- Iphone 5, 10.2

Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.

Premesse

Il protocollo Bonjour è un protocollo Apple Service Discovery che individua dispositivi e servizi su una rete locale utilizzando record di servizio multicast Domain Name System (mDNS). Il protocollo Bonjour opera sugli annunci e sulle richieste di assistenza. Ogni query o annuncio viene inviato all'indirizzo multicast Bonjour ipv4 224.0.0.251 (ipv6 FF02::FB). Questo protocollo utilizza mDNS sulla porta UDP 5353.

L'indirizzo utilizzato dal protocollo Bonjour è un indirizzo multicast locale rispetto al collegamento e pertanto viene inoltrato solo alla rete L2 locale. I router non possono utilizzare il routing multicast per reindirizzare il traffico perché il valore TTL (Time to Live) è impostato su 1. Ciò significa che tutti i fornitori di servizi/le fonti (che pubblicizzano il servizio) e i clienti Bonjour (che chiedono il servizio) dovevano trovarsi nella stessa subnet. Questo porta a problemi di scalabilità.

Per risolvere questo problema, il controller WLC (Cisco Wireless LAN Controller) funziona come gateway Bonjour. Il WLC ascolta i servizi Bonjour, memorizza nella cache questi annunci Bonjour (AirPlay, AirPrint e così via) dalla fonte/host. Ad esempio, Apple TV e risponde ai clienti Bonjour quando chiedono/richiedono un servizio. In questo modo è possibile avere le origini e i client in subnet diverse.

Configurazione

Esempio di rete

Flusso di pacchetti con debug

Quando il protocollo mDNS viene eseguito su un WLC Cisco, è necessario eseguire quattro passaggi di base. Di seguito sono descritte le operazioni da eseguire:

Passaggio 1. Quando si abilitano gli mDNS sul WLC a livello globale

WLC resta in ascolto di questi servizi predefiniti se non si dispone di un profilo mDNS personalizzato creato come mostrato nell'immagine.

A ognuno di questi servizi è associata una stringa di servizio. Le stringhe del servizio vengono utilizzate per associare le istanze del servizio alle query del servizio. Un tipo di servizio contiene sempre il nome del servizio e il protocollo. Può inoltre contenere uno o più identificatori di sottotipo. Il servizio AppleTV utilizza: _airplay._tcp.local.

Quando mDNS è attivato a livello globale, il controller invia query mDNS a 224.0.0.251 per tutti i servizi su reti cablate (di gestione e interfacce dinamiche) e wireless.

In questa acquisizione alla porta dello switch WLC, i pacchetti 80, 81 e 82 mostrano che il WLC invia una query alla porta 224.0.0.251 sulla rete cablata con l'IP di origine della gestione (10.48.39.142) e le interfacce dinamiche (192.168.232.11 e 192.168.239.8) come mostrato nell'immagine.

Il pacchetto 83 mostra che WLC invia una query tramite il wireless. Il pacchetto interno mostra la query WLC su 224.0.0.251 dall'interfaccia di gestione. Poiché la query si trova su una rete wireless, l'intestazione capwap viene aggiunta al pacchetto con l'IP di origine esterna ancora da gestire, ma la destinazione è il protocollo IP 239.100.100.100 multicast, come mostrato nell'immagine.

Ora, da dove viene questo multicast IP 239.100.100.100? Sul WLC, la modalità multicast Access Point (AP) (controller > generale) è stata impostata su multicast con indirizzo di gruppo multicast come 239.100.100.100 (è solo un esempio, qualsiasi ip nell'intervallo 239). Gli access point si uniscono a questo gruppo multicast e lo ascoltano. Il WLC inoltra la query a questo gruppo, gli AP la ricevono e la inviano via etere. L'indirizzo 239.100.100.100 (non è statico, ecco quello configurato nell'esempio successivo) viene visualizzato solo nell'intestazione capwap tra il WLC e gli AP. I client wireless non ne vedono mai niente (ma possono vedere il pacchetto mdns originale interno), come mostrato nell'immagine.

In questa configurazione, il WLC è uno switch 2504 nella vlan 1 e l'AP è nella vlan 231. Poiché i dispositivi si trovano in vlan diverse, per il corretto funzionamento del routing multicast è necessario abilitare il routing multicast per la vlan 1 e la vlan 239 su cavo.

Nota: se il routing multicast non è abilitato sul cavo per la vlan di gestione WLC e AP, la modalità multicast AP deve essere impostata su unicast. In questa modalità, il controller invia in unicast ogni pacchetto multicast a ogni access point associato al controller. Questa modalità è molto inefficiente e non è consigliata.

Questa acquisizione è il pacchetto di query nel dettaglio, come mostrato nell'immagine.

I debug riflettono la stessa cosa che si vede nelle clip. Lo snippet di codice mostra solo le query dell'interfaccia di gestione.

(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

Passaggio 2. WLC memorizza nella cache i servizi Bonjour (annuncio Apple TV )

In questo pacchetto, la Apple TV ( 192.168.239.37 ) invia annunci pubblicitari a 224.0.0.251 . Poiché in questo caso Apple TV è wireless , è possibile vedere la pubblicità inviata tramite capwap. Il WLC prende nota solo una volta della risposta del servizio mDNS, tuttavia, quella voce della cache ha un TTL e i pacchetti keepalive sono necessari per mantenerla, come mostrato nell'immagine.

La risposta dettagliata da Apple TV è come mostrato nell'immagine.

Questi debug mostrano Apple TV in risposta alle domande del WLC . In questo scenario, Apple TV ha risposto con 21 servizi, di cui solo il servizio Airplay è di 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

Passaggio 3. WLC resta in ascolto di query client per i servizi

In seguito, in qualsiasi momento, il client wireless (192.168.232.98) invia una query che richiede il servizio di airplay via etere (in genere quando il client apre un'applicazione che supporta l'airplay) come mostrato nell'immagine.

*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

Passaggio 4. WLC invia risposte unicast a query client per servizi Bonjour

Il WLC risponde con il servizio memorizzato nella cache Wireless Team (4)._airplay._tcp.local. L'IP di origine del pacchetto interno è l'interfaccia dinamica della vlan client, in questo caso 192.168.232.11, come mostrato nell'immagine.

Frammento di codice da debug

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 e risoluzione dei problemi

Le informazioni contenute in questa sezione permettono di verificare e risolvere i problemi relativi alla configurazione.

Per identificare e isolare i problemi in MDS è necessario che la configurazione sia corretta e che siano pertanto necessari pochi controlli di base.

Passaggio 1. mDNS deve essere abilitato globalmente.

Dalla GUI, selezionare Controller > mDNS come mostrato nell'immagine.

Dalla CLI:

show network summary (snippet)

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

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

Passaggio 2. Se si utilizza un profilo mDNS personalizzato, assicurarsi che al profilo siano aggiunti tutti i servizi necessari.

Passaggio 3. Verificare che mDNS sia abilitato in SSID e che il profilo DNS corretto sia mappato a SSID.

Dalla GUI, selezionare WLAN > ID WLAN > Avanzate, come mostrato nell'immagine.

Dalla CLI:

show wlan

(snippet)

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

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

Passaggio 4. Verificare se il provider di servizi mDNS è elencato nei servizi dei domini mDNS. In questo elenco sono elencati i nomi di dominio ( Apple TV, airprinters) dei servizi che sono stati memorizzati nella cache dal WLC.

Dalla GUI, selezionare Controller > mDNS > mDNS Domain Name IP> Summary (Controller > mDNS > Nome dominio mDNS IP> Riepilogo) come mostrato nell'immagine.

Dalla 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

Passaggio 5. Verificare se il provider di servizi è elencato anche nel servizio specifico.

Dalla GUI, selezionare Controller > mDNS > General > Service Name (Controller > mDNS > Generale > Nome servizio), come mostrato nell'immagine.

Dalla 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

Passaggio 6. Se il servizio non viene rilevato dal WLC, verificare se deve essere appreso dal browser bonjour (Controller>>mDNS>>mDNS). Il browser Bonjour è una cache di tutti gli annunci di servizio visualizzati nel WLC e non rilevati perché la configurazione non ha consentito di apprendere. È possibile selezionare e aggiungere servizi dal browser Bonjour, questo è utile quando si prova e implementa un nuovo servizio.

Passaggio 7. Di seguito sono riportati i comandi per eseguire il debug di Bonjour:

debug mdns error enable

debug mdns message enable

debug mdns detail enable

debug mdns all enable

È possibile utilizzare come strumento di debug anche il browser Bonjour e show mdns service not-learnt.

Passaggio 8. Come accennato in precedenza, se WLC e AP si trovano in subnet diverse e la modalità multicast dell'access point è impostata su multicast, verificare che il routing multicast sia abilitato sulla rete cablata tra le due vlan. In questa configurazione, le vlan sono la vlan 1 (WLC) e la vlan 231 (AP).

Conf t

!

interface Vlan1

ip pim sparse-dense-mode

!

interface Vlan231

ip pim sparse-dense-mode

!

Routing multicast durante la riproduzione:

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

Oltre a queste liste di controllo, la chiave è capire il flusso del pacchetto quando mDNS viene eseguito su WLC. Il flusso del pacchetto e i debug consentono di approfondire le aree in cui il

i comandi di verifica non sono sufficienti.