Raspberry PIで無線AP+ルーターを作ってみた

(注)この記事は2015年1月1日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・

2015年1発目の記事は「Raspberry PIで無線AP+ルーターを作ってみた」です。
訳あって毎年恒例の年越し新年会にラズパイを持って行くことになり、じゃあ折角なんで無線LANからでも使えるようにしておこうと思ったわけです。

というわけで大晦日にお買い物。
IEEE802.11n/g/b準拠 150Mbps(規格値)無線LANアダプター(超小型モデル)WN-G150UMシリーズ

ラズベリーパイに挿したら自動認識してくれました。

f:id:xyzplus:20161210004719j:plain

ネットワークの設定

WPAによる暗号化通信の設定をします。

wpa_passphrase [SSID] [Key]

コマンド実行結果

network={
        ssid="[SSID]"
        #psk="[Key]"
        psk=*******************************
}

出力された文字列を基にして足りない項目を補完し、/etc/wpa_supplicant/wpa_supplicant.conf ファイルに追記します。
追記後のファイルはこんな感じ。

/etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="****"
        psk=*************
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        auth_alg=OPEN
}

ちなみに、/etc/network/interfaces ファイルの内容は以下の通り。
自動認識したときに勝手に追記してくれたようです。
X画面で色々いじったりしてからの内容なので、挿した直後とは違うかも。。。

/etc/network/interfaces

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

最後に、ネットワークを再起動すれば、無線LANでアクセスができるようになりました。

sudo service networking restart

ちなみに、X画面上からも設定できます。
そっちのほうがはるかに楽。

f:id:xyzplus:20161210004755j:plain

無線APの作成

では、いよいよ無線APを作ります。

まず、hostapdをインストール

sudo apt-get install hostapd

設定ファイルのサンプルをコピーして、編集します。

sudo zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz > /etc/hostapd/hostapd.conf

色々と沢山設定があるみたいですが、コメントがしっかり書いてあるので読めば何とかなりそうです。
とりあえず、自分は以下の行を編集(&アンコメント)しました。

/etc/hostapd/hostapd.conf

ssid=RaspberryPi
wpa=2
wpa_passphrase=**********
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

デーモン起動時に設定ファイルを読み込むように、/etc/default/hostapd ファイルを編集します。
変更した行は以下の通り。

/etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

まずは手動でhostapdを起動してみます。

sudo hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
nl80211: 'nl80211' generic netlink not found
Failed to initialize driver 'nl80211'
rmdir[ctrl_interface]: No such file or directory

うまく動きませんorz

困った時のネットで調べてみたら、どうやらドライバーが対応していないそうで。。。

“nl80211 not found”
という出力が出た場合、”driver=nl80211″は使えません。”driver=rtl871xdrv”を使いましょう。

Raspberry Piのアクセスポイント化 & ルータ化がうまくいかない時はこの通りにやればおk

というわけで、バイナリを差し替えます。

wget http://www.adafruit.com/downloads/adafruit_hostapd.zip 
unzip adafruit_hostapd.zip 
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG 
sudo mv hostapd /usr/sbin
sudo chmod 755 /usr/sbin/hostapd

/etc/hostapd/hostapd.conf ファイルも修正します。

/etc/hostapd/hostapd.conf

driver=rtl871xdrv

もう一度起動。

sudo hostapd /etc/hostapd/hostapd.conf

無事に起動できました。
アンドロイド端末からもAP名がちゃんと表示されます。

f:id:xyzplus:20161210004828j:plain

DHCPサーバの作成

続いて、DHCPサーバーを作成します。

sudo apt-get install isc-dhcp-server

そしたら…

[FAIL] Starting ISC DHCP server: dhcpd[....] check syslog for diagnostics. ... failed!
 failed!

いきなり起動しようとしてエラー吐きました。
まだ何も設定していないので当然っちゃ当然。

というわけで、設定ファイルを編集します。
変更したのは以下の通り。

/etc/dhcp/dhcpd.conf

#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
(上記2行はコメントアウトauthoritative;
(上記1行はアンコメントアウトsubnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.101 192.168.2.110;
  option broadcast-address 192.168.2.255;
  default-lease-time 600;
  max-lease-time 7200;
  option routers 192.168.2.1;
  option domain-name "local";
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}
(上記を追加。アドレス等は適当に置き換えてください)

DHCPサーバに使用するインタフェース(今回の場合、無線LAN)を指定します。

/etc/default/isc-dhcp-server

INTERFACES="wlan0"

無線LANインタフェースに固定IPアドレスを割り当てます。
(もともと設定が書いてあった箇所はコメントアウト

/etc/network/interfaces

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet static
address 192.168.2.1
netmask 255.255.255.0
iface default inet dhcp

以上で設定は完了です。

デモ

当日のデモはこんな感じでやってみました。

f:id:xyzplus:20161210004856j:plain

ラズパイの左にあるのはモバイルバッテリー
ラズパイはモバイルバッテリーでもちゃんと動作するのがいいですよね。