新しいものづくりがわかるメディア

RSS


「土日で完成! 趣味のラズパイ」

土日で完成! 趣味のラズパイ ラズパイをWi-Fiルーターにする

いまやWi-Fi環境は当たり前になり、多くの方が自宅でWi-Fiルーターを使っているかと思います。それとは別に、何かのテストをするために別のWi-Fi環境が必要になったときには、ラズパイを活躍させるのも1つの手です。今回はラズパイをWi-Fiルーターにして、アクセスポイントを作る方法について解説します。

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ルーター化が完成です。

Windowsなどから「raspifwifi」が参照できれば、Wi-Fiルーター化が完成 Windowsなどから「raspifwifi」が参照できれば、Wi-Fiルーター化が完成

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る