サイトアイコン KOKENSHAの技術ブログ

Raspberry Pi をWifi Access Pointにする簡単な方法!

皆さん、こんにちは株式会社虹賢舎の川島 賢です。

今日は、Raspberry PiをWifi AP(アクセスポイント)にする方法を共有したいと思います。

ハードウェアとOSの準備

もしまだRaspberry Piのインストールが完了していない場合は、下記の記事を参照してください。

Raspberry Pi OSインストール

必要なもの

Raspberry Pi 2の場合、下記の写真のように、USBのWifiモジュールが必要です。(赤いケースの上に乗っているもの、USBに刺しているのは、マイクです。関係ないです。)

Raspberry Pi 3の場合は、内蔵されていますから、外付けは不要です。

ソフトウェアの準備と設定

ソフトウェアと設定はLewiscowles1986さんのgistを参考しました!Thank you!

gistはこちらです。

https://gist.github.com/Lewiscowles1986/fecd4de0b45b2029c390

日本語のコメントは、私が勉強のために追加したものです、ご参考になれば嬉しいです。

もちろん、すでに他の用途のために、ネットワーク関係の設定がある場合は、関連する設定ファイルのバックアップをとった方がオススメです。

下記のスクリプトを実行した場合、その前のネットワーク関係の設定の一部が上書きされたり、改変されたりすることがありますので、ご注意ください。

私の場合は、クリーンなOSから実行して、問題なく、アクセスポイントが現れまして、アクセスもできました!

#!/bin/bash
#
# This version uses September 2017 august stretch image, please use this image
#

# このスクリプトを使うときは、下記のように使う。
# sudo rPi3-ap-setup.sh password wifiapname
# =======================================================
# ルート権限かどうか調べる
# 数値1  -ne 数値2 :  -ne は比較演算子 数値1と数値2が等しくなければ真  not equal
# [と]の周りはスペースがないとエラーになる!
if [ "$EUID" -ne 0 ]
# $EUID==0の場合は、ルートだと
	then echo "Must be root"
	exit
fi

# $#シェルスクリプトに渡された引数の個数
# 数値1 -lt 数値2 : 数値1が数値2より小さければ真 less than
if [[ $# -lt 1 ]]; 
# 引数の数が1より小さければ、「パースワードを設定してくださいね」とメッセージを出す。
	then echo "You need to pass a password!"
	echo "Usage:"
	echo "sudo $0 yourChosenPassword [apName]"
	exit
fi

# アクセスポイントのパスワードを1番目の引数から設定する
APPASS="$1"
# アクセスポイントのSSIDをデフォルトでrPi3に設定する
APSSID="rPi3"

# もし引数の数が2だったら、2番目の引数をアクセスポイントのSSIDとして設定する。
if [[ $# -eq 2 ]]; then
	APSSID=$2
fi

# hostapdを一回削除する
# yはapt-getに質問されたら、yesと答えるという意味
# qqは静かに、処理する、メッセージを極力出さないようにという意味
apt-get remove --purge hostapd -yqq
apt-get update -yqq
apt-get upgrade -yqq
#
# hostapdとdnsmasqをインストールする
# hostapdはRaspberryPiに限らず、アクセスポイントにするDaemonのこと
# dnsmasqは軽量なDNSサーバとDHCPサーバ
apt-get install hostapd dnsmasq -yqq

# ヒアドキュメント:複数行の文字列を簡潔に記述するための機能
# EOFの文字が出現するまでの複数行を/etc/dnsmasq.confに追加してね!
cat > /etc/dnsmasq.conf <<EOF
interface=wlan0
dhcp-range=10.0.0.2,10.0.0.5,255.255.255.0,12h
EOF

# 上と同様に、/etc/hostapd/hostapd.confに複数行を追加する
cat > /etc/hostapd/hostapd.conf <<EOF
# 無線LANを使う
interface=wlan0
# 動作モード(使用する帯域)を指定する。
hw_mode=g
# チャネルを指定する
channel=10
# 
auth_algs=1
# WPA2を使用する
wpa=2
# 鍵管理アルゴリズムとしてWPA-PSKを使用する
wpa_key_mgmt=WPA-PSK
# 
wpa_pairwise=CCMP
# RSN / WPAの共有鍵暗号化方式としてCCMPを使用する
rsn_pairwise=CCMP
# 上で設定したパスワード
wpa_passphrase=$APPASS
# 上で設定したアクセスポイントのSSID
ssid=$APSSID
# IEEE 802.11n を有効にする
ieee80211n=1
#既定の WMM パラメータ(IEEE 802.11 draft; 11-03-0504-03-000e):
wmm_enabled=1
#
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
EOF

# sed 編集するコマンド
# -i 入力ファイルの上書き
# s 置換
# s/置換条件/置換文字/    置換条件を置換文字に変換する。最後にgを付けた場合は置換条件に当てはまるすべての文字列が置換される
# allow-hotplug wlan0 を削除する
sed -i -- 's/allow-hotplug wlan0//g' /etc/network/interfaces
# iface wlan0 inet manualを削除する
sed -i -- 's/iface wlan0 inet manual//g' /etc/network/interfaces
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf を削除する
sed -i -- 's/    wpa-conf \/etc\/wpa_supplicant\/wpa_supplicant.conf//g' /etc/network/interfaces
# #DAEMON_CONF="" を DAEMON_CONF="/etc/hostapd/hostapd.conf" に変更する
sed -i -- 's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' /etc/default/hostapd

# 上は色々削除したので、ここで必要な複数行を追加する
cat >> /etc/network/interfaces <<EOF
# Added by rPi Access Point Setup
allow-hotplug wlan0
# アクセスの固定IPを設定する
iface wlan0 inet static
	address 10.0.0.1
	netmask 255.255.255.0
	network 10.0.0.0
	broadcast 10.0.0.255

EOF

# /etc/dhcpcd.conf に denyinterfaces wlan0 を追加する。 >> が重要、上書きではなく追加する!
echo "denyinterfaces wlan0" >> /etc/dhcpcd.conf

# サービスを自動起動に設定する
systemctl enable hostapd
systemctl enable dnsmasq

# サービスを起動させる
sudo service hostapd start
sudo service dnsmasq start

# 完了メッセージを表示する
echo "All done! Please reboot"

いかがですか?

これで、一通り、Raspberry Piでアクセスポイント(Access Point)の設定の流れを把握しましたでしょうか。

上の内容がご参考になれば幸いです!

無事再起動すれば、Wifiアクセスポイントが現れるはずです!

様々な応用ができますね。

何かフィードバックがあれば、Twitterの方にでもメッセージ等をいただければ嬉しいです!

 

おまけ

インストール後、アクセスポイントを停止したい場合、下記のコマンドを実行してください。

sudo update-rc.d hostpad disable
sudo update-rc.d dnsmasq disable

アクセスポイントを再開させるには、下記のコマンドを実行してください。

sudo update-rc.d hostpad enable
sudo update-rc.d dnsmasq enable

ESP32をアクセスポイントにした上、ウェブサーバーを立てる!

Raspberry Pi Zero Wで作るPimoroniのPirate Radio インタネットラジオ

[amazonjs asin=”B0718T232Z” locale=”JP” title=”HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード”]

モバイルバージョンを終了