内容

はじめに

前提条件

要件

使用するコンポーネント

背景説明

設定

ネットワーク図

デバッグでのパケット フロー

ステップ 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 TV

- Iphone5s, 10.2

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな（デフォルト）設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。

背景説明

Bonjourプロトコルは、マルチキャストドメインネームシステム(mDNS)サービスレコードを使用してローカルネットワーク上のデバイスとサービスを検索するAppleサービス検出プロトコルです。Bonjour プロトコルは、サービス アナウンスメントとサービス クエリで動作します。各クエリやアドバタイズメントは、Bonjour マルチキャスト アドレス ipv4 224.0.0.251（ipv6 FF02::FB）に送信されます。このプロトコルは、UDP ポート 5353 で mDNS を使用します。

Bonjour プロトコルが使用するアドレスはリンクローカル マルチキャスト アドレスであるため、ローカル L2 ネットワークにのみ転送されます。存続可能時間（ttl）が 1 に設定されているため、ルータはマルチキャスト ルーティングを使用してトラフィックをリダイレクトできません。これは、（サービスをアドバタイズする）すべてのサービス プロバイダー/ソースと、（サービスを求める）Bonjour クライアントが同じサブネットに存在する必要があることを意味します。これはスケーラビリティの問題につながります。

この問題に対処するために、CiscoワイヤレスLANコントローラ(WLC)はBonjourゲートウェイとして機能します。WLCはBonjourサービスをリッスンし、これらのBonjourアドバタイズメント（AirPlay、AirPrintなど）をソース/ホストからキャッシュします。たとえば、Apple TVを使用し、サービスを要求するとBonjourクライアントに応答します。このようにして、異なるサブネットのソースとクライアントを使用できます。

設定

ネットワーク図

デバッグでのパケット フロー

Cisco WLCでmDNSを実行する場合は、基本的に4つの手順を実行します。これらの手順は次のとおりです。

ステップ 1：WLCでmDNSをグローバルに有効にする場合

カスタマイズされたmDNSプロファイルが作成されていない場合、次の図に示すように、WLCはこれらのデフォルトサービスをリッスンします。

これらの各サービスには、関連付けられたサービス文字列があります。サービス文字列は、サービス クエリにサービス インスタンスを照合するために使用されます。サービス タイプには、常にサービス名とプロトコルが含まれています。さらに、1つ以上のサブタイプ識別子を含めることができます。 AppleTVサービスは_airplay._tcp.localを使用します。

mdns がグローバルに有効な場合、コントローラは有線ネットワーク（管理およびダイナミック インターフェイス）とワイヤレス ネットワークのすべてのサービスについて 224.0.0.251 に mdns クエリを送信します。

WLCスイッチポートでのこのキャプチャでは、パケット80、81、および82は、図に示すように、管理(10.48.39.142)の送信元IPとダイナミックインターフェイス（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サービス応答を1回だけ確認しますが、そのキャッシュエントリにはTTLがあり、それを維持するにはキープアライブが必要です（次の図を参照）。

Apple TVからの詳細な応答は、図に示すとおりです。

次のデバッグは、WLCのクエリーに応答するApple TVを示します（WLCのIPアドレスは10.10.10.10.10.10.10）。このシナリオでは、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)は図に示すように、無線（通常はクライアントがairplay対応のアプリケーションを開く場合）でairplayサービスを要求するクエリを送信します。

*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：mdns が SSID で有効化され、正しい 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、airprinter）がリストされます。

図に示すように、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ブラウザとshow mdns service not-learntは、デバッグツールとしても使用できます。

ステップ 8：前述のように、WLCとAPが異なるサブネットにあり、APマルチキャストモードがマルチキャストに設定されている場合は、2つのVLAN間の有線ネットワークでマルチキャストルーティングが有効になっていることを確認します。この設定では、VLAN は VLAN 1（WLC）と VLAN 231（AP）です。

Conf t

!

interface Vlan1

ip pim sparse-dense-mode

!

interface Vlan231

ip pim sparse-dense-mode

!

Multicast routing at play :

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で実行される場合のパケットフローを理解することです。パケットフローとデバッグは、前の例で使用したエリアの詳細を

検証コマンドが不足しています。