Upload
mmasataka
View
382
Download
2
Embed Size (px)
Citation preview
OpenWRT で Wired like な WiFiNW を作ってみた。2015/11/29
NTT ソフトウェアイノベーションセンタ水越大貴 (m-masataka)
自己紹介• m-masataka (水越大貴)• 所属 NTT SIC• 元々分散処理• 無線 LAN 関係の OSS を触る
• OpenWRT• Hostapd
本日お話しすること• 無線 LAN 関係の OSS について調べました。• OpenWRT を使用して、コントローラブルな無線 LAN 環境を自作しました。
動機• 無線 LAN の管理は難しい
認証設定 AP の管理 接続端末の制限 SSID 設定 チャネル割り当て
初期設定
電波状況 ユーザ端末 利用状況
環境変化への対応
一元的に、かつ、動的に無線周りの設定変更がしたい。
ケース1• 電波干渉の影響で、通信できないユーザを一時的に他のアンテナへ退避させたい。
Wi-Fi AP Wi-Fi AP 干渉源
通信障害発生
ケース 2• 接続端末の優先度を変更したい。
今はこの人だけ優先させたい!一般ユーザ
Wi-Fi APWi-Fi AP
やりたいこと
Wi-Fi コントローラ
Wi-Fi APWi-Fi AP
アンテナ情報 端末情報 電波状況
: :
情報収集
•Wi-Fi コントローラから、 Wi-Fi アクセスポイントのアンテナ周りの情報収集&設定変更ができるようにします。
やりたいこと
Wi-Fi コントローラ
Wi-Fi APWi-Fi AP
アンテナ情報 端末情報 電波状況
: :
情報収集
•Wi-Fi コントローラから、 Wi-Fi アクセスポイントのアンテナ周りの情報収集&設定変更ができるようにします。•これを OSS で作ります。
OpenWRT とは• 組み込みデバイス向けの Linux Distribution
• 特にルータやアクセスポイントといった機器に対して多く対応• コンシューマ向けの無線 LAN ルータのファームウェアを置き換えることが可能
• 特徴• 複数のチップセットに対応• 拡張性が高い(コンパイル作業が簡単)• ファイルサイズが軽量
ash uClibc BusyBox Lua opkg
なぜ OpenWRT ?
• 多機能• 組み込みデバイス向けのアプリ開発がとにかく簡単
なぜ OpenWRT ?• OpenWRT
• ルータ向け• LEDE
• Linux Embedded Development Environment• 組込みシステムのための Linux Distr• 組込みシステムの開発環境を提供→ Buildroot を使って make するだけでアプリも kernel module も開発できる。
やりたいこと
Wi-Fi コントローラ
Wi-Fi APWi-Fi AP
アンテナ情報 端末情報 電波状況 : :
情報収集
•Wi-Fi コントローラから、 Wi-Fi アクセスポイントのアンテナ周りの情報収集&設定変更ができるようにします。•これを OSS で作ります。
無線ルータ
OpenWRT 無線機能の構成
KernelSpace
UserSpace
wireless driver
Wireless chipset
hostapd
Wireless Driver の設定、無線 LAN セキュリティ機能 (WPA,WPA2) の実装を行うアクセスポイントデーモン。
パケットの処理。無線⇔有線の変換が行われる。ビーコン制御、 MPDU 等の packet aggregation rate のコントロール .
mac80211
cfg80211
OpenWRT を API で操作• Ubus
• OpenWRT の軽量メッセンジャー
ubus
Other service
Other service
Wirelesscomponent
Ubus cli Httpd-mod-ubus
Wi-Fi コントローラHTTP(S)
設定変更反映
OpenWRT を API で操作• Ubus
• 使い方# ubus list
dhcp hostapd.wlan0 hostapd.wlan1 log network network.device network.interface.wan
: :
# ubus list -v network.interface.wan 'network.interface.wan' @44d8b6fa "up":{} "down":{} "status":{} "prepare":{} "dump":{}
: :
登録されているサービスを表示 Ubus で取得 & 設定可能な情報を表示
OpenWRT を API で操作• Ubus
• 使い方
# ubus call network.interface.wan down \ { “network.interface”: { “action”: “ifdown”, “interface” : “wan”}}
Ubus 経由での命令※ インターフェースダウン
全体構成• コントローラ ⇔ ubus hostapd Wireless Driver ⇔ ⇔ ⇔ チップセットの流れで、無線物理層の情報収集・設定変更を行うことができます。
ubus
wireless driver
hostapd
Wi-Fi コントローラHTTP(S)
HTTP(S)
全体構成• コントローラ ⇔ ubus hostapd Wireless Driver ⇔ ⇔ ⇔ チップセットの流れで、無線 LAN の情報収集・設定変更を行うことができます。
ubus
wireless driver
hostapd
Wi-Fi コントローラHTTP(S)
HTTP(S)Version によっては ubus 連携の機能が無いので、今回は ubus パッチ済の Hostapd を Make します。
環境構築• 足りないアプリケーションのビルド
TL-WDR4300N750 Wireless Dual Band Gigabit Router Wireless : Atheros AR9340 SoC: AR9344(MIPS) RAM : 128MiB Flash size : 8192KiB
環境構築• 足りないアプリケーションのビルド
TL-WDR4300N750 Wireless Dual Band Gigabit Router Wireless : Atheros AR9340 SoC: AR9344(MIPS) RAM : 128MiB Flash size : 8192KiB
組み込みシステムの開発 コンパイラを動かすには、メモリが足りない。 OpenWRT Buildroot を使ってクロスコンパイル
OpenWRT buildroot
• Build tool のダウンロードhttps://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/
• OpenWRT 上で動くほとんどのアプリケーションは上記の操作で作成することが可能です。• 今回は、自分でカスタマイズしたアプリケーションなど、上記操作で入手できないものを作成します。
# ./scripts/feeds update -a # ./scripts/feeds install –a# make menuconfig# make
OpenWRT buildroot クロスコンパイル• Hostapd ver2.6 の入手
• クロスコンパイルに使用するディレクトリの設定
• コンパイラを指定して、 hostapd の make• Build_tool の中に toolchain が入っているので、その配下のコンパイラを指定してコンパイルすることで、 OpenWRT 環境で動くアプリケーションが作成できる。
# git clone git://w1.fi/srv/git/hostap.git
# export STAGING_DIR=~/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
# export CC=~/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc# cd hostapd/hostapd/# make
OpenWRT build tool クロスコンパイル• 依存ライブラリが無いと怒られる。• 同じコンパイラを使用して、ライブラリ生成。• 再コンパイル
ループ
OpenWRT build tool クロスコンパイル• 依存ライブラリが無いと怒られる。• 同じコンパイラを使用して、ライブラリ生成。• 再コンパイル
ループ
OpenWRT では、殆どのライブラリが予め用意されています
デモ• TP-Link の無線 LAN ルータを OpenWRT 化
TL-WDR4300N750 Wireless Dual Band Gigabit Router Wireless : Atheros AR9340 SoC: AR9344(MIPS) RAM : 128MiB Flash size : 8192KiB
まとめ• OpenWRT を使ってコントローラブルな無線 LAN 環境を作りました。
• 安い( OSS+ 家庭用ルータ)• 機能追加が簡単( OpenWRT Buildroot)
• 今後やってみたいこと• 無線 LAN の QoS コントロール• SDN コントローラとの連携
ありがとうございました。