今回は、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 auto wlan0 allow-hotplug wlan0 auto br0 iface br0 inet dhcp bridge_ports eth0 wlan0 bridge_stp off
8.「/etc/dhcpcd.conf」の編集
「/etc/dhcpcd.conf」を以下のように編集し、IPアドレス等の設定を行う。
また、eth0などにリンクローカルアドレスが割り当てられないようにする。
#(追加) denyinterfaces eth0 wlan0 #以下は静的IP場合のみ(DHCPを利用する場合は不要) interface br0 static ip_address=(RaspberryPiに割り当てるIPアドレス)/(サブネットマスク) static routers=(デフォルトゲートウェイ) static domain_name_servers=(DNSサーバのIPアドレス)
9.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
10.接続確認
外部の端末から、無線APが機能しているか確認する。
ex2.参考サイト
無線LANアダプタのドライバがnl80211以外の場合・無線LANルータ化について知りたい場合は以下のサイトを参照。
- Raspberry Pi をWi-Fiアクセスポイント&ルーター化する - 猫ぱーんち!
- Raspberry Piのアクセスポイント化 & ルータ化がうまくいかない時はこの通りにやればおk - ami_GS's diary
- Raspberry Piの無線LANルータ設定 - GreenLeaf
「hostapd.conf」について知りたい場合は、以下のサイトを参照。
- en:users:documentation:hostapd [Linux Wireless]
- Hostapd - Gentoo Wiki
- hostapd.conf - w1.fi(hostapdやwpa_supplicant作者サイトの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」に書くように変更
・IPアドレスの設定をdhcpcdにさせるように変更