Cisco Virtual Wireless LAN Contorller (vWLC) に Aironetアクセスポイントを帰属させる

## はじめに
このエントリでは構築済みのWLCにアクセスポイントを帰属させるまでを記載します。
WLCそのものの構築は関連エントリで記載します。

このエントリや関連エントリでは、帰属という単語を、「WLCの管理下に置き、WLCで制御できるようにすること。」
「PCなどの端末をAPに接続すること。」の意味で使用しています。ジョイン（JOIN）ということもあります。
言葉がブレブレですみませんです。

## 関連するエントリ
[Cisco Virtual Wireless LAN Contorller (vWLC) を OVAからデプロイして使えるようにするまで](https://qiita.com/haruca_tech/items/db229fce0f6ec217f9e9)


## 対象機器および環境

### 検証機器
* Cisco Virtual Wireless Controller (vWLC) 
* AIR-CAP3502I-Q-K9
* AIR-LAP1142N-P-K9


### ネットワーク情報
|項目|値|付与|
|:-:|:-:|:-:|
|WLCアドレス|10.254.10.201|-|
|APアドレス|10.1.10.33-62/24|DHCP|


## このエントリを読むとできること
* Cisco 集中管理型 アクセスポイントを
* 構築済みのWLCに帰属させて
* WLCから制御できるようになる。

はず。


## 公式ドキュメントなど

Cisco集中管理型アクセスポイント（以下AP）が起動してからWLCへ帰属するまでの仕掛けは公式が詳しいです。
https://www.cisco.com/c/ja_jp/support/docs/wireless-mobility/wireless-lan-wlan/70333-lap-registration.html#anc6

今回は、DHCPオプション43による自動設定でやってみます。
https://www.cisco.com/c/ja_jp/support/docs/wireless-mobility/wireless-lan-wlan/97066-dhcp-option-43-00.html


## 設定方法

### DHCPサーバの設定
Linuxに構築したDHCPサーバで以下の記述を追加します。

また、option句をグローバルな位置に置いているので、ふつーのPCなどにも
Option43が割り当てられますが、端末で無視するので、特に問題ないです。


```
# vi /etc/dhcp/dhcpd.conf
-----8<-----snip-----8<-----
option space Cisco_LWAPP_AP;
option Cisco_LWAPP_AP.server-address code 241 = array of ip-address;
option Cisco_LWAPP_AP.server-address 10.254.10.201;

class "Cisco AP c3500" {
  match if option vendor-class-identifier = "Cisco AP c3500";
  option vendor-class-identifier "Cisco AP c3500";
  vendor-option-space Cisco_LWAPP_AP;
}

class "Cisco-AP-c1140" {
  match if option vendor-class-identifier = "Cisco AP c1140";
  option vendor-class-identifier "Cisco AP c1140";
  vendor-option-space Cisco_LWAPP_AP;
}

# HeadQuarter 1F APs
subnet 10.1.10.0 netmask 255.255.255.0 {
  range dynamic-bootp 10.1.10.33 10.1.10.62;
  option subnet-mask 255.255.255.0;
  option routers 10.1.10.254;
}
-----8<-----snip-----8<-----
# systemctl restart dhcpd
```

AP3500/AP1140シリーズ以外の機器を利用する場合のベンダークラス識別子（VCI）は上記リンクに記載。


## 動作検証

### APを起動させる
電源アダプタを接続、PoEスイッチに接続、などでAPに給電する。
と、ずらずらとログが流れて、最終的に以下のようなログが出る。

```
（NVRAMから設定探し中：LWAPPコンフィグ）
*Jan  1 04:46:01.261: %LWAPP-3-CLIENTERRORLOG: Load nvram:/lwapp_ap.cfg config failed, trying backup...
*Jan  1 04:46:01.261: %LWAPP-3-CLIENTERRORLOG: Load nvram:/lwapp_ap.cfg.bak config failed...

（DHCPで自機のアドレス取得）
*Jan  1 04:46:10.566: %DHCP-6-ADDRESS_ASSIGN: Interface BVI1 assigned DHCP address 10.1.10.34, mask 255.255.255.0, hostname APc464.132c.01e9

（NVRAMから設定探し中：CAPWAPコンフィグ）
%Error opening flash:/capwap-saved-config (No such file or directory)
%Error opening flash:/capwap-saved-config-bak (No such file or directory)

（DNSでWLCを探し中）
Translating "CISCO-CAPWAP-CONTROLLER.prosper2.net"...domain server (10.254.10.231)

（DHCPオプション43でWLCアドレスをゲット）
*Jan  1 04:46:45.524: %CAPWAP-5-DHCP_OPTION_43: Controller address 10.254.10.201 obtained through DHCP

（WLCにJoinRequestを投げてWLCに帰属した）
*Jan  1 04:49:34.407: %CAPWAP-5-SENDJOIN: sending Join Request to 10.254.10.201
*Jan  1 04:49:35.407: %CAPWAP-5-JOINEDCONTROLLER: AP has joined controller VMwlc01
```

これでAPがWLCに帰属された。
そのほかのログもいろいろ出力されるので、最後に貼り付けてます。

### GUIでAPがWLCにJoinしたことを確認する。
ログイン後の上部メニュの「WIRELESS」をクリックすると、帰属AP一覧が表示される。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/334782/2757d35d-bd65-7939-c365-6630f0b8e22d.png)


