Help us understand the problem. What is going on with this article?

コマンド一発で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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away