Raspberry Pi 3 アクセスポイント化 〜hostapd〜
Linuxには無線NICを使ってアクセスポイント化するソフトウェア「hostapd」がありますが、御存知の通り、Raspberry Pi 3は無線LANが内蔵されていますので、アクセスポイント化したいと思います。
最終的な構成は、
クライアント→(wlan0)RP3(eth0)→BBR→インターネット
となります。
※BBRは環境によってはない場合もあると思います。
動かした人はいるでしょうか
いました!
FRILLIPさんという方が動かせたそうなので、参考にさせて頂きました。
NIC確認
ifconfigで確認すると、wlan0、wlan1が確認できます。
wlan0が無線LAN、wlan1がおそらくBluetoothでしょう。
ドライバ
結論から言いますと、無線NICのドライバを探してきて入れるという作業は必要ありませんでした。
NICによっては、公式あるいは非公式のドライバを入れないと、アクセスポイントとして動作しないものが結構あるはずですが、Raspberry Pi 3 (OS:Raspbian jessie)では特にその必要はなさそうです。
hostapdインストール
apt-getでインストールしていきます。
後述しますが、apt-getでインストールする場合のhostapdのバージョンは2.3でした。数年前はapt-getでインストールするとバージョンが1.xが入るので、必ず最新版のソースからインストールするという作業が必要だったと思いますが、v2.3なのでそのまま進めます。
お詳しい方や、最新版が良い方は、ソースからインストールするのが良いかもしれません。
では、apt-getでインストールします。パッケージリスト更新してからインストールします。
$ sudo apt-get update
$ sudo apt-get install hostapd
これだけで終わりです!
バージョン確認してみます。v2.3の様です。
$ hostapd -v
hostapd v2.3
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2014, Jouni Malinen <j@w1.fi> and contributors
無線NIC wlan0の設定変更
無線LANクライアント設定変更
wlan0はデフォルトで無線LANのクライアントとして動作してしまっていますので、設定を変更します。
/etc/network/interfacesファイルを編集します。
まず現状の確認。
$ cat /etc/network/interfaces 〜抜粋〜
allow-hotplug wlan0 iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
〜抜粋〜
それでは、編集します。
$ sudo vi /etc/network/interfaces
〜抜粋〜
allow-hotplug wlan0
iface wlan0 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
〜抜粋〜
wpa-confの先頭に「#」を付けてコメントアウトするだけです。
wlan0のIPアドレス変更
初期設定の記事でも触れましたが、IPアドレスを固定で割り振る場合は、/etc/dhcpcd.confを編集します。
最終行に以下を追記します。
$ sudo vi /etc/dhcpcd.conf 〜抜粋〜 interface wlan0
static ip_address=10.0.0.1/24
wlan0のIPアドレスは、本アクセスポイントに接続するクライアントが最初にアクセスするゲートウェイになりますので、プライベートアドレスかつ、有線NICとは別のIPアドレス帯にします。
今回は、wlan0側を10.0.0.1としました。eth0側は別のIPアドレス帯にしてます。
サービス再起動しておきます。
$ sudo service dhcpcd restart
hostapd設定
hostapdの設定を変更します。参考にさせて頂いたブログのままでOKですが、赤字の箇所だけ変更しておけば基本的にはOKです。
$ sudo vi /etc/hostapd/hostapd.conf # This is the name of the WiFi interface we configured above interface=wlan0 # Use the nl80211 driver with the brcmfmac driver driver=nl80211 # This is the name of the network ssid=Pi3-AP # Use the 2.4GHz band hw_mode=g # Use channel 6 channel=6 # Enable 802.11n ieee80211n=1 # Enable WMM wmm_enabled=1 # Enable 40MHz channels with 20ns guard interval ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] # Accept all MAC addresses macaddr_acl=0 # Use WPA authentication auth_algs=1 # Require clients to know the network name ignore_broadcast_ssid=0 # Use WPA2 wpa=2 # Use a pre-shared key wpa_key_mgmt=WPA-PSK # The network passphrase wpa_passphrase=raspberry # Use AES, instead of TKIP rsn_pairwise=CCMP
変更箇所は、上から、SSID名(ssid)、無線のチャネル(channel)、パスフレーズ(wpa_passphrase)です。
SSID名は、お好きなものを記載下さい。
チャネルについては、2.4GHz帯ですので、1〜14chの内から記載下さい。
他のアクセスポイントと干渉しない様にするのがベストです。1か6か11にしておくのが一般的なようです。(調査するソフトなどもありますが本記事では割愛いたします。)
パスフレーズにつきましては、8文字以上63文字以下を入力して下さい。
(テスト様に短い文字列いれたらうまくいかず、文字数制限を忘れていました(笑))
念のためconfigファイルを指定しておきます(不要かも)
/etc/default/hostapdに上記ファイルを記載しておきます。
$ sudo vi /etc/default/hostapd DAEMON_CONF="/etc/hostapd/hostapd.conf"
DHCPサーバ選定
dnsmasq (DHCPサーバ+DNSサーバ)
こちらは使わないことにしました。
参考サイトではこちらをインストールして、DHCPサーバとDNSサーバを動かしていますが、なんやかんや名前解決が失敗する場合がありましたので、使うのやめました。。
isc-dhcp-server(DHCPサーバ)
こちらをインストールします。
DNSサーバについては使用しません。
理由としては、前述の通り失敗したからなのですが、DHCPで配布するDNSサーバのIPアドレスをインターネット上のDNSサーバとすることもできるので良しとします。
ということで今回DNSサーバは入れません!
手抜きです!(爆)
isc-dhcp-server インストール
apt-getでインストールするだけです。
$ sudo apt-get install isc-dhcp-server
isc-dhcp-server 設定変更
設定ファイルの最終行に追記します。
$ sudo vi /etc/dhcp/dhcpd.conf 〜抜粋〜 subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.50 10.0.0.150;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option domain-name "test-ap.com";
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
default-lease-time 600;
max-lease-time 7200;
}
上記は、wlan0のIPアドレス帯が10.0.0.1の場合ですので、環境に合わせて変更下さい。
ドメイン名は適当につけました。
配布するIPアドレスは.50〜.150にとりあえずしてます。
DNSサーバについては、Googleがインターネット上に公開しているパブリックDNSサーバのIPを指定しました。8.8.8.8と8.8.4.4の2つを登録しています。
次に使用するインタフェースを指定します。
$ cat /etc/default/isc-dhcp-server 〜抜粋〜 INTERFACES=""
デフォルトは上記の通りなので、ここでインタフェースwlan0を指定します。
$ sudo vi /etc/default/isc-dhcp-server 〜抜粋〜 INTERFACES="wlan0"
サービスを起動します。
$ sudo service isc-dhcp-server start
iptables 設定
iptablesでファイアウォールの設定とNATの設定をします。
$ sudo iptables -A INPUT -p icmp -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -j ACCEPT $ sudo iptables -P INPUT DROP
$ sudo iptables -P FORWARD DROP
$ sudo iptables -P OUTPUT ACCEPT $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
こんなところでしょうか。
2個目がざるな気もしますが(笑)
落ち着いたら修正します。ひとまず、赤字の箇所だけで動作しますので、黒字箇所はおこのみで修正下さい。
※最初しぼってしぼってとやっていたら、sshが切れてしまいました。。
sshが繋がらなくなったら場合は、電源切ってやりなおしてください。
動作問題なさそうなら、現状のiptablesの設定をファイルに落とし込みます。
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
起動時にiptablesの設定を読み込ませます。rc.localでも良いでしょうが、参考サイトの通り、dhcpcd-hooksに追加します。
$ sudo vi /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat iptables-restore < /etc/iptables.ipv4.nat
ルーティング有効化
net.ipv4.ip_forwardを0から1に書き換えます。
$ sudo vi /etc/sysctl.conf net.ipv4.ip_forward=1
起動!
設定色々変えましたので再起動します。
$ sudo reboot
hostapdもisc-dhcp-serverもサービス起動する設定に自動でなっていましたので、動くはずです。
動きました!
が、問題発生!
再起動した際に、動く時と動かない時がある。。
プロセス見てみると、どうもisc-dhcp-serverの方が起動に失敗する時があるようです。
うーむ。。
なんだかんだ試した結果、
他のサービスとバッティングしてそうな気がしたので、
isc-dhcp-serverのサービス起動をやめて、遅延させて起動することにしました。
isc-dhcp-serverの起動方法修正
デフォルトは以下の通り自動で起動します。
ランレベルの確認のため以下インストール
$ sudo apt-get install sysv-rc-conf
$ sudo sysv-rc-conf --list | grep isc
isc-dhcp-ser 0:off 1:off 2:on 3:on 4:on 5:on 6:off
自動起動をオフにします。
$ sudo sysv-rc-conf
isc-dhcp-serverまで移動して、Xを全てオフにしていきます。
オフになりました。
$ sudo sysv-rc-conf --list | grep isc
isc-dhcp-ser 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rc.localから起動させることにします。
念のため10秒まってから起動します。(もっと短くても大丈夫そうでしたが)
注意点としては、exit 0 の上に記載します。
$ sudo vi /etc/rc.local 〜抜粋〜 sleep 10s;/etc/init.d/isc-dhcp-server start & exit 0
再起動します
$ sudo reboot
成功!!
とりあえず大丈夫そうです!!
課題
ステルスSSIDができません。。
そういえば前もできないなーで終わっていた気がします。
/etc/hostapd/hostapd.confの
ignore_broadcast_ssid=0
を
ignore_broadcast_ssid=1
に変えればいいだけみたいですが。
見えちゃってます。2にしても変わらず。
結局0に戻しました。
とりあえず一旦終了。
最後に
実際は2週間前くらいに設定したので設定漏れあったらすみません。。
ではまた!
Team MicroSDHCカード 32GB Class10 ECOパッケージ 10年保証 SDHCカード変換アダプター付き (32GB)
- 出版社/メーカー: Team
- メディア: エレクトロニクス
- この商品を含むブログを見る
Raspberry Pi3 Model B ボード&ケースセット (Element14版, Clear)-Physical Computing Lab
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (3件) を見る