jessie向けの新ページを作成しました。こちらからどうぞ

ex2.RaspberryPiを無線LANアクセスポイント化する - RaspberryPiで各種サーバー作り! - ある阪大生の物置小屋

今回は、RaspberryPiを無線LANアクセスポイント化する方法について説明します。
やっていることとしては、参考サイトの方々が既にされていることと似ていますが、
今回するのは、ルーター化ではなく(厳密な意味で)アクセスポイント化ということで少々異なります。
(まず、無線LANアダプタのドライバがnl80211の場合について説明します。それ以外の場合は、参考サイトを参照すること。)

1.無線LANアダプタを入手・RaspberryPiに接続する。

まずは、無線LANアダプタを入手し、RaspberryPiに接続します。
(筆者はWLI-UC-GNM2を使用しました。)

2.「bridge-utils」をインストールする

無線LAN側と有線LAN側をブリッジ接続するためのツールをインストールします。
「bridge-utils」は以下のコマンドでインストールできます。

sudo apt-get install bridge-utils

3.「/etc/sysctl.conf」を編集する

「/etc/sysctl.conf」に以下のように追加し、
ブリッジを通過するだけのパケットがiptablesのFORWARDチェーンを流れるようにする。

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

4.「hostapd」をインストールする

無線LANアダプタをアクセスポイント化する(受動的に接続できるようにする)ために、「hostapd」をインストールします。
「hostapd」は以下のコマンドでインストールできます。

sudo apt-get install hostapd

5.「/etc/hostapd/hostapd.conf」を作成する

以下のような内容のhostapdの設定ファイル「/etc/hostapd/hostapd.conf」を作成する。

interface=wlan0
bridge=br0
driver=nl80211

#SSIDを設定
ssid=

#動作モード(g:2.4Ghz帯・a:5GHz帯)(IEEE 802.11n・acを使用する場合もa又はgにセットすること!)
hw_mode=g

#使用チャンネル
channel=6

#MACアドレスフィルタリング(セキュリティ的にはあまり意味がないのでOFFにする)
macaddr_acl=0

#認証アルゴリズム(WPAのみ用いるとき:1・WEPのみ用いるとき:2・両方用いるとき:3・暗号化なしの時:0)
auth_algs=1

#SSIDの秘匿化を行うか(セキュリティ的にはあまり意味がないのでOFFにする)
ignore_broadcast_ssid=0

#IEEE 802.11nを有効にするかどうか(有効:1・無効:0)
#ht_capabは拡張設定を指定する。
#[HT40-][HT40+]:チャンネルボンディングを使用する設定。
#[SHORT-GI-20][SHORT-GI-40]:ガードインターバルを小さくし、安定性と引き換えに速度を得る設定。
#[TX-STBC][RX-STBC123]:MIMOを使用する設定。
#[LSIG-TXOP-PROT]:パケットのヘッダを旧来規格と互換性のあるものにする設定。
#その他いろいろ設定があるので、参考サイトを参照すること。
ieee80211n=1
ht_capab=[HT40-][HT40+][SHORT-GI-20][SHORT-GI-40]

#IEEE 802.11acを有効にするかどうか(有効:1・無効:0)
#vht_capabは拡張設定を指定する。
#IEEE 802.11acの拡張設定については、参考サイトを参照すること。
ieee80211ac=0
vht_capab=

#WMM(WME)(QoS制御の規格)を有効にするかどうか(有効:1・無効:0)
wmm_enabled=1

#IEEE 802.11d・IEEE 802.11h(国の規制に沿った出力制御を行う規格)を有効にするかどうか(有効:1・無効:0)
#IEEE 802.11hは5GHz帯を使う場合、日本では有効にしておかなくてはならないので有効にする。
#IEEE 802.11hを有効にするにはIEEE 802.11dを有効にする必要があるので有効にしておく。
ieee80211d=1
country_code=JP
ieee80211h=1
local_pwr_constraint=3
spectrum_mgmt_required=1



####(ここからWPA認証を使う人のみ設定)
#使用するWPAのバージョン(WPA:1・WPA2:2・両方:3)
wpa=3

#WPAのパスフレーズ
wpa_passphrase=

