Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Raspberry Pi 3 B+を WiFiアクセスポイントとして運用する

RasPiをWiFiアクセスポイントに設定すると、
機器の接続で楽できて便利ですね。
今回はそんな話。

実際のところ

参考もと様にスクリプト例が置いてありましたので、
こちらを参考に……。

#!/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=192.168.24.2,192.168.24.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
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
 
# /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"