サーバいじくり雑記

2014年4月25日

RPiで無線LANのブリッジアクセスポイントを作る

Filed under: セキュリティ, ソフト, Linux — bompopo @ 7:00 PM

先日かなり旧型のAndroid端末を中古でそこそこ安く手にれました。それを使うことができる環境を作ってみるテストです。

今回実験に使用したのは「Raspberry Pi Model B(本体)」と「BUFFALO LI-UC-GNM2(無線LANアダプタ)」そして中古で買ってきた「TBi11M(android端末)」です。無線LANアダプタの方は新品で1000円くらいでした。

やはりというか、ネットワーク周りの設定に躓きました。
br0(ブリッジインターフェース)にeth0を参加させた時点で、それまでつながっていたネットワークコネクションが切れるのです。br0が間に挟まるるためにeth0にはパケットが届かなくなるようです(ブリッジなのになんで?)。これがRPiの問題なのか不明ですがとりあえずそういう方向で一般的な手順を修正します。

必要なパッケージは基本2つのみですが、

sudo apt-get install bridge-utils hostapd

無線LANアダプタの情報がよくわからない場合にHWに直接問い合わせるために必要に応じてiwをインストールします。

sudo apt-get install iw

hostapdに関しては、参考3のサイトを参考に最新バージョンをmakeして2つのバイナリを上書きしました。これで前準備完了です。

まず、RPi単体で動かす場合の手順を記します。
ネットワーク設定は以下のように設定します。IPアドレスはeth0ではなくbr0に振り、各種デーモンはbr0インターフェースとそのIPアドレスを使用することにします。

「/etc/network/interfaces」

iface lo inet loopback
iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual

# Bridge network interface
# IP指定
auto br0
iface br0 inet static
  address 192.168.0.1
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255
  gateway 192.168.0.255
  dns-nameservers 192.168.0.254
  bridge_stp off
  bridge_ports eth0
# DHCP指定
#auto br0
#iface br0 inet dhcp

次に無線LANアクセスポイントの設定です。まだ詰めてないので甘い箇所があると思いますが、とりあえずドラフト版ということで以下な感じです。(参考1/参考2)
「/etc/hostapd/hostapd.conf」

interface=wlan0
bridge=br0
driver=nl80211
ssid=myssid
country_code=JP
ieee80211d=1
hw_mode=g
channel=1
macaddr_acl=1
accept_mac_file=/etc/hostapd/hostapd.accept
auth_algs=1
ignore_broadcast_ssid=1
wmm_enabled=0
ieee80211n=1
wpa=2
wpa_psk_file=/etc/hostapd/hostapd-psk
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP

基本指定MACアドレス以外は拒否でssidはステルスモード、WPA2のみでアルゴリズムはCCMPのみという設定です。
アクセス制御にかなり悩んだのですがほぼ無知から数時間ではこの程度が限度かと。

「/etc/hostapd/hostapd.accept」は接続許可MACアドレスのリスト

XX:XX:XX:XX:XX:XX

「/etc/hostapd/hostapd-psk」はMACアドレスとパスフレーズのリストです。

00:00:00:00:00:00 ランダムで超長い文字列(63文字)
XX:XX:XX:XX:XX:XX 実際に使うパスフレーズ

まずMACアドレスで特定のものだけを許可し、もし違うMACアドレスがアクセス可能になってしまった場合もランダムなパスフレーズを要求すればいいかなと考えました。

通常はこれで、ネットワークにeth0にブリッジなアクセスポイントとして起動し、端末から接続可能です。

さて、次に私がハマったポイント。iSCSIルートなRPiにセットアップする場合です。上記手順では以下のシーケンスでトラブります。
1.起動時にinitramfsにてブート
2.eth0にIPが振られてiSCSIターゲットへ接続
3.iSCSIターゲットマウント
4.initスクリプトによりインターフェースの初期化・設定が走る
5.ネットワーク設定にてeth0がbr0の配下に入るためiSCSIターゲットとの接続が切れる
ー>ここで止まる

という感じです。
brigheのinitスクリプトがイケてない感じがするのですがとりあえずは小手先で対応。つまりinitスクリプトにてブリッジはしません。
ネットワーク設定は普通にしておき、後でブリッジ化することにします。

#!/bin/sh

brctl addbr br0
ifconfig br0 192.168.0.1 netmask 255.255.255.0
brctl addif br0 eth0
ifconfig eth0 0.0.0.0

service hostapd restart

説明すると、eth0からIPアドレスを剥ぎ取りbr0へ付け替えたあとeth0をbr0配下にします。その後hostapdを起動します。

このスクリプトを「/etc/rc.local」あたりに記述しておけば、iSCSIとのコネクションをlostすることなく起動することが可能です。

参考1:hostapd-example

参考2:hostapd を使用した簡単な方法で WiFi に強力な暗号化を実装する

参考3:Raspberry Pi をWi-Fiアクセスポイント&ルーター化する

広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。