ORF-NOC2018でハマったWLC・Aironetの巧妙な罠

この記事は[SFC-RG Advent Calendar 2018](https://qiita.com/advent-calendar/2018/sfc-rg)の15日目の記事です。

Cisco 3504 Wireless Controller（WLC）とCisco Airone 2800/3800（AP）で無線LAN環境を構築したときにドハマリしたことの忘備録です。

記憶が薄れつつあり、かつ機材は返却済みなので、その時の記憶とブックマーク残っていた参考資料をもとに書いています・・・
完全に忘却してしまうより、トラシューの取っ掛かりとしてあったほうがいいだろうと、どっか間違ってるところがひょっとしたらあるかもしれませんが、これ以上記憶が薄れないうちに記録を残しておきます。

Webの設定画面が開けるようになり、CountryCodeはも終えているのにAPが一向にWLCのコンソール上から確認できない（WLCにJOINしてこない）・40台APがあってすべて緑のランプが光っているのに28台しかJOINしてこないとかいったときに、ひょっとしたらこの記事が役に立つかもしれません。

## 前置き

毎年11月に開催されるSFCの研究室の文化祭、ORF（オープンリサーチフォーラム）が今年もつつがなく実施されました。東京ミッドタウンで行われるこのイベントですが、毎年NOC(ネットワークオペレーションセンター)チームによって出展者団体・来場者へインターネットアクセスが提供されています。
出店者・来場者の方が会場内最もよく目にするネットワーク機器はポールに吊るされた白い無線LANアクセスポイントだと思います。
こいつに今回は結構泣かされました。

ネットワーク機器は実際に会場内に設置・稼働させる前に、一旦別の場所で使用する予定のすべての機材を用意し、接続・設定を行ってネットワークがきちんと動作するかどうかを検証を行います。これをホットステージと呼びますが、2週間ほど前に3泊4日の日程で実施しました。
概ね順調に各ネットワーク機器の設定が無事完了していき、2日目の午後から無線LAN環境の構築が始まりました。それなりに手間がかかる無線LAN環境の構築ですが、ホットステージ開始直後から始めないのは、単純に有線のネットワークやサーバーの類ががある程度出来上がっていないとそもそも作業ができないからです。

会場全体のネットワークにおいて不要な機器というのはないのですが、無線LANは重要な機器・要素の一つです。なぜなら多くの端末は無線LANを介して会場のネットワークに接続するからです。
それが動かないとどうなるか、もちろん多くの機器が会場ネットワークに、そしてインターネットに接続できなくなってしまいます。

一向に無線LAN環境の構築が一向に完了せず、２日目の夜凄い長かった（遠い目）

## WLCにAPがまったくJOINしてこない（原因: DHCPで配信したデフォルトゲートウェイの設定）
　同一セグメント上にWLC、AP40台、DHCPサーバーを接続しました。192.168.251.0/24のプライベートIPアドレスを割り当てられ、WLCには192.168.251.2の固定アドレスを、APにはDHCPで192.168.251.5~253の中から任意のアドレスを割り振ることにしていました。
　ですが機器をすべて接続しても、APのLEDはカラフルに点滅を続け、WLCのコンソール上には1つのAPもJOINしてきませんでした。

　先輩がAPに直接コンソールケーブルを指し、DHCP関連のデバッグメッセージを表示させ始めたところから事態は動き始めました。

``` 
Cisco# debug dhcp message enable
```
(参考: [https://www.cisco.com/c/ja_jp/support/docs/wireless/4400-series-wireless-lan-controllers/110865-dhcp-wlc.html#anc7](https://www.cisco.com/c/ja_jp/support/docs/wireless/4400-series-wireless-lan-controllers/110865-dhcp-wlc.html#anc7))
多分これで合ってると思う。ひょっとしたら`enable`とか`configure terminal`とかいるかも知れない。あともし全く間違っていたらごめんなさい。

我々は、DHCPサーバーでOption 43の他に、デフォルトゲートウェイの設定を配信していました。
もちろんAP・WLCは同じセグメント内でしか通信しませんから実際デフォルトゲートウェイなんて必要ないのですが、最初は192.168.251.1というDHCPリースの帯域に含まれず、かつ何も機器を接続しないアドレスをデフォルトゲートウェイとしてDHCPサーバーに設定していました。

APのメッセージを見ると、どうやら192.168.251.1から応答がないか、他のサブネットに通信が通らないか、すみません詳しくは覚えていないのですがそういったたぐいのメッセージが表示されていました。
そこで**WLCのIPアドレス（192.168.251.2）をデフォルトゲートウェイのアドレスとして設定・配信**するようにしました。

すると、デフォゲうんぬんのエラーメッセージは消え、Option43で設定したWLCのIPアドレスへAPはJOINしようと試みるようになりました。

その後検証する時間がなかったので憶測になってしまいますが、ひょっとしたらデフォルトゲートウェイの設定を消すだけでも良かったのかもしれません。

## WLCにAPがまったくJOINしてこない（原因: WLCのライセンス問題）

コンソールケーブルAPに接続して、シリアル通信でAPのシェルを開くと、で直接Option43で設定したWLCのIPアドレス（192.168.251.2）へAPはJOINしようと試みるものの、どうやらWLCの側から接続を拒否されたか接続できずにタイムアップしたみたいなメッセージをAPが出していました。

そしてWebブラウザでWLCのログを見ると以下のようなログが残っていました。

```
*spamApTask7: Jan 22 10:04:18.134: %CAPWAP-3-AP_DB_ALLOC: capwap_ac_db.c:150 The system is unable to alloc AP entry in database for 10.19.50.61:1282
*spamApTask7: Jan 22 10:04:18.134: %LWAPP-3-LICENSE_ACQUIRE_ERR: spam_lrad.c:365 Failed to acquire license from the licensing module
*spamApTask0: Jan 22 10:04:04.916: %LWAPP-3-LIST_ERR8: spam_list.c:1072 The sytem is unable to delete AP entry, entry not allocated
```
(https://community.cisco.com/t5/wireless-and-mobility/ap-not-joining-the-wlc5520/td-p/3315941 より引用)

引用元のリンクの先の掲示板で示されているように、どうやらWLCのライセンス周りの問題だそう。

https://www.cisco.com/c/en/us/td/docs/wireless/controller/technotes/8-1/KVM/b_CUWN8-1-vWLC-Deployment-Guide-using-LinuxKVM/rtu_licensing.pdf に従ってRTUライセンスの設定をします。

Management > Software Activation > Licenses からライセンスの画面を開きます。
![2018-12-15.PNG](https://qiita-image-store.s3.amazonaws.com/0/213714/eb648a2a-b710-9fb0-69cc-5f54f7e41ea2.png)
（https://www.cisco.com/c/en/us/td/docs/wireless/controller/technotes/8-1/KVM/b_CUWN8-1-vWLC-Deployment-Guide-using-LinuxKVM/rtu_licensing.pdf より）
そして、Licence Countのフィールドをaddに、そして台数を200にしてset countボタンを押します
最後にELUAに同意し、Acceptボタンを押して完了です。

APがだんだんJOINし始め、APのLEDが緑色に切り替わりはじめました。


## 40台いるはずのAPが28台しかJOINしてこない。けれど全部緑のランプがついている（原因: Mobility Expressが意図せず動作）
緑色に光るAPの数は増え、WLCのWebコンソールに表示されるAPの数も着実に増えました。
ですが、４０台あるAPのすべてが緑色に点灯したのにもかかわらず、Webコンソール上には28台分しかAPがJOINしてきませんでした。
残りの12台はどこへ消えたのか・・・

最初マジで何もわからなかったのですが、先輩がヒントをくれました。Mobility Expressが悪さをしているのではないかと。
Wi-Fiをスキャンしてみると、たしかに設定した覚えのない、Mobility Expressの設定に使うと思われるSSIDが飛んでいる・・・

当時の僕は知らなかったのですが、Mobility ExpressとはWLCが設置されていない環境下において、複数台AP同時が自動でネゴシエーションを行い任意の1台のAPがコントローラーとして振る舞い、WLCがなくともAPすべてを統括して管理できるようにする仕組みだそうです。本来であれば、WLCの有無を確認した上で動作する・・・らしい・・・・・
問題は一定以上のバージョン以上のファームウェアがAPに入っている場合、デフォルトでMobility Expressが有効になっていることと、WLCが同一サブネット上にある場合でもMobility Expressが動き出してしまう場合があることです。
このときは、12台がMobility Expressとして振る舞っていたと考えられます。

Ciscoのマニュアル（https://www.cisco.com/c/en/us/td/docs/wireless/access_point/mob_exp/83/user_guide/b_ME_User_Guide_83/appendix.html#topic_A575EE4B2A054DE5BAF1931A7D384DB5 ）に従って、Mobility Expressとして振る舞っている奴らに、Mobility Expressをオフにするコマンドを投入していきます。
WLCのAP一覧画面のMACアドレスと実機のMACアドレスとを比較し、WLCにJOINしていない=Mobility Expressとして動作してるAPを割り出します。

本来であればControllerとして振る舞っているAPににのみコマンドを投入すれば、Mobility Expressのグループは解散するのだと思いますが、そもそもどのAPがControllerとして選出されたのか特定ができないこと、また解散後また一部のAPがMobility Expressとして振る舞い始めるのが怖かったので、WLCにJOINしていないAPに片っ端から以下のコマンドを投入していきました。

```
Cisco> enable
Password:Cisco
Cisco# ap-type capwap
```
多分合ってるはず。あとAironetのコンソール時と場合によってなんか微妙に挙動が異なる謎・・・
さいご`confirm`するとAPが再起動してMobility ExpressがOFFになるはずです。
どうやらcapwapというのがWLCで一括管理してAPを使用するモードらしい
適時`enable`・`configure terminal` 等を実行する必要があったと思う。
また　デフォルトの`ID / PASS`は`Cisco / Cisco`だったはず。

また、たまにパスワードの変更を要求されることがありますが、WLCにJOINしたあとWLCの設定画面から全APのID/PASSをまとめて再設定とかできるはずなので、そんなに気負わなくてもいいと思う。

## 補足
コールドスタート(全部の機器の電源をOFF&再投入)のときにまたMobility Expressが作動して、一部APがWLCにJOINしてこなくなりました。
調べてみるとJOINしていないのは先程Mobility ExpressをOFFにしたAPではなく、コールドスタートを行うまではWLCにきちんとJOINしていたAPのようで・・・

全APに前の章のMobility ExpressをOFFにするコマンドを投入して解決しました。
このときはWLCから全APのSSHログインを有効に、加えてログインID/PASSに共通（40台すべてで同一な）な文字列を設定した上で、後輩がtmuxの機能を使って複数台まとめてSSH経由で一気にこのコマンドを流し込んでました。


記事は以上になります。

少なくとも来年度ぼくか後輩かはわかりませんが、設定する人が同じところで躓かないように・・・
ひょっとしたら誰か同じことで躓いている人の役に立ちますように・・・