2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetworkManager を使わずに Raspberry Pi をアクセスポイントにする

Last updated at Posted at 2025-12-14

はじめに

では、NetworkManager を使って Raspberry Pi をアクセスポイントとして動作させる方法を紹介しました。
調べてみた感じ、NetworkManager を使わずに hostapddnsmasq を用いて Raspberry Pi をアクセスポイントとして動作させる方法もあったので、そっちについてもまとめようと思います。

環境

  • ハードウェア: Raspberry Pi 5
  • OS:
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

前提

まず、ワイヤレス通信ができるようになっている必要があります。

$ nmcli radio wifi

の結果が disabled だった場合、Raspberry Pi のワイヤレス通信に関する国の設定ができていないので、以下のコマンドで設定します。

$ sudo raspi-config nonint do_wifi_country JP

次に、今回は NetworkManager を使わずに、RaspberryPi をアクセスポイントにしたいので、対象のネットワークインターフェースを NetworkManager の管理から外します。
※ 今回の例では、対象のワイヤレス通信用のネットワークインターフェースを wlan0 とします。

$ nmcli device status
DEVICE         TYPE      STATE                   CONNECTION
eth0           ethernet  connected               Wired connection 1
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
$ sudo nmcli device set wlan0 managed no

$ nmcli device status
DEVICE  TYPE      STATE                   CONNECTION
eth0    ethernet  connected               Wired connection 1
lo      loopback  connected (externally)  lo
wlan0   wifi      unmanaged               --

reboot した際に元に戻ってしまうのが嫌であれば設定ファイルに記述しておきます。

/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile]
unmanaged-devices=interface-name:wlan0
$ sudo systemctl restart NetworkManager
$ nmcli device status
DEVICE  TYPE      STATE                   CONNECTION
eth0    ethernet  connected               Wired connection 1
lo      loopback  connected (externally)  lo
wlan0   wifi      unmanaged               --

設定

hostapd の設定をする

まず、Raspberry Pi をアクセスポイント化するために hostapd の設定をします。

hostapd is a user space daemon for access point and authentication servers.

に書かれているとおり、主にアクセスポイントとして動かすためのデーモンプロセスを制御したり、認証周りの設定をするためのパッケージです。

$ sudo apt update && sudo apt install -y hostapd

以下の設定ファイルは、日本で動かすために最小限のものになります。(※ ssid, password に関しては適当に仮置きしています。)
ほかにもかなりたくさんのオプションがありますが、/usr/share/doc/hostapd/examples/hostapd.conf に用意されている example が参考になります。

/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211

ssid=my-ap
country_code=JP

# Operation mode (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz),
# g = IEEE 802.11g (2.4 GHz), ad = IEEE 802.11ad (60 GHz); a/g options are used
# with IEEE 802.11n (HT), too, to specify band). For IEEE 802.11ac (VHT), this
hw_mode=g

channel=1

# 0 = accept unless in deny list
# 1 = deny unless in accept list
# 2 = use external RADIUS server (accept/deny lists are searched first)
macaddr_acl=0

wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=password

初期状態だとユニットがマスクされていて、/dev/null へのシンボリックリンクになっているので、外して起動します。

$ sudo systemctl unmask hostapd.service
$ sudo systemctl start hostapd.service

dnsmasq

hostapd には、DHCP server としての機能が備わっていないので、dnsmasq を使います。

$ sudo apt update && sudo apt install -y dnsmasq

今回はプライベートネットワーク内のみでの通信を想定しているため、DNS server の IP アドレスやゲートウェイの設定はせずに、動的に割り当てる IP アドレスの範囲のみを指定しています。
構築するサブネットの IP アドレスの範囲は一旦なんでもいいので、5つしか割り当てることができないプライベートネットワークなってしまいますが、192.168.10.1/24 ~ 192.168.10.5/24 として、wlan0 には 192.168.10.1/24 を割り当てることにします。
最後の 12h は IP アドレスのリース時間です。

/etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.10.1,192.168.10.5,12h
$ sudo systemctl restart dnsmasq.service

固定IPを割り当てる

上に記載した通り wlan0 には固定で 192.168.10.1/24 を割り当てます。
ここは NetworkManager を使って固定 IP を割り当てればいいのかなと思っていたのですが、
色々と競合をしてしまうようだったので、networkd を使って設定しました。

/etc/systemd/network/wlan.network
[Match]
Name=wlan0

[Network]
Address=192.168.10.1/24
$ sudo systemctl restart systemd-networkd

再起動後に wlan0 に対して 192.168.10.1/24 が割り当たっていることを確認できます。

$ ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.1/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::2ecf:67ff:fe01:b232/64 scope link
       valid_lft forever preferred_lft forever

確認

ここまでの設定が完了すると、Raspberyy Pi をアクセスポイントとして動かすことができるようになります。
他の Rasbperry Pi から探して繋いでみます。

$ nmcli device wifi
IN-USE  BSSID              SSID                MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
        XX:XX:XX:XX:XX:XX  my-ap              Infra  1     65 Mbit/s   55      ▂▄__  WPA2

$ sudo nmcli device wifi connect my-ap --ask
Password: ••••••••
Device 'wlan0' successfully activated with '151da5ed-e15c-41f7-a211-77360de6bdb5'.

うまく繋がったので、Wi-Fi のクライアントとして動作する、この Rasbperry Pi のネットワークインターフェースに、先ほどの範囲からIPアドレスが割り当てられているかを見てみます。

$ ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.4/24 brd 192.168.10.255 scope global dynamic noprefixroute wlan0
       valid_lft 43063sec preferred_lft 43063sec
    inet6 fe80::4338:8831:af35:282c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

問題なく 192.168.10.4/24 が割り当てられています。
最後に、アクセスポイントに対して問題なく通信ができるかを ping して確認しておきます。

$ ping -c 3 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=8.31 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=6.30 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=8.01 ms

--- 192.168.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 6.304/7.540/8.308/0.882 ms
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?