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