Raspberry Pi 3 Model B+でブリッジモードで動作するWifi APを構築する


# はじめに

![IMG_20191215_020514.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128123/83642e62-8bcd-9b70-32d2-e3d2805a623c.jpeg)

[前回の記事](https://qiita.com/xecus/items/4e635928e0c4c794517f)では、RaspberryPiを活用してCaptivePortal付きのWifiAPを作成しました。その際に、WifiアダプターをAP化するhostapdに加えて、DHCPサーバーであるisc-dhcp-server, DNSサーバーであるdnsmasqを導入し、いわゆるルーターモードで動作するWifiAPを作りました。今回の記事では、ブリッジモードで動作するAPを作ります。(接続するクライアントがeth0側のサブネットに直接つながっているように見えるモードです)



# 手順

<img width="1346" alt="スクリーンショット 2019-12-18 14.27.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128123/809c38ef-73de-4a75-05b1-7223f8fc95f8.png">


## 初期設定

- brctlコマンドを有効化する為に、下記を入れておくと良いかもしれません(任意)

```shell-session
pi@raspberrypi:~ $ sudo apt install -y bridge-utils
```

## Network Interfaceの設定

- eth0 (インターネット側)
  - IP: 192.168.10.200
  - Netmask: 255.255.255.0
  - Gateway: 192.168.10.1
  - DNS: 8.8.8.8
- br0 (eth0-wlan0ブリッジ用)
  - IP: 192.168.10.201
  - Netmask: 255.255.255.0

```configuration:/etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

iface eth0 inet static
address 192.168.10.200
netmask 255.255.255.0
gateway 192.168.10.1
dns-nameservers 8.8.8.8

auto br0
iface br0 inet static
address 192.168.10.201
netmask 255.255.255.0
bridge_ports eth0 wlan0
```

## hostapdの導入＆設定

hostapdは一言でいうと、RaspberryPi上のWifiアダプターを親機化する為のソフトです。

```shell
pi@raspberrypi:~ $ sudo apt install -y hostapd
```

下記のように設定ファイルを書くことで、SSIDや認証方式、Wifiパスワード等が設定可能です。

```config:/etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=nl80211
ssid=_TAGURO_SANZYOU
hw_mode=g
channel=8
wmm_enabled=1
macaddr_acl=0
ieee80211n=1
ht_capab=[HT40-][HT40+][SHORT-GI-20][SHORT-GI-40]
ieee80211ac=0
vht_capab=
ieee80211d=1
country_code=JP
ieee80211h=1
local_pwr_constraint=3
spectrum_mgmt_required=1
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=YOUR_PASSWORD
```

参考: https://qiita.com/JhonnyBravo/items/5df2d9b2fcb142b6a67c

設定が完了したら下記手順で有効化します。

```shell-session
pi@raspberrypi:~ $ sudo systemctl unmask hostapd.service
Removed /etc/systemd/system/hostapd.service.
pi@raspberrypi:~ $ sudo systemctl start hostapd.service
pi@raspberrypi:~ $ sudo systemctl enable hostapd.service
````

## /etc/rc.localの編集

```config:/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# eth0の起動
ifup eth0

# br0の起動
ifup br0

# wlan0の省電力モードをOFFにする (不要かもしれない)
sudo iw dev wlan0 set power_save off

exit 0
```


## 動作テスト

<img width="360" alt="スクリーンショット_2019-12-16_02_28_24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128123/d488b64c-e0ad-0cf3-883c-3f0cc4682213.png">

設定に問題がなければ、`/etc/hostapd/hostapd.conf`で指定したSSIDでWifiAPが有効になります。前回の記事では、RaspberryPi内にDHCPサーバーを構築していたので、RaspberryPiがWifi接続クライアントに対してIPアドレスの割り当てをしていました。今回は、ブリッジモードどして動作している為、RaspberryPiのeth0につながる上位のルーターのDHCPからIPアドレス割り当てを受けています。