Raspberry Pi 5B(bookworm) アクセスポイント化＆ルータ化メモ

以前の記事

https://qiita.com/d-ebi/items/00fa2d173601d44f8c94

# 1. 導入
## 1.1. システム情報
モデル：Raspberry Pi 5 Model B Rev 1.0
OS：Debian GNU/Linux 12 (bookworm)

```shell_session
$ 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/"
$ cat /proc/cpuinfo
processor	: 0
BogoMIPS	: 108.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x4
CPU part	: 0xd0b
CPU revision	: 1

processor	: 1
BogoMIPS	: 108.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x4
CPU part	: 0xd0b
CPU revision	: 1

processor	: 2
BogoMIPS	: 108.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x4
CPU part	: 0xd0b
CPU revision	: 1

processor	: 3
BogoMIPS	: 108.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x4
CPU part	: 0xd0b
CPU revision	: 1

Revision	: d04170
Serial		: aaad2061a3e50842
Model		: Raspberry Pi 5 Model B Rev 1.0
```

## 1.2. アクセスポイントで作成する設定情報

| 設定対象           | 設定値                            | 備考                                |
|-------------------|-----------------------------------|-------------------------------------|
| Wi-FiのMACアドレス | `{MAC_ADDRESS}`                   | `iw dev`で表示される値               |
| SSID              | `{YOUR_RASPBERRY_PI_SSID}`        | 自分の設定したいSSIDに読み替える      |
| パスワード         | `{YOUR_RASPBERRY_PI_AP_PASSWORD}` | 自分の設定したいパスワードに読み替える |
| コネクション名     | `hotspot`                         | コネクション名、何でもよい             |
| IP範囲            | `192.168.50.1/24`                 | `ipv4.address 192.168.50.1/24`で設定 |
| 認証方式           | WPA2-PSK ※                       | `wifi-sec.proto rsn`で設定          |
| 暗号方式           | AES ※                            | `wifi-sec.pairwise ccmp`で設定      |

※`wifi-sec.key-mgmt wpa-psk` が前提

## 1.3. 前提条件
1. Wi-Fiが有効化されていること
2. 無線LAN接続が既に設定済みであること
3. 無線LANのネットワークインターフェース名は`wlan0`とする

# 2. アクセスポイント用のインターフェース設定
# 2.1. Macアドレス確認
```shell_session
$ iw dev
phy#0
	Unnamed/non-netdev interface
		wdev 0x3
		addr 00:00:00:00:00:00
		type P2P-device
		txpower 31.00 dBm
	Interface wlan0
		ifindex 4
		wdev 0x2
		addr {MAC_ADDRESS}
		ssid Buffalo-A-8680
		type managed
		channel 48 (5240 MHz), width: 80 MHz, center1: 5210 MHz
		txpower 31.00 dBm
```

## 2.2. インターフェース追加
```shell_session
$ sudo iw phy phy0 interface add ap0 type __ap
$ sudo ip link set ap0 address {MAC_ADDRESS}
```

## 2.3. 設定の永続化
```shell_session:/etc/udev/rules.d/99-ap0.rules
SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="{MAC_ADDRESS}", KERNEL=="phy0", \
  RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
  RUN+="/bin/ip link set ap0 address {MAC_ADDRESS}"
```

## 2.4. アクセスポイント化設定
```shell_session
$ nmcli con add con-name hotspot ifname ap0 type wifi ssid "{YOUR_RASPBERRY_PI_SSID}"
$ nmcli con modify hotspot wifi-sec.key-mgmt wpa-psk
$ nmcli con modify hotspot wifi-sec.proto rsn
$ nmcli con modify hotspot wifi-sec.pairwise ccmp
$ nmcli con modify hotspot wifi-sec.psk "{YOUR_RASPBERRY_PI_AP_PASSWORD}"
$ nmcli con modify hotspot 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
$ nmcli con modify hotspot ipv4.address 192.168.50.1/24
```

## 2.5. 有効化
```shell_session
$ nmcli connection up hotspot
```

## 2.6. 接続確認
```shell_session
$ sudo apt install -y nginx
```

スマホ・タブレット・PCなどの端末でWi-Fi接続設定にて`{YOUR_RASPBERRY_PI_SSID}`と`{YOUR_RASPBERRY_PI_AP_PASSWORD}`を使い接続し、http://192.168.50.1 でアクセスし確認する。上手く行っていれば接続でき、ページ表示もできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222089/e53e96a4-3247-3f1a-70ea-08bbc1996d9e.png)

nginxは接続確認用なので、不要なら消す。

```shell_session
$ sudo apt remove --purge nginx
```

# 3. ルータ化設定
現時点では追加した`ap0`に接続した場合、`wlan0`側のネットワークが見られないため、`wlan0`からはインターネットに行けても`ap0`に接続した機器はインターネット接続ができない。IPフォワード設定を行ない、`ap0`に接続した端末からもインターネットに行けるようにする。

## 3.1. IPフォワード設定
`net.ipv4.ip_forward=1`がデフォルトでコメントアウトされているため、なんでもよいのでテキストエディタを使いコメントを外す。

```conf:/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
```
## 3.2. 再起動

```shell_session
$ sudo systemctl reboot --now
```

## 3.3. インターネット疎通確認
ブラウザでhttps://www.google.com などWebサイトURLでアクセスできることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222089/f348a00b-10a1-0cab-a442-2dcd15b75c06.png)

# 4. 回線速度
私の環境では以下の通りの結果となった。速いとは言えないものの、外出先ならこの程度のスピードが出れば十二分なように思う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222089/8a67d2ae-13d2-638f-2619-b29ff96868cc.png)

参考までに、自宅のWi-Fiルータに直でアクセスしてスピードテストした結果は以下の通り。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222089/354a37cf-938b-b788-7bcb-e1e7dd3ee4f6.png)

# 5. 参考リンク
* [Turn Your Raspberry Pi into an Access Point (Bookworm ready) – RaspberryTips](https://raspberrytips.com/access-point-setup-raspberry-pi/)
* [ラズパイ4とNetworkManagerのWi-Fiアクセスポイント化はコマンド1行 | ラズパイダ](https://raspida.com/networkmanager-wifi-ap)
* [ラズパイをWPA2とAESに接続 : limepikoのblog](http://lime-piko.blog.jp/archives/11502644.html)