#個人で使う共有鍵認証の場合はWPA-PSK、
#企業などのRADIUSなどの認証サーバーを用いる場合は、WPA-EAPを指定。
#(ここではWPA-PSKのみを扱い、WPA-EAPの設定法については、参考サイトを参照すること。)
#「WPA-PSK WPA-EAP」として両方を指定することも可。
wpa_key_mgmt=WPA-PSK

#使用する暗号化方式(TKIP又はCCMP(AES)又は「TKIP CCMP」として両方を指定)
#wpa_pairwiseにはWPAの暗号化方式、
#rsn_pairwiseにはWPA2の暗号化方式を指定する。
wpa_pairwise=CCMP
rsn_pairwise=CCMP
####(WPA設定ここまで)


####(ここからWEP認証を使う人のみ設定)
#WEPのデフォルトキーを選択
wep_default_key=0

#各WEPキーを入力
wep_key0=
wep_key1=
wep_key2=
wep_key3=
####(WEP設定ここまで)

(「wlan0」という名称は場合によって異なることがあるので、「ifconfig」コマンドを実行して確認しておくのがベター)
(設定ミスがないか確認するために「sudo hostapd /etc/hostapd/hostapd.conf」を実行し、エラーが出ないことを確認することをおすすめする。)

6.「/etc/default/hostapd」を編集する

「/etc/default/hostapd」に以下のような記述を追加し、
hostapdの設定ファイル「/etc/hostapd/hostapd.conf」が使用されるようにする。

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

7.「/etc/network/interfaces」を編集する

「/etc/network/interfaces」を以下のように編集し、ブリッジを構築する。

auto eth0
allow-hotplug eth0
iface eth0 inet static
address 0.0.0.0

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 0.0.0.0

auto br0
iface br0 inet static
 address  (RaspberryPiに割り当てるIPアドレス)
 netmask (ネットワークのネットマスク)
 gateway (デフォルトゲートウェイ)
bridge_ports eth0 wlan0
bridge_stp off

8.iptablesの設定変更

filterテーブルのFORWARDチェーンに、ルールを追加し、ブリッジを通過するパケットを許可する。
INPUT・OUTPUTチェーンでインターフェイス(-i,-oなどで)を指定したルールがある場合はeth0,wlan0→br0に変更しておくこと!
(INPUT・OUTPUTチェーンでのphysdevでのインターフェイスの指定はもう使われないようなので注意が必要)

sudo iptables -A FORWARD -m physdev --physdev-in eth0 --physdev-out wlan0 -j ACCEPT
sudo iptables -A FORWARD -m physdev --physdev-in wlan0 --physdev-out eth0 -j ACCEPT

2.5.の通り、iptablesの設定の変更後は以下のコマンドで設定を記録しておくこと。

sudo iptables-save | sudo tee /etc/iptables/rules.v4

9.接続確認

外部の端末から、無線APが機能しているか確認する。



ex2.参考サイト

無線LANアダプタのドライバがnl80211以外の場合・無線LANルータ化について知りたい場合は以下のサイトを参照。

「hostapd.conf」について知りたい場合は、以下のサイトを参照。

ブリッジ構築の際に参考にしたサイトは以下の通り。

製品紹介(Amazonアフィリエイト)

筆者が使用した無線LANアダプタは、WLI-UC-GNM2ですが、同様のものでAmazon向けに包装を減らしているエコパッケージ商品WLI-UC-GNMEもあります。
ただし、WLI-UC-GNM2は出力が弱いので、電力供給の安定のためにセルフパワー型のUSBハブを間に挟んで、よりハイパワーな無線LANアダプターを使用するのも良いかもしれません。



2016/3/3
・hostapd.confの設定にWLI-UC-GNM2が対応していないオプション([TX-STBC][RX-STBC123][LSIG-TXOP-PROT])が記述されていたので削除
・hostapd.confの設定にIEEE 802.11d,hの動作に必要なオプション(local_pwr_constraint=3)が記述されていなかったので追加
・hostapd.confのパスの指定を「/etc/init.d/hostapd」に直接書かずに「/etc/default/hostapd」に書くように変更