Raspberry pi 4 で5Ghz帯対応Wi-Fiスポットを作る【hostapd】

2021-09-30

はじめに

Wi-Fiスポットを作りましょう。 家庭内のLAN環境改善に利用してもよし、ハニーポットにしてもよし、 センサを繋いで家庭内のマシンに繋ぐために構築してもよし。

何かと利用ニーズはあるものです。

昔、自動車に乗せるGateWayをC言語で書いてました。 そういった、3G/4G対応の無線LANルータを作ったときの経験を活かして行きましょう。 (この記事には特別活かされている部分は無いですが…)

早速はじめましょう。

Locationの設定

hostapdを使って設定するのですが、Raspberry pi4として必要な手続きがあります。

RaspbianをGUIで繋いでいる場合、Settingから設定できると思いますよね? 私も思っていたのですが、どうにもJPがなさそうです。

仕方ないのでTerminalから設定していきましょう。

sudo raspi-config

5.SetLocationを選択します。 各設定を進めていきましょう。

L1 Locale

この設定は不要なのですが、一応やっておきましょう。

Jp__JP.UTF-8を選択してEnterを押します。

Default Localeとして、jp_JP.UTF-8を選択しましょう。

L4 WLAN Country

JP Japanを選びます。

一通りの設定が完了したら再起動します。

Wi-Fi化定番ソフトのインストール

sudo apt-get update
sudo apt-get install hostapd dnsmasq

Wi-Fiスポットの設定

dhcpの設定

先ずはdhcpdの設定から行います。 Wi-Fiに接続されたときに、IPアドレスの割り当てるDHCPサーバを構築するのがここでの手順です。

この手の設定ファイルを弄るのは怖いので、バックアップ取ります。

sudo cp  /etc/dhcpcd.conf /etc/dhcpcd.conf.back

設定ファイルを開いて次の文言を末尾に追加します。

sudo vim  /etc/dhcpcd.conf

デフォルトでコメントアウトされているものを有効にしていく作業がメインとなります。

interface wlan0
static ip_address=172.24.1.1/24
static routers=172.24.1.1
static domain_name_servers=172.24.1.1
static broadcast 172.24.1.255

もし上の記載がない場合は、同様に埋め込んでください。 デフォルトでコメントアウトされているものを有効にしていく作業がメインとなります。

追加するのは上記だけで良いのですが、全文載せます。

# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
hostname

# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid

# Persist interface configuration when dhcpcd exits.
persistent

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu

# Most distributions have NTP support.
#option ntp_servers

# A ServerID is required by RFC2131.
require dhcp_server_identifier

# Generate SLAAC address using the Hardware Address of the interface
#slaac hwaddr
# OR generate Stable Private IPv6 Addresses based from the DUID
slaac private

# Example static IP configuration:
# static ip_address=192.168.0.10/24
# static ip6_address=fd51:42f8:caae:d92e::ff/64
# static routers=192.168.0.1
# static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0

interface wlan0
static ip_address=172.24.1.1/24
static routers=172.24.1.1
static domain_name_servers=172.24.1.1
static broadcast 172.24.1.255

dnsmasq設定

接続された機器に払い出すIPアドレスのレンジを決定します。 dnsmasqを設定すると言いでしょう。 interfaceにはhostapdで設定したinterfaceを使いましょう。

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vim /etc/dnsmasq.conf
interface=wlan0
dhcp-range=172.24.1.10,172.24.1.100,255.255.255.0,24h

hostapd設定

Wi-Fiスポット化を実施しましょう。

sudo touch /etc/hostapd/hostapd.conf
driver=nl80211
interface=wlan0
country_code=JP
hw_mode=a
ieee80211d=1
ieee80211n=1
ieee80211ac=1
wmm_enabled=1
vht_oper_chwidth=0
channel=36
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_pairwise=TKIP
ssid=Pi4-AP
wpa_passphrase=raspberry

参考までに設定項目の中身を記載します。

設定項目 設定内容
hw_mode g=2.4GHz, a=:5GHz
auth_algs 0=無し,1=WPA,2=WEP,3=両方
interface 使用するnetwork interface
wmm_enabled WiFi Multimedia設定 0=無効,1=有効 *1
ssid Wi-Fi名称
wpa_passphrase パスワード
rsn_pairwise/wpa_pairwise TKIP,CCMP, TKIP CCMP

*1 WiFi Multimediaを有効にするかどうか無線QoS機能を有効にします。 動画などのストリーミング配信を行うときには、他の通信よりも優先的に処理をするようになります。

主要な設定といったらこの当たりですかね。

起動時読み込み設定ファイル設定

sudo vim /etc/default/hostapd
# Defaults for hostapd initscript
#
# WARNING: The DAEMON_CONF setting has been deprecated and will be removed
#          in future package releases.
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"

hostapdが起動時に呼び出される設定ファイルを設定します。

 エラー対応: Failed to start hostapd.service: Unit hostapd.service is masked.

こんなエラーが出たら一度unmaskして再度実行すると良いです。 systemctlにはサービス自体を起動出来なくするMask機能が備わっています。 実行不可能という方が正しいかもしれないですね。

unmaskとしたらこのサービスのシンボルリンクが呼べなくして実行不可状態を作り出しているようです。

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

実行結果

sudo reboot

再起動したら、Wi-Fiスポットとして検出できるようになっているはずです。

スマホからWi-Fi検索して、設定したパスワードを入力して接続してみましょう。

おわりに

Wi-Fiスポットとして設定することが出来ましたね。 IPフォワード設定を行えばインターネット接続もできるようになります。

無線LANルータが壊れた時の代替に使ってもいいでしょうし、街ナカに設置して無料Wi-Fiスポット面をして接続してきた人を観察するのもいいでしょう。

ワイの利用用途は、IP発行してもう一台のRaspberry piから繋ぎたいっていうニーズですのでこれ以上の設定はいまのところ不要かなと思っています。