### CLIでAPがWLCにJoinしたことを確認する。
`show ap summary` でAP一覧を確認。

```
(Cisco Controller) >show ap summary

Number of APs.................................... 2

Global AP User Name.............................. Not Configured
Global AP Dot1x User Name........................ Not Configured

AP Name             Slots  AP Model              Ethernet MAC       Location          Country     IP Address       Clients   DSE Location
------------------  -----  --------------------  -----------------  ----------------  ----------  ---------------  --------  --------------
APhq01-02F01         2     AIR-CAP3502I-Q-K9     c4:64:13:38:c5:a2  default location  J4          10.1.20.33         2       [0 ,0 ,0 ]
APc464.132c.01e9     2     AIR-CAP3502I-Q-K9     c4:64:13:2c:01:e9  default location  J4          10.1.10.34         0       [0 ,0 ,0 ]

(Cisco Controller) >
```


## トラブルシュート
APがWLCに帰属しないよ！そんなときに確認すること。
だいたい下記公式を見れば解決します。
https://www.cisco.com/c/ja_jp/support/docs/wireless/5500-series-wireless-controllers/119286-lap-notjoin-wlc-tshoot.html

自身でやりがちなミスはライセンスや時刻のものが多かったです。

### ライセンスが有効化されていない
評価版ライセンスがあっても、有効化しないとAPがJoinしてくれません。

### 以前の古い設定が消し切れていない
古い帰属先のWLC設定が残っていると、新しいWLCアドレスをDHCPで配布しても、NVRAMを見に行ってしまって新たなWLCに帰属してくれないことがありました。WLCのバージョンやタイミングなどによって、発生したりしなかったりですが、確実に削除しておくとよいです。

### 時刻があってない
APの証明書（MIC）をつかってWLCにJoinRequestしますが、大胆に時刻がずれていると、帰属してくれません。
ESXiがUTCで動作していて、その時刻をWLCゲストのBIOS上のJSTと取り違えてしまうと、９時間ずれます。

### FWで必要なポートがあいてない
CAPWAPでは5246/udpと5247/udpが必要です。



## そのほか

### 自律APの集中管理APへの変換方法

