「土日で完成! 趣味のラズパイ」
土日で完成! 趣味のラズパイ ラズパイをWi-Fiルーターにする
いまやWi-Fi環境は当たり前になり、多くの方が自宅でWi-Fiルーターを使っているかと思います。それとは別に、何かのテストをするために別のWi-Fi環境が必要になったときには、ラズパイを活躍させるのも1つの手です。今回はラズパイをWi-Fiルーターにして、アクセスポイントを作る方法について解説します。
土日で完成! 趣味のラズパイ
第16回 ラズパイとChatGPTで遊ぼう——圧電ブザーで音を鳴らす
第15回 ラズパイとChatGPTで遊ぼう——気温/湿度/気圧を測定する
第14回 ChatGPTで遊ぼう——ラズパイで作ったデジタル時計に天気情報も表示させる
第13回 ラズパイとChatGPTで遊ぼう——液晶時計を作る
第12回 ラズパイとChatGPTで遊ぶ——その1:Lチカさせてみる
第11回 ラズパイをブリッジモードで使って、Wi-Fi接続する
第10回 ラズパイをWi-Fiルーターにする
特別編 【実機レビュー】よりパワフルになったRaspberry Pi 5を検証!
第9回 VolumioでラズパイからSpotifyやradikoを楽しむ
第8回 ラズパイで音楽プレーヤー「Volumio」を楽しむ
第7回 GPSを導入して正確な時刻を刻む
第6回 ラズパイをNTPサーバーにする
第5回 ラズパイを使ってデジタル時計を作る
第4回 Raspberry Pi Camera Module 3を使って見守りカメラを作る
第3回 BME680の測定データを小型ディスプレイに表示させる
第2回 空気質センサー「BME680」で空気汚染度を測る
第1回 ラズパイ工作の基本! 気温と湿度、気圧を計測する
一覧ページへ
dhcpcdを設定する
dhcpcdは、DHCPサーバーからホストのIPアドレス、ネットマスク、ブロードキャストアドレスを取得して、ラズパイに設定するためのサービスです。ラズパイのWi-Fi側にIPアドレスを割り当てて、アクセスポイントとして使えるようにします。
まずはdhcpcdをインストールします。
$ sudo apt install dhcpcd
続いて設定ファイルを変更します。以下のコマンドを入力します。
$ sudo nano /etc/dhcpcd.conf
ファイルが表示されたら、以下の内容を最後に記述します。
interface wlan0 static ip_address=192.168.2.1/24
ここでは、Wi-Fiルーターに接続するデバイスに「192.168.2.2」から始まるアドレス空間を割り当てるようにしています。
hostapdを設定する
続いてWi-Fiルーターのアクセスポイントとして動作する「hostapd」を設定します。hostapdは、最新のRaspberry Pi OSである「bookworm」にインストールされていますが、設定ファイルがありませんので「hostapd.conf」を作成し、設定内容を記述する必要があります。
以下のコマンドを入力してhostapdをインストールします。
$ sudo apt install hostapd
続いてhostapd.confを作成します。
$ sudo nano /etc/hostapd/hostapd.conf
まっさらなテキストファイルが開かれますので、以下の内容を記述してください。
interface=wlan0 driver=nl80211 hw_mode=b channel=4 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wmm_enabled=1 country_code=JP ieee80211ac=0 ieee80211d=1 ieee80211h=1 local_pwr_constraint=3 spectrum_mgmt_required=1 wpa=3 wpa_key_mgmt=WPA-PSK ssid=raspiwifi wpa_passphrase=(設定するパスワードを記述)
ここに書かれているのは以下の内容です。
・interface=wlan0
接続するインターフェースを規定します。今回はラズパイの無線LAN側を使うので「wlan0」となります。
・driver=nl80211
接続に利用する無線LAN(Wi-Fi)インターフェースのドライバです。
・hw_mode=b
利用する無線LAN規格(周波数帯)です。「b」はIEEE 802.11b、「g」はIEEE 802.11g、「a」はIEEE 802.11aとなります。今回はIEEE 802.11bを使うので「b」にします。
・channel=1
使用する周波数チャンネルです。すでにWi-Fiルーターがあるなら、「WiFi Analyzer」などのツールで、今使われているチャンネルを調べてそれらと干渉しないように設定しましょう。
・macaddr_acl=0
MACアドレスによるフィルタリングですが、ここはオフ(0)の設定にします。
・auth_algs=1
認証アルゴリズムです。WPAを使う場合は「1」、WEPなら「2」、両方使うときは「3」、暗号化なしの場合は「0」です。今回はWPAを使います。WPAのバージョンには1~3がありますが、その設定は後述します。
・ignore_broadcast_ssid=0
SSIDを第三者に見られないようにする設定です。今回はオフ(0)にします。
・ieee80211ac=0
IEEE 802.11acを有効にするかどうかです。今回は利用しませんので「0」とします。
・wmm_enabled=0
WMM(WME)、QoS制御の規格に関する設定です。今回は利用しませんので「0」とします。
・country_code=JP
日本で使うのでJPとします。
・ieee80211d=1
・ieee80211h=1
IEEE 802.11dとIEEE 802.11hという、各国の規制に沿った出力制御を行う規格の設定です。有効にするので両方とも「1」とします。
・local_pwr_constraint=3
・spectrum_mgmt_required=1
無線の出力などに関する設定です。
・wpa=3
使用するWPAのバージョンを設定します。WPAは「1」、WPA2は「2」、両方使うときは「3」です。
・wpa_key_mgmt=WPA-PSK
利用する共有鍵認証の方式です。
・ssid=raspiwifi
使用するSSIDです。ここでは「raspiwifi」としていますが、任意に決めてしまって構いません。
・wpa_passphrase=******
接続する際のパスワードを決めます。パスワードは8~64文字の間で設定できます。
では次にhostapdの動作を決めるファイルを編集します。以下のコマンドを入力します。
$ sudo nano /etc/default/hostapd
このファイルの13行目にある「#DAEMON_CONF=""」を以下のように編集します。先頭にある#も削除しておきましょう。
DAEMON_CONF="/etc/hostapd/hostapd.conf"
次にhostapdを動作させるのですが、スタートしようとすると以下のようなエラーが表示されます。
$ sudo systemctl restart hostapd Failed to restart hostapd.service: Unit hostapd.service is masked.
この場合は以下のような手順でマスクを外し、再起動させます。
$ sudo systemctl unmask hostapd $ sudo systemctl restart hostapd
hostapdが動作しているかどうか、以下のコマンドで確かめておきます。このように表示されればOKです。
$ sudo systemctl status hostapd ● hostapd.service - Access point and authentication server for Wi-Fi and Ethern> Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; preset: enab> Active: active (running) since Tue 2023-11-21 14:56:17 JST; 11s ago Docs: man:hostapd(8) Process: 2012 ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.pid $DAEMON_OP> Main PID: 2014 (hostapd) Tasks: 1 (limit: 8734) CPU: 73ms CGroup: /system.slice/hostapd.service mq2014 /usr/sbin/hostapd -B -P /run/hostapd.pid /etc/hostapd/hosta> 11月 21 14:56:17 raspiwifi systemd[1]: Starting hostapd.service - Access point > 11月 21 14:56:17 raspiwifi hostapd[2012]: wlan0: interface state UNINITIALIZED-> 11月 21 14:56:17 raspiwifi hostapd[2012]: wlan0: interface state COUNTRY_UPDATE> 11月 21 14:56:17 raspiwifi hostapd[2012]: wlan0: AP-ENABLED 11月 21 14:56:17 raspiwifi systemd[1]: Started hostapd.service - Access point a
dnsmasqのインストール
次にDNSサーバー機能を持つ「dnsmasq」をインストールして設定します。以下のコマンドを入力します。
$ sudo apt install dnsmasq
続いて設定ファイル「dnsmasq.conf」を編集するのですが、長いので今ある設定ファイルの名前を変更して、新たにdhsmasq.confを作成します。以下のように入力します。
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.def $ sudo nano /etc/dnsmasq.conf
まっさらなテキストファイルが開かれるので、以下の内容を記述します。
interface=wlan0 dhcp-range=192.168.2.2,192.168.2.20,255.255.255.0,24h
この設定では、DNSサーバーを動かすインターフェースを無線LAN側に、またアドレス空間を192.168.2.2から192.168.2.20に設定し、このアドレスの範囲でIPアドレスが振り分けられるようにしています。
次に接続されたデバイスがインターネットに接続できるように、IPマスカレードを設定します。IPマスカレードとは、グローバルなIPアドレスをLAN内の複数の端末で共有する仕組みのことです。ここではeth0に割り当てられているIPアドレスをwlan0で共有します。まずはIPマスカレードを実行する「iptables」をインストールしましょう。
$ sudo apt install iptables
続いて以下のコマンドを入力します。
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
この項目では以下の内容を設定しています。
・-t nat
natテーブルを使用する
・-A POSTROUTING
POSTROUTINGチェインを使用し、内部ネットワークから外部ネットワークへ出ていくパケットのソースIPを書き換える
・-o eth0
パケットが出ていくインターフェースを指定する(ここでは「eth0」)
・-s 192.168.2.0/24
IPマスカレードを設定するアドレス空間を指定する
・-j MASQUERADE
IPマスカレードを行う
次に、この設定を設定ファイルに書き出します。
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
上記のコマンドがラズパイが起動する際に実行されるように「rc.logal」のファイルを編集します。以下のコマンドでnanoを起動します。
$ sudo nano /etc/rc.local
「exit 0」とある行の前に、以下の内容を追記します。
iptables-restore < /etc/iptables.ipv4.nat
パケットフォワード機能の設定
続いてラズパイでパケットフォワード機能を設定するために、「/etc/sysctl.conf」を編集します。
$ sudo nano /etc/sysctl.conf
としてファイルが表示されたら、以下の行の先頭にある「#」を削除します。
net.ipv4.ip_forward=1
設定した内容を読み込みます。
$ sudo sysctl -p
ネットワークインターフェースの作成
新しいネットワークインターフェースを作成し、静的IPアドレスを設定します。以下のコマンドを入力してnanoを起動します。
$ sudo nano /etc/network/interfaces
起動したらファイルの最後の行に、以下の内容を追加します。
allow-hotplug wlan0 iface wlan0 inet static address 192.168.2.1 netmask 255.255.255.0
ここまで設定が終わったらラズパイを再起動しましょう。
$ sudo reboot
ネットワーク上に「raspiwifi」が見えているかと思います。これでラズパイのWi-Fiルーター化が完成です。