Edited at

コマンド一発でLinuxマシンを即席無線LANルーターにできる「create_ap」がすごい便利だった


create_apとは

一言で言っちゃえば、Windowsで言うところの「Virtual Wifi」みたいな機能を提供してくれるシェルスクリプトです。

無線LANチップが乗っているLinuxマシンがあれば即席のアクセスポイントを作ってくれて、無線LANルーターにしてくれる便利スクリプトです。hostapdによるAPの作成から、DHCPサーバーの作成、NATの設定まで諸々コマンド一発でやってくれるすごいやつでした。

いわゆるホテルWifiみたいな使い方もできますし、ベースがLinuxなので、同じマシンにSambaやGit、owncloudサーバーなんかを建ててしまえば、ただのルーターにはできないいろんな使い方ができて妄想が膨らみます。(クラウド使えばいいじゃんとか言ってはいけない)


環境


  • PC: Vaio F /VPCF24AJ (2012年ぐらいに買ったSandy Bridge世代のノートパソコン)

  • 無線LANカード: Qualcomm Atheros AR9287 Wireless Network Adapter

  • OS: Ubuntu 16.04


準備

create_apの動作にはhostapdが必要なので事前にインストールしておきます。

$ sudo apt-get install hostapd


インストール

GitHubから一式取ってきます。

$ git clone https://github.com/oblique/create_ap

$ cd create_ap
$ sudo make install


使い方

ぶっちゃけ GitHubのREADME を見れば終わってしまうぐらい簡単なのですが、よく使うコマンドだけ紹介しておきます。

# create_ap [options] <wifi-interface> [<interface-with-internet>] [<access-point-name> [<passphrase>]]


仮想APを作り、有線LANでインターネット接続する(いわゆる無線LANルーター的使い方)

とりあえずネットワークインターフェイス名を調べます

$ ifconfig

enp5s0 Link encap:イーサネット ハードウェアアドレス 30:f9:ed:ea:4b:17
UP BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:7259 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:3757 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:2418516 (2.4 MB) TXバイト:500563 (500.5 KB)

lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:65536 メトリック:1
RXパケット:1458 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:1458 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1
RXバイト:144158 (144.1 KB) TXバイト:144158 (144.1 KB)

wlp2s0 Link encap:イーサネット ハードウェアアドレス 94:39:e5:9b:7a:2e
inetアドレス:192.168.11.47 ブロードキャスト:192.168.11.255 マスク:255.255.255.0
inet6アドレス: fe80::af12:7318:fe07:4c1a/64 範囲:リンク
inet6アドレス: fe80::50a0:5c0a:658b:e016/64 範囲:リンク
inet6アドレス: fe80::3164:636d:b34b:49f3/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:33651 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:17900 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:17117833 (17.1 MB) TXバイト:3715535 (3.7 MB)

なんか最近のLinuxはwlan0とかじゃないんですね。Ubuntuだけ?

wlp2s0に仮想APを、enp5s0をインターネットに接続するので以下を実行します。SSIDは「vaio-ap」、パスワードは「passphraze」にしました

~/create_ap# ./create_ap wlp2s0 enp5s0 vaio-ap passphrase

これだけです。

ifconfigを確認すると、ap0という仮想APが作成されているのがわかります。ここに他のデバイスから接続すればenp5s0経由でインターネットに接続できます。便利

$ ifconfig

ap0 Link encap:イーサネット ハードウェアアドレス 94:39:e5:9b:7a:2f
inetアドレス:192.168.12.1 ブロードキャスト:192.168.12.255 マスク:255.255.255.0
inet6アドレス: fe80::9639:e5ff:fe9b:7a2f/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:37 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:0 (0.0 B) TXバイト:6485 (6.4 KB)

enp5s0 Link encap:イーサネット ハードウェアアドレス 30:f9:ed:ea:4b:17
UP BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:7259 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:3757 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:2418516 (2.4 MB) TXバイト:500563 (500.5 KB)

lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:65536 メトリック:1
RXパケット:1458 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:1458 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1
RXバイト:144158 (144.1 KB) TXバイト:144158 (144.1 KB)

wlp2s0 Link encap:イーサネット ハードウェアアドレス 94:39:e5:9b:7a:2e
inetアドレス:192.168.11.47 ブロードキャスト:192.168.11.255 マスク:255.255.255.0
inet6アドレス: fe80::af12:7318:fe07:4c1a/64 範囲:リンク
inet6アドレス: fe80::50a0:5c0a:658b:e016/64 範囲:リンク
inet6アドレス: fe80::3164:636d:b34b:49f3/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:44829 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:27443 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:25184111 (25.1 MB) TXバイト:5883459 (5.8 MB)

終了する場合は、Ctrl+Cで中断すれば、作成されたAPも含めて綺麗サッパリ消えます。もしくはstopオプションも用意されています。

~/create_ap# ./create_ap --stop <id> 

ちなみにインターネットに接続するインターフェイスと仮想APを作るインターフェイスは同じものを指定することもできます。

~/create_ap# ./create_ap wlp2s0 wlp2s0 <SSID> <passphrase>

他にもいろいろオプションがあって「--isolate-clients」をつけると仮想AP内でのクライアント間の通信を遮断できたり、「-m bridge」オプションでNAT接続じゃなくてブリッジ接続することもできるみたいですね。

~/create_ap# ./create_ap --isolate-clients wlp2s0 enp5s0 <SSID> <passphrase>

~/create_ap# ./create_ap -m bridge wlp2s0 enp5s0 <SSID> <passphrase>


おまけ

サーバーのエントロピーが足りないと、無線LANが遅くなるらしいです。その場合はhavegedを使うといいらしいです(よくわかってない)。以下引用


haveged が必要かどうかわからない(もしくは迷っている)なら、次のコマンドを実行してください:

# cat /proc/sys/kernel/random/entropy_avail

このコマンドはあなたのサーバがどれくらいエントロピーを確保しているかを出力します。もし、出力された値が低かった (1000以下) のであれば、haveged をインストールするべきです。暗号アプリケーションは十分なエントロピーが貯まるまで動きません。結果として、あなたのサーバーをソフトウェアアクセスポイントとして使っている場合など、wlan の速度が低下するかもしれません。

インストール後、もう一度コマンドを実行して確認してみてください。どれくらい haveged があなたのサーバのエントロピープールを加速させたかがお分かりいただけるでしょう。


havegedはインストールするだけで有効化されるみたいです。

$ sudo apt-get install haveged


参考URL