```
ap>en
Password:
ap#archive download-sw /force-reload /overwrite ftp://USER:PWD@192.168.10.211/home/public/backup/images/Cisco/ap/c1140-rcvk9w8-tar.152-2.JB.tar
examining image...
Loading home/public/backup/images/Cisco/ap/c1140-rcvk9w8-tar.152-2.JB.tar
extracting info (273 bytes)!
Image info:
    Version Suffix: rcvk9w8-
    Image Name: c1140-rcvk9w8-mx
    Version Directory: c1140-rcvk9w8-mx
    Ios Image Size: 6676992
    Total Image Size: 6676992
    Image Feature: WIRELESS LAN|LWAPP|RECOVERY
    Image Family: C1140
    Wireless Switch Management Version: 7.4.1.37
Extracting files...
c1140-rcvk9w8-mx/ (directory) 0 (bytes)
extracting c1140-rcvk9w8-mx/c1140-rcvk9w8-mx (6672955 bytes)!!!!!!!!!!!!!!!!!!!!!!!!!!
extracting c1140-rcvk9w8-mx/info (273 bytes)
extracting info.ver (273 bytes)
[OK - 6686720/4096 bytes]

Deleting current version: flash:/c1140-k9w7-mx.124-21a.JA1...done.
New software image installed in flash:/c1140-rcvk9w8-mx
Configuring system to use new image...done.
Requested system reload in progress...
archive download: takes 79 seconds

*Mar  1 01:39:18.693: %SYS-5-RELOAD: Reload requested by Exec. Reload Reason: Reason unspecified. [#h96ceb21]
using  eeprom values
```

工場出荷時は、ユーザ名／パスワードは、Cisco/Cisco（大文字小文字区別）となっているものが多いようです。

で、再起動すると、集中管理型APのファームで起動する。


### APのリセット方法（設定削除）

コンソールから以下コマンドを発行する。

```
clear capwap ap hostname
clear capwap ap ip address
clear capwap ap ip default-gateway
clear capwap ap controller ip address
clear capwap private-config
test capwap erase
test capwap restart
reload
```


## おわりに

### 感想
APがJoinしてくれない原因はいろいろありますが、コンソールのエラーメッセージが頼りなので、コンソールケーブルを準備しましょう。

### 出典
https://www.cisco.com/c/ja_jp/support/docs/wireless-mobility/wireless-lan-wlan/70333-lap-registration.html#anc6
https://www.cisco.com/c/ja_jp/support/docs/wireless/5500-series-wireless-controllers/119286-lap-notjoin-wlc-tshoot.html
https://www.cisco.com/c/ja_jp/support/docs/wireless-mobility/wireless-lan-wlan/97066-dhcp-option-43-00.html


## 補足という名の蛇足


### 機器起動時のログ全文

このあたりはお馴染みの機器起動時のログ

```
This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.

A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
export@cisco.com.

cisco AIR-CAP3502I-Q-K9 (PowerPC460exr) processor (revision A0) with 98294K/32768K bytes of memory.
Processor board ID FGL1553S27L
PowerPC460exr CPU at 666Mhz, revision number 0x18A8
Last reset from reload
LWAPP image version 8.2.170.0
1 Gigabit Ethernet interface
2 802.11 Radios

32K bytes of flash-simulated non-volatile configuration memory.
Base ethernet MAC Address: C4:64:13:2C:01:E9
Part Number                          : 73-12175-05
PCB Serial Number                    : FOC15504B69
Top Assembly Part Number             : 800-32891-01
Top Assembly Serial Number           : FGL1553S27L
Top Revision Number                  : A0
Product/Model Number                 : AIR-CAP3502I-Q-K9
% Please define a domain-name first.


Press RETURN to get started!


*Mar  1 00:00:13.045: %SOAP_FIPS-2-SELF_TEST_IOS_SUCCESS: IOS crypto FIPS self test passed (15)
*Mar  1 00:00:13.045: *** CRASH_LOG = YES

*Mar  1 00:00:13.045: 64bit PCIE devices
*Mar  1 00:00:14.152: %SOAP_FIPS-2-SELF_TEST_HW_SUCCESS: HW crypto FIPS self test passed (1-6)
*Mar  1 00:00:14.152: Security Core found.

*Mar  1 00:00:14.165: Registering HW DTLS
Base Ethernet MAC address: C4:64:13:2C:01:E9

*Mar  1 00:00:16.329: %LINK-6-UPDOWN: Interface GigabitEthernet0, changed state to up
*Mar  1 00:00:17.678: %SOAP_FIPS-2-SELF_TEST_RAD_SUCCESS: RADIO crypto FIPS self test passed on interface Dot11Radio 0 (4)
*Mar  1 00:00:17.685: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0, changed state to up
*Mar  1 00:00:17.804: loading Power Tables from ram:/Z2.bin. Class = P
*Mar  1 00:00:17.804:  record size of 2ss: 404 read_ptr: 27D8C38

*Mar  1 00:00:21.004: %SOAP_FIPS-2-SELF_TEST_RAD_SUCCESS: RADIO crypto FIPS self test passed on interface Dot11Radio 1 (4)
*Mar  1 00:00:21.051: loading Power Tables from ram:/Z5.bin. Class = P
*Mar  1 00:00:21.054:  record size of 2ss: 404 read_ptr: 27D8C38
```

