kuroの覚え書き

96の個人的覚え書き

ラズパイを無線ホストにする


ネット環境のない部屋にてラズパイによるデータ取得をする場合、データの回収にこまることがある。これまではそのためだけに無線ホスト(簡単には無線ルーター)をおいて、ラズパイをそこに無線または有線でつないで、別の無線端末(スマホとか)からホスト経由でsshとかウェブインターフェースで接続し、データ回収していた。ラズパイが無線ホストになってくれれば万事解決で話は早いんだけど、これまでラズパイのホスト化には成功していなかった。
今回久しぶりにトライしたところ、無事に構築できた。オマケとしてラズパイ自体をルーターとしてつかうことも可能となったので記録しておく。

やることは

  • dhcpcdを設定して無線LAN(wlan0)をstaticアドレスにする。
  • hostapdをインストールしてアクセスポイントにする。
  • dnsmasqをインストールしてDHCPサーバを建てる。
  • iptablesでポートフォワーディングすることでルーター化する。

最後の部分は今回の目的ではあくまでオマケだ。

設定としては無線ホストのアドレスを192.168.10.1とし、クライアントは192.168.10.11から192.168.10.50までにする。
DNSサーバはgoogleの8.8.8.8を利用。

使用したラズパイはRaspberry Pi 3B+
OSはRaspberry OS (64bitバージョン)Debian Bullseye

まずはdhcpcd
/etc/dhcpcd.confを編集

interface wlan0
static ip_address=192.168.10.1/24

次にhosted

$ sudo apt install hostapd 
$ sudo cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/hostapd.conf

/etc/hostapd/hostapd.confを編集

hw_mode=g
channel=6
wpa=2
auth_algs=1
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ssid=kurotest
wpa_passphrase=Hogehoge

かなかな長大なファイルだが、入力した&確認した&コメントを外したのは上記くらいだった。

/etc/default/hostapdを編集

DAEMON_CONF="/etc/hostapd/hostapd.conf"

hostapdを起動

$ sudo systemctl unmask hostapd
$ sudo systemctl restart hostapd 

DHCPサーバーとしてはisc-dhcp-serverをインストールして使っているページが多かったのだが、うちの環境ではうまく動かなかった。(起動に失敗する)代わりにdnsmasqを使う

$ sudo apt install -y dnsmasq

/etc/dnsmasq.d/wlan0.confを編集

interface = wlan0
dhcp-range = 192.168.10.11, 192.168.10.50, 255.255.255.0, 24h
dhcp-option = option:router, 192.168.10.1
dhcp-option = option:dns-server, 8.8.8.8
listen-address = 127.0.0.1
log-queries
log-dhcp
$ sudo systemctl restart dnsmasq

ここまででラズパイを無線LANアクセスポイントかつDHCPサーバとして使えるようになったので、他の端末からラズパイに無線で直接つながって、アドレスも自動で配布してもらってアクセスできるようになった。

以下はついでなのでルーターとして有線LANの側とも橋渡ししてもらえるようにしておく。有線側がネットワークにつながっていなくてもDHCPを割り振ってもらえるようにしている都合でブリッジではなくルーターモードだ。

まずは/etc/sysctl.confを編集

net.ipv4.ip_forward=1

ここのコメントを外す。
次に

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

これでつながったはずなのだが、これでは起動するたびに同じコマンドを入れる必要があるため、

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

として
/etc/rc.localの最後の行「exit 0」の前に

iptables-restore < /etc/iptables.ipv4.nat

を入れておく。

以上。

追記
iptablesの設定をrc.localに入れるとどうもhostapdがうまく機能しなくなる。
一旦は外しておく。
外に出ることが必要なときだけコマンドであとから設定してやることにする。あくまでルーター化はおまけなので。