スタートアップの「つながる」無線に必要な5つのこと

こんにちは。村☆☆☆ハンターの @sugitak です。freee ではインフラ的なことをしていて、個人では一年に一度くらいbundlerの記事書いています。あと[CONBU](https://conbu.net/)とか参加してます。

freeeでは日々様々な革命が行われていますが、革命にはパンがつきものです。パン、すなわち無線です。革命家にパンが必要なように、エンジニアが自由に働くためには無線が必須なのです。有線ではいかんのです。

ということで、今回は[freee Engineers Advent Calendar 2015](http://qiita.com/advent-calendar/2015/freee) 5日目の記事では、スタートアップのオフィス無線を良くするにあたって大事な 5 つのポイントについて説明したいと思います。


# アクセスポイント(AP)の収容端末数を気にしよう

さて、まずは「収容端末数」について説明します。

10人以下のオフィスでは、ヨ○バシで売っている buffal○ や I○DATA など、普段のなじみのある機器を購入して使用して、特に不足を感じることはないでしょう。

ただ、これはすぐに限界が来ます。無線APには「**収容端末数**」（APに一度に接続できる端末の数）という隠しスペックがあるんですが、これが市販の製品だと大体10か30程度になっているのです。

収容端末数を超えると、APによって単純に接続できなかったりAP自体が突然再起動したりします。これは、ベンダの期待する本来の用途から越えてしまい、[鼻から悪魔が出る](http://cpplover.blogspot.jp/2010/01/c0x_14.html)系の現象が起こっている状況ですね。価格から考えればこれは仕方ないです。

30端末っていうと30人か、まだまだ大丈夫、と思うかもしれませんが、意外とそうでもありません。今や誰もがPCとスマホとで合計2台の機器を持ち歩いています。これがエンジニアになるとモバイルデバイス数がさらに増えますし、Airmac Time Capsule や3DSを利用する人も出てきます。さらに、スタートアップではゲストに無線を貸すこともあるでしょう。なので、10人程度のスタートアップになったらもう限界です。家庭向けベンダのAPから卒業しましょう。

家庭用ベンダの次は何を買うべきか？というと…、標準的には[Cisco Aironet](http://www.cisco.com/web/JP/product/hs/wireless/index.html)、最近だと[YAMAHA WLX302](http://jp.yamaha.com/products/network/wireless_lan/wlx302/)なんかが候補に入ってくるでしょうか。個人的には[Cisco Meraki](https://meraki.cisco.com/ja/content)を応援していきたいところです。なんかかわいいし。

# 電波を気にしよう

アクセスポイントの置き場所はどこですか？オフィスの景観を気にして、物陰に置いていませんか？横に倒して、上に本を乗せてたりしませんか？本棚で本に挟まれていませんか？あるいは机の下、床に置いていませんか？

**無線APは、人から見える場所に置きましょう**。鉄則です。

無線APが物理的に見えない場所には無線も届きにくいです。なので、ディスプレイの陰になって見えにくい場所でも、電波が弱まっている可能性があります。できれば天井におけるのが最適です。
電波については[くまがいさんの資料](http://www.slideshare.net/akirakumagai10/conbu-yapc2014wi-firfpublic)がわかりやすいので、社内なんでもや担当の方には一読をおすすめします。

また、**APには電波の指向性がある**ことも覚えておくと役立つことがあるかもしれません。

- APはおもて面に向けてより強く電波を発する傾向がある（横方向の傾向は製品による）
- アンテナを立てると、その立てた向きと垂直方向の電波が良好になる

まともなエンタープライズ向けAPはデータシートに電波の指向性についても記載があります。例えばCiscoでは、以下のような図を提供しています。

<img width="716" alt="スクリーンショット 2015-11-30 0.44.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/71400/dadfc0c8-d880-5c2c-2dac-45e8dede10bb.png">

（上図は http://www.cisco.com/web/JP/product/hs/wireless/airo3600/prodlit/design_guide_c07-693245.html より**引用**）

こういう情報があるかどうかは、APを選ぶひとつの基準になるかもしれませんね。

# 周波数帯とチャンネルを気にしよう

物理的な電波を確保したら、次は周波数帯とチャンネルを気にしましょう。周波数帯は大きく分けて2.4GHz帯と5GHz帯とがありますが、それぞれに特徴があります。

- 2.4GHz帯は安物PCでも利用可能。5GHz帯は端末を選ぶ
- 2.4GHz帯は壁などの障害物をわりと透過・迂回できる。5GHz帯はわりとダメ
- 2.4GHz帯の方がよく飛ぶ。5GHz帯は減衰しやすい
- 2.4GHz帯は干渉しまくる。5GHz帯は比較的空いている

空いているチャンネルを確認したいときは [inSSIDer](http://www.inssider.com/) や Apple store の Wifi Scanner などがおすすめです。下のように SSID ごとの無線の強度を一覧で見せてくれるため、空いているチャンネルを簡単に確認できます。

![inssider.png](https://qiita-image-store.s3.amazonaws.com/0/71400/bff48ec1-f98c-dbfc-38f6-9870dbeedb5b.png)


ただ、inSSIDerなどはあくまでSSIDと無線強度を見ているだけで、実際の干渉度合いはまた別です。本格的に調査する際は、スペクトラムアナライザを使って確認することになります。（参考： [Internet Week 2015 で無線 LAN について話してきました&車載動画 | ツチノコブログ](http://tsuchinoko.dmmlabs.com/?p=2579)）

ところで、5GHz帯はたくさんチャンネルがあり、最大で19チャンネルを並列で使用できることになっていますが、このうち4chしか使えない機器があるのをご存知でしょうか。

5GHz帯と呼んでいる領域には 5.2GHz 付近の W52（36-48ch）, 5.3GHz付近の W53（52-64ch）, それから 5.6 GHz 付近の W56（100-140ch）の三種類があります。そのうち、W53・W56は日本では DFS という機能をつけていないと技適を通りません。そのためかどうかはわかりませんが（あるいはチップ載せるだけ高いからか）、安価な機器ではW52しか利用できないケースがあります。具体的にはうちの Nexus5 と 7 が W53 に繋がらないのねん。困るのねん。

そもそも2.4GHz帯しか使えない機器もまだまだありますし、2.4GHz帯の12ch以降を使えない機器というのも存在します（具体的にはNexus5）。自分の使っている端末がどの周波数の電波を見られるか、確認したうえでチャンネル設計をしましょう。

なお、W52しか使えないような場合、干渉しないチャネル数がたかだか4つに限定されるため、11nや11acで使われる「チャネルボンディング」（複数チャンネルをまとめてひとつの通信に使う方式）は避けることになります。必ず "20MHz" 幅を利用するようにしましょう。

などなど、周波数帯とチャンネルは非常にディープな世界なので、まだまだあるのですが、続きを読みたい方はfreeeの会員登録をお願いします。

# 自分の端末の接続状態を把握しよう

電波とかチャンネルとか言われても、現在なんとなく通信できているなら気にならないかもしれません。が、自席から立ち上がってソファに座るとなんだか無線に繋がらない…そんな経験はありませんか。

それ、APではなく、実は**端末のせい**かもしれません。そうなのね。

Mac の Airport コマンドを利用して、自機のつながっている無線の状況について確認しましょう。`airport -I` コマンドで、今つながっている無線や周辺の無線の状態について、わかりやすく情報を得ることができます。

```
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
     agrCtlRSSI: -48
     agrExtRSSI: 0
    agrCtlNoise: -98
    agrExtNoise: 0
          state: running
        op mode: station
     lastTxRate: 54
        maxRate: 54
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa-psk
          BSSID: 00:00:0c:98:76:54
           SSID: 0001softbank
            MCS: -1
        channel: 14
```

はい、とってもわかりやすいですね。

これでは分かりにくいという方向けに、 [sugitak/wifi-check](https://github.com/sugitak/wifi-check) というMac向けシェルスクリプトを作っています。`wifi-check` では、無線でよくやる診断内容を分かりやすく表示し、問題のある箇所を赤く見せてくれます。個人的には便利である可能性を否定しきれません。

<img width="543" alt="wifi-check.png" src="https://qiita-image-store.s3.amazonaws.com/0/71400/6733befb-def9-024f-89cb-dd56626cc329.png">

現時点では作りがかなり雑なので、わりとすぐにバグります。issue, pull request 大歓迎です。シェルスクリプトはエラー処理系がつらいのでそのうちPythonで書き直したいと思っています。

# 監視しよう

どんなに無線を美しく設計したところで、ユーザはアンコントローラブルです。突然5GBのファイルをダウンロードし始めたり、新しいPCでDropbox同期したり、Rogue AP を作成して電波を発したり、Skypeし始めたりして他のユーザに影響を与えたりします。しかも、本人は全く気付きません。そう、監視が必要なのです。

freee では現在、WLX302 を数台利用してオフィスの無線を構築しています。また、日常的な運用のため、主に以下のものを監視しています。

- 各APごとの接続ユーザ数
- CPU/メモリ使用率
- 通信量
- エラーレート

APとしてはこのあたりはSNMPのみから取得できるのが理想ですが、WLX302では幾つか見当たらない項目がありました。そこで、弊社の誇るビルからアプリまでフルスタックのインフラエンジニア氏（今回のアドベントカレンダーには不参加）がサクッと `ssh` からこのあたりの情報を（多分expectで）取るようにしまして、現在の運用環境に至りました。

![zabbix.png](https://qiita-image-store.s3.amazonaws.com/0/71400/3f511349-7187-974e-6ec4-ea387f70fa35.png)


上は社内で利用しているZabbixのスクリーンの一部です。
大きめの会議があった時間帯には、クライアント数があるAPから別のAPへと移動したりするのですが、その様子がスクリーン上では分かりやすく見えます。WLX302では周波数帯ごとに50人までしかassoc（接続）できないので、こういった情報はAP配置計画に必須です。

freeeではWLX302を三ヶ月程度使用していますが、接続端末数が50で頭打ちとなることと、見える化ツールがCPUを食いすぎるのでONにできないということ以外はまずまず快適に使用できています。この次は、Interopの電波混雑環境でテストされたさいにもっとも切れにくいと評判だったAPを利用する予定です。

# まとめ

以上、スタートアップで無線を立ち上げる際に気にしてほしいこと五つを並べてみました。
無線LANの運用は踏み込み始めるとどこまでも深くて、まだまだ書き足りないことはありますが、今回は実践編ということで細かいことは抜きにして、このあたりで終わりたいと思います。

# 終わりに

freee では、[旧来の「インフラ」から解き放たれて、プロダクトを改善するためにビルからアプリケーション開発まで攻めるインフラエンジニアを募集](http://jobs.jobvite.com/freee/job/oCyn1fwi)しています。

そしてそして、明日のアドベントカレンダー担当は、freeeが誇る全方位射撃手（オールマイティデストラクター） @kompiro さんの出番です。開発環境やプロセス、勉強会などでは他の追随を許さないハイパー紳士ですが、今回はガッツリ技術的な方向から攻めてくると噂に聞きました。ご期待ください！