AP内のNVRAMに設定があれば、それを使うが、見つからない。

```
*Mar  1 00:00:21.076: %LWAPP-3-CLIENTERRORLOG: Load nvram:/lwapp_ap.cfg config failed, trying backup...
*Mar  1 00:00:21.079: %LWAPP-3-CLIENTERRORLOG: Load nvram:/lwapp_ap.cfg.bak config failed...
*Jan  1 04:46:01.106: %SYS-5-RESTART: System restarted --
Cisco IOS Software, C3500 Software (AP3G1-K9W8-M), Version 15.3(3)JC15, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2018 by Cisco Systems, Inc.
Compiled Thu 07-Jun-18 16:12 by prod_rel_team
*Jan  1 04:46:01.106: %SNMP-5-COLDSTART: SNMP agent on host ap is undergoing a cold start
*Jan  1 04:46:01.261: %LWAPP-3-CLIENTERRORLOG: Load nvram:/lwapp_ap.cfg config failed, trying backup...
*Jan  1 04:46:01.261: %LWAPP-3-CLIENTERRORLOG: Load nvram:/lwapp_ap.cfg.bak config failed...
*Jan  1 04:46:01.295: %LINK-6-UPDOWN: Interface Dot11Radio0, changed state to up
*Jan  1 04:46:01.456: %SSH-5-ENABLED: SSH 2.0 has been enabled
*Jan  1 04:46:01.456: %LINK-6-UPDOWN: Interface Dot11Radio1, changed state to uplwapp_crypto_init: MIC Present and Parsed Successfully

*Jan  1 04:46:02.192: %LINEPROTO-5-UPDOWN: Line protocol on Interface BVI1, changed state to up
```

DHCPでアドレスとホスト名を自動取得してみる。（まだOption43はでてこない）

```
*Jan  1 04:46:10.566: %DHCP-6-ADDRESS_ASSIGN: Interface BVI1 assigned DHCP address 10.1.10.34, mask 255.255.255.0, hostname APc464.132c.01e9

*Jan  1 04:46:18.606: Currently running a Release Image
validate_sha2_block: Failed to get certificate chain
*Jan  1 04:46:18.628: Using SHA-1 signed certificate for image signing validation.%Default route without gateway, if not a point-to-point interface, may impact performance
*Jan  1 04:46:24.391: AP image integrity check PASSED

*Jan  1 04:46:24.445: Non-recovery image. PNP Not required.

*Jan  1 04:46:24.460:  validate_sha2_block:No SHA2 Block present on this AP.

*Jan  1 04:46:24.492: %LINK-5-CHANGED: Interface Dot11Radio0, changed state to reset
*Jan  1 04:46:24.492: %LINK-5-CHANGED: Interface Dot11Radio1, changed state to reset
```

またNVRAM見に行ってる。今度はLWAPPじゃなくてCAPWAPのコンフィグを探してる。

```
%Error opening flash:/capwap-saved-config (No such file or directory)
%Error opening flash:/capwap-saved-config-bak (No such file or directory)
*Jan  1 04:46:34.508: %SYS-6-LOGGINGHOST_STARTSTOP: Logging to host 255.255.255.255 port 0 CLI Request Triggered
*Jan  1 04:46:35.508: %SYS-6-LOGGINGHOST_STARTSTOP: Logging to host 255.255.255.255 port 514 started - CLI initiated%No matching route to delete
```

DNSで"CISCO-CAPWAP-CONTROLLER"を探している。が、これも見つからない。

```
Translating "CISCO-CAPWAP-CONTROLLER.prosper2.net"...domain server (10.254.10.231)
```

DHCPのオプション43でWLCのアドレスが見つかった。（10.254.10.201）

```
*Jan  1 04:46:45.524: %CAPWAP-5-DHCP_OPTION_43: Controller address 10.254.10.201 obtained through DHCP
```

そのほかのWLCアドレスが見つからなかったので、DHCPオプション43で見つけたアドレスに対してDTLSコネクションを要求
そのうえで、WLCにJoin Requestを送っている。

```
*Jan  1 04:49:29.000: %CAPWAP-5-DTLSREQSEND: DTLS connection request sent peer_ip: 10.254.10.201 peer_port: 5246
*Jan  1 04:49:29.405: %CAPWAP-5-DTLSREQSUCC: DTLS connection created sucessfully peer_ip: 10.254.10.201 peer_port: 5246
*Jan  1 04:49:29.405: %CAPWAP-5-SENDJOIN: sending Join Request to 10.254.10.201
*Jan  1 04:49:34.407: %CAPWAP-5-SENDJOIN: sending Join Request to 10.254.10.201
*Jan  1 04:49:35.407: %CAPWAP-5-JOINEDCONTROLLER: AP has joined controller VMwlc01
*Jan  1 04:49:35.407: %DTLS-5-SEND_ALERT: Send FATAL : Close notify Alert to 10.254.10.201:5246
*Jan  1 04:49:35.499: %LINK-5-CHANGED: Interface Dot11Radio0, changed state to administratively down
*Jan  1 04:49:35.499: %LINK-5-CHANGED: Interface Dot11Radio1, changed state to administratively down
*Jan  1 04:49:35.508: %LINK-5-CHANGED: Interface Dot11Radio0, changed state to reset
*Jan  1 04:49:36.150: %LINK-5-CHANGED: Interface Dot11Radio1, changed state to reset
*Jan  1 04:49:46.000: %CAPWAP-5-DTLSREQSEND: DTLS connection request sent peer_ip: 10.254.10.201 peer_port: 5246
*Jan  1 04:49:46.408: %CAPWAP-5-DTLSREQSUCC: DTLS connection created sucessfully peer_ip: 10.254.10.201 peer_port: 5246
*Jan  1 04:49:46.412: %CAPWAP-5-SENDJOIN: sending Join Request to 10.254.10.201
*Jan  1 04:49:51.413: %CAPWAP-5-SENDJOIN: sending Join Request to 10.254.10.201
*Jan  1 04:49:52.282: %CAPWAP-5-JOINEDCONTROLLER: AP has joined controller VMwlc01
```

5GHz帯確認のためのDFSが動作している

```
*Jan  1 04:49:52.989: %WIDS-6-ENABLED: IDS Signature is loaded and enabled
*Jan  1 04:51:04.572: %CDP_PD-4-POWER_OK: Full power - NON_CISCO-NO_CDP_RECEIVED inline power source
*Jan  1 04:51:05.664: %LINK-6-UPDOWN: Interface Dot11Radio0, changed state to up
*Jan  1 04:51:06.664: %LINEPROTO-5-UPDOWN: Line protocol on Interface Dot11Radio0, changed state to up
*Jan  1 04:51:06.756: %DOT11-6-DFS_SCAN_START: DFS: Scanning frequency 5620 MHz for 60 seconds.
*Jan  1 04:51:06.759: %LINK-6-UPDOWN: Interface Dot11Radio1, changed state to up
*Jan  1 04:51:07.759: %LINEPROTO-5-UPDOWN: Line protocol on Interface Dot11Radio1, changed state to up
*Jan  1 04:51:27.489: %CLEANAIR-6-STATE: Slot 0 disabled
*Jan  1 04:51:27.489: %CLEANAIR-6-STATE: Slot 1 disabled
*Jan  1 04:52:06.571: %DOT11-6-DFS_SCAN_COMPLETE: DFS scan complete on frequency 5620 MHz
```