はじめに
このドキュメントでは、ワイヤレスコントローラでの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は、図に示すように、WLCが管理(10.48.39.142)の送信元IPとダイナミックインターフェイス(192.168.232.11と192.168.239.8)を使用して有線ネットワーク上で224.0.0.0.251に1クエリを送信します。
パケット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はワイヤレス(AP接続)であるため、CAPWAP経由で送信されたアドバタイズメントを確認できます。WLCはmDNSサービスの応答を1回だけ確認しますが、キャッシュエントリにはTTLがあり、図のようにキープアライブを維持する必要があります。
Apple TVからの詳細な応答は、図に示すとおりです。
次のデバッグは、WLCのクエリーに対するApple TVの応答を示しています(WLCが応答するIPアドレスを示しています)。このシナリオでは、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 <ID> (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上で実行されるときのパケットフローを理解することです。パケットフローとデバッグは、パケットフローが最も重要なトラフィックが
検証コマンドが不足している。