소개
이 문서에서는 무선 컨트롤러에서 Bonjour 프로토콜의 구현에 대해 설명하고 문제 해결을 위한 지침을 제공합니다.
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- Bonjour Protocol에 대한 기본 지식
- WLC에서 mDNS를 구성하는 방법에 대한 기본 지식
- 멀티캐스트 라우팅에 대한 기본 지식
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- AIR-CT2504-K9 WLC, 8.2.141.0
- WS-C3560CX-8PC-S
- AIR-CAP3702I-E-K9
- 애플 TV
- Iphone5s, 10.2
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
Bonjour 프로토콜은 mDNS(Multicast Domain Name System) 서비스 레코드를 사용하여 로컬 네트워크에서 디바이스 및 서비스를 찾는 Apple 서비스 검색 프로토콜입니다. Bonjour 프로토콜은 서비스 공지 및 서비스 쿼리에서 작동합니다. 각 쿼리 또는 광고는 Bonjour 멀티캐스트 주소 ipv4 224.0.0.251(ipv6 FF02::FB)로 전송됩니다. 이 프로토콜은 UDP 포트 5353에서 mDNS를 사용합니다.
Bonjour 프로토콜에서 사용하는 주소는 링크-로컬 멀티캐스트 주소이므로 로컬 L2 네트워크에만 전달됩니다. TTL(Time to Live)이 1로 설정되어 있으므로 라우터는 멀티캐스트 라우팅을 사용하여 트래픽을 리디렉션할 수 없습니다. 즉, 모든 서비스 공급자/소스(서비스 알림) 및 Bonjour 클라이언트(서비스 요청)가 동일한 서브넷에 있어야 했습니다. 이는 확장성 문제를 초래합니다.
이 문제를 해결하기 위해 Cisco WLC(Wireless LAN Controller)는 Bonjour Gateway의 역할을 합니다. WLC는 Bonjour 서비스를 수신 대기하고 소스/호스트에서 이러한 Bonjour 광고(AirPlay, AirPrint 등)를 캐시합니다. 예를 들어, Apple TV에서 서비스를 요청/요청할 때 Bonjour 고객에게 다시 응답합니다. 이렇게 하면 소스와 클라이언트가 서로 다른 서브넷에 있을 수 있습니다.
구성
네트워크 다이어그램
디버그가 있는 패킷 흐름
mDNS가 Cisco WLC에서 실행될 때 수행되는 기본 4단계가 있습니다. 이러한 단계는 다음과 같이 설명됩니다.
1단계. WLC에서 mDNS를 전역적으로 활성화하는 경우
이미지에 표시된 대로 사용자 지정된 mDNS 프로파일이 생성되지 않은 경우 WLC는 이러한 기본 서비스를 수신합니다.
각 서비스에는 연결된 서비스 문자열이 있습니다. 서비스 문자열은 서비스 인스턴스를 서비스 쿼리와 일치시키는 데 사용됩니다. 서비스 유형은 항상 서비스 이름 및 프로토콜을 포함합니다. 또한 하나 이상의 하위 유형 식별자를 포함할 수 있습니다. AppleTV 서비스에서는 _airplay._tcp.local을 사용합니다.
mDNS가 전체적으로 활성화되면 컨트롤러는 유선(관리 및 동적 인터페이스) 및 무선 네트워크의 모든 서비스에 대해 mDNS 쿼리를 224.0.0.251로 전송합니다.
이 캡처에서 WLC 스위치 포트에서 패킷 80, 81 및 82는 WLC가 관리 소스 IP(10.48.39.142) 및 동적 인터페이스(192.168.232.11 및 192.168.239.8)를 사용하여 유선 네트워크를 통해 224.0.0.251에 쿼리를 전송하는 것을 보여줍니다.
패킷 83은 WLC가 무선 연결을 통해 쿼리를 전송하는 것을 보여줍니다. 내부 패킷은 관리 인터페이스에서 224.0.0.251에 대한 WLC 쿼리를 표시합니다. 이 쿼리는 무선으로 실행되므로 외부 소스 IP가 관리 IP인 패킷에 capwap 헤더가 추가되지만, 이미지에 표시된 대로 대상은 멀티캐스트 IP 239.100.100.100입니다.
이제 이 멀티캐스트 IP 239.100.100.100은 어디서 오는 것일까요? WLC에서 AP(Access Point) 멀티캐스트 모드(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에 대해 멀티캐스트 라우팅을 활성화해야 합니다.
참고: wired for wlc and AP management vlan에서 멀티캐스트 라우팅이 활성화되지 않은 경우, AP 멀티캐스트 모드를 unicast로 설정해야 합니다. 이 모드에서 컨트롤러는 컨트롤러에 연결된 모든 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 Services ( Apple TV 광고 )
이 패킷에서 Apple TV( 192.168.239.37 )는 224.0.0.251에 광고를 전송합니다. 이 경우 Apple TV는 무선이므로 capwap을 통해 전송된 광고를 볼 수 있습니다. WLC는 mDNS 서비스 응답을 한 번만 기록하지만, 이미지에 표시된 것처럼 캐시 항목에 TTL 및 keepalive를 유지해야 합니다.
애플TV의 세밀한 반응이 그림과 같다.
이러한 디버그는 WLC의 쿼리에 응답하는 Apple TV를 보여줍니다. 이 시나리오에서는 애플TV가 21개 서비스로 대응했는데 이 중 에어플레이 서비스만 관심사가 됐다.
*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가 가능한 애플리케이션을 열 때).
*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 Services에 대한 클라이언트 쿼리에 유니캐스트 응답을 보냅니다.
WLC는 캐시된 서비스 무선 팀 (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단계. SSID에서 mDNS가 활성화되어 있고 올바른 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, 에어프린터)이 나열됩니다.
이미지에 표시된 대로 GUI에서 Controller(컨트롤러) > mDNS > mDNS Domain Name IP(mDNS 도메인 이름 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 멀티캐스트 모드가 멀티캐스트로 설정된 경우 두 VLAN 간의 유선 네트워크에서 멀티캐스트 라우팅이 활성화되어 있는지 확인합니다. 이 설정에서 vlan은 WLC(vlan 1) 및 AP(vlan 231)입니다.
Conf t
!
interface Vlan1
ip pim sparse-dense-mode
!
interface Vlan231
ip pim sparse-dense-mode
!
멀티캐스트 라우팅 플레이:
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에서 실행될 때 패킷 흐름을 파악하는 것입니다. 패킷 흐름과 디버그는 이전 데이터가 있는 영역을 심층적으로 탐색하는 데 도움이 됩니다
verification 명령이 부족합니다.