RaspberryPiでWiFi中継機のようなアクセスポイントを作る

WiFiアクセスポイントまで距離的に届かないという状況ができたため、
WiFiに接続してネットワークに接続しつつ、自身が別SSIDでアクセスポイントとなるようなラズパイを作りました。
(純粋な中継機が欲しかったものの作り方が分からなかった。そもそも中継機を使ったこともなく仕組みも理解していない。。)

構成

  • OS: ubuntu 20.04
  • raspberry pi 3B+

ラズパイはWiFiモジュールが1つ内蔵されていますが、WiFi中継機的なことをするためにWiFiドングルを使います。 今回使ったのは多分 TP-Link Archer T2U Nano (だいぶ前に買って眠ってたやつ)

だいたいインターフェース構成は下図のような感じになります。

構成図

基本的にはイーサネットは使いませんが、初期構築やメンテナンス用としてイーサネットでつなぎたいので、WiFi(wlan1)とイーサネット(eth0)でボンディングするようにしてます。

WiFiドングルを使うための準備

WiFiドングルが認識されているかを確認

$ sudo apt install wireless-tools
$ iwconfig

WiFiドングルにあたるデバイスが表示されなければ、おそらくドライバを準備する必要があります。

https://github.com/aircrack-ng/rtl8812au

今回は↑を使ってドライバを準備しました。

$ sudo apt install dkms
$ git clone https://github.com/aircrack-ng/rtl8812au
$ cd rtl8812au
$ sudo make dkms_install
$ make
$ sudo make install
$ iwconfig
$ lsmod | grep -E 88.*au
88XXau               2174976  0

iwconfigでWiFiドングルにあたるデバイスが表示されるようになればok

netplanでネットワークインターフェースの設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# /etc/netplan/99_interface.yml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      optional: true
    wlan0:
      dhcp4: false
      dhcp6: false
  wifis:
    wlan1:
      dhcp4: false
      dhcp6: false
      access-points:
        "<SSID>":
          password: <password>
  bonds:
    bond0:
      interfaces:
        - eth0
        - wlan1
      parameters:
        mode: active-backup
        primary: eth0
        mii-monitor-interval: 1000
  bridges:
    br0:
      addresses:
        - <略>
      interfaces:
        - bond0
        - wlan0
      gateway4: <略>
      nameservers:
        <略>
$ sudo netplan apply

hostapdでWiFiアクセスポイントの設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
interface=wlan0
driver=nl80211
bridge=br0
ssid=<SSID>
wpa=2
wpa_passphrase=<passphrase>
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
country_code=JP
hw_mode=g
channel=1
$ sudo systemctl restart hostapd
$ sudo systemctl enable hostapd