Raspberry Pi Zero 2 W を Ubuntu 22.04 Server で Wi-Fiルーター化する手順

最終更新日

Raspberry Pi

(内蔵Wi-Fi+USBドングル構成)

             インターネット
                     │
          ┌──────────┴──────────┐
          │既存ルーター (例:192.168.3.1)
          │ SSID: HomeWiFi
          │ DHCP範囲: 192.168.3.2〜192.168.3.254
          └──────────┬──────────┘
                     │ Wi-Fi接続(クライアント)
                wlan0(内蔵Wi-Fi)
                     │ IP: 192.168.3.39
       ┌──────────────┴──────────────┐
       │ Raspberry Pi Zero 2 W(ルーター)
       │ OS: Ubuntu Server 22.04 (32bit)
       │ NAT / DHCP / DNS / AP機能搭載
       └──────────────┬──────────────┘
                 wlan1(USB Wi-Fi)
                     │ APモード
                     │ SSID: MyPiRouter
                     │ IP: 192.168.0.1
         ┌────────────┴────────────┐
         │              │             │
   iPhone(192.168.0.10)│PC(192.168.0.11)│IoT機器(192.168.0.12)

構成概要

用途インターフェースIPアドレス備考
上流(WAN)wlan0(内蔵Wi-Fi)192.168.3.39既存ルーターに接続(インターネット側)
下流(LAN / AP)wlan1(USBドングル)192.168.0.1アクセスポイントとして端末接続用

再設定に至ったわけ

以前に作っていたラズパイ無線ルーターの調子が悪くなってしまった事による再設定です。OS以外は同じような構成です。

どこが調子悪くなったかというと、起動途中で画面への出力が途切れてしまうという現象です。bootのテキストファイルとかイジってみても駄目でした。Ubuntu Server版のいわゆる黒い画面は映ったので、このディストリビューションを選択することにしました。

使用OS・環境

追加する無線LAN(USBドングル)は以前と同じTP-Linkの品を使っていて、ドライバのコンパイルまでは同じなので、過去記事(上記リンク先)を確認してみてください。make && sudo make install までは同じです。

  • Raspberry Pi Zero 2 W
  • OS:Ubuntu Server 22.04 32bit << ここを変更しました
  • 軽量構成(GUIなし)
  • 追加無線LAN(TL-WN725N)
  • 必要パッケージ:
sudo apt update
sudo apt install -y netplan.io hostapd dnsmasq iptables-persistent

1. ネットワーク設定(netplan

TP-Linkのドライバは認識済み、というところから始めます。

設定ファイル例: /etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  wifis:
    wlan0:
      dhcp4: true
      optional: true
      access-points:
        "YourHomeWiFi":
          password: "yourpassword"

  ethernets:
    wlan1:
      dhcp4: no
      addresses: [192.168.0.1/24]
      optional: true

ポイント

  • wlan0 は上流のWi-Fi(既存ルーター)に接続する「クライアント」
  • wlan1 はAP(下流LAN)として固定IPを割り当てるため、ethernets: に記述
  • renderer は networkd でOK

反映:

sudo netplan generate
sudo netplan apply

2. アクセスポイント(hostapd)設定

インストール

sudo apt install -y hostapd
sudo systemctl unmask hostapd
sudo systemctl disable hostapd
sudo systemctl stop hostapd

設定ファイル: /etc/hostapd/hostapd.conf

interface=wlan1
driver=nl80211
ssid=MyPiRouter
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
auth_algs=1
ignore_broadcast_ssid=0

# WPA2設定
wpa=2
wpa_passphrase=raspiwifi
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

参照先を設定

/etc/default/hostapd に以下を追記または修正:

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

3. DHCP / DNS サービス(dnsmasq

インストール

sudo apt install -y dnsmasq

設定ファイル: /etc/dnsmasq.conf

interface=wlan1
dhcp-range=192.168.0.10,192.168.0.100,12h
domain-needed
bogus-priv

wlan1(AP側)に接続した端末へIPを配布します。

4. NAT設定(iptables

IPマスカレード(NAPT)設定

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

転送許可ルール

# 内側 → 外側
sudo iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
# 外側 → 内側(戻り通信)
sudo iptables -A FORWARD -i wlan0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT

IP転送有効化 & 永続化

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo sed -i 's/^#*net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf

永続化設定

sudo apt install -y iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent enable

5. 各サービスの自動起動設定

sudo systemctl enable hostapd
sudo systemctl enable dnsmasq
sudo systemctl enable netfilter-persistent

6. 再起動して確認

sudo reboot

再起動後に以下を確認:

コマンド目的期待結果
ip addr swlan0, wlan1 のIP確認wlan0: 192.168.3.x / wlan1: 192.168.0.1
systemctl status hostapdAP起動確認active (running)
systemctl status dnsmasqDHCP稼働確認active (running)
ip route show defaultルーティング確認default via 192.168.3.1 dev wlan0

接続確認

  • スマホなどで SSID 「MyPiRouter」 を探して接続
  • IP が 192.168.0.x で割り当てられる
  • インターネット通信ができれば成功!

トラブルシューティングメモ

症状対処
dnsmasq が起動失敗systemd-resolved がポート53を使用 → 無効化
hostapd が落ちるwlan1 の設定競合 → netplanで wifis:ethernets: に変更
再起動後にIPが消えるsudo netplan generate を忘れない
NATが効かないsudo iptables -t nat -L -v でルール確認

インターフェイス名を固定

wlan0 — 内蔵無線LAN
wlan0 — 後付無線LAN

ip link show コマンドなどで link/ether のMACアドレスを確認
wlan1: link/ether b8:27:eb:xx:xx:xx
wlxa899999999: link/ether a8:99:99:99:99:99

sudo nano /etc/udev/rules.d/* この中のrulesにudevルールを書き込む

まとめ

Zero 2 W を Ubuntu Server 22.04 で
「内蔵Wi-Fi (wlan0) + USB Wi-Fi (wlan1)」構成の自動起動ルーター に仕上げる手順。

構成のポイント:

  • wlan0:WAN側(既存Wi-Fiルーターへ接続)
  • wlan1:LAN側(APモード)
  • hostapd + dnsmasq + iptables + netplan の連携で構築
  • 全自動起動化で Zero 2 W が単体ルーターとして稼働

以上になります。またお会いしましょう

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください