Raspberry Pi 3 を無線 LAN アクセスポイント化する備忘録

Gadget
Photo by hyt.

Raspberry Pi 3 を無線 LAN アクセスポイント化する備忘録です.

梅雨時期だからでしょうか.なぜか色々な機材が壊れてその対応でアタフタしているのですが,モバイルバッテリーで動くアクセスポイントが一つ手元にあると便利だよなぁ……ということで,手元に余っていた Raspberry pi model 3 で作ってみることにしました.

なお,作るのは Wifi ルーターではなくて,Wifi コンバーターです.ルーティングとか NAPT はやりません(Wifi ルーターを作る記事はよく見かけますが,コンバーターは見たことない).

ベース OS

素直にいくなら Raspbian だと思いますが,今回は DietPi の最小構成を使います.理由は,

  • 経験的ではありますがとても安定して動く.
  • 最小構成がとても小さい.
  • SDカードを別のPCに刺し,dietpi.txt の該当欄を編集することでネットワークのアドレス等を簡単に設定できる.

からです.なお,最小構成ではなくて,WiFi-HotSpot オプションを選択するという手もありましたが,色々仕様に合わないところが多いので,今回は使いませんでした(これ,無線LANアクセスポイント化と言うより,簡易無線LANアクセスルーター化だと思う).

インストールの詳細については,過去記事

DietPi インストール備忘録
はじめに以前御紹介した PINE A64+ですが,標準的なインストールイメージだと,5回に2回程度は再起動に失敗してしまいます.何回か電源を入れ直せば起動するので,これまでだましだまし使ってきたのですが,色々見てると DietPi の出来が...

の通りで,さらに,これに加えて,以下のコマンドを最初に追加インストールしました.インストールは単に「apt install ****」ですね.

  • エディタ他: vim, less
  • ネットワーク系: bmon, iftop, dnsutils, net-tools

有線LANと無線LANのブリッジ

まず,必要なソフトウェアをインストールします.

# apt install bridge-utils

また,無線LANを有効化します./etc/modprobe.d/disable_wifi.conf を全てコメントアウトします.

# vi /etc/modprobe.d/disable_wifi.conf
#blacklist brcmutil
#blacklist brcmfmac
#blacklist cfg80211

なお,dietpi-config → 7: Network Options: Adapters → Onboard Wifi: [On] の様に選ぶことで無線LANを有効にできるはずなのですが,なぜだかうまくいかない.バグなのかもしれません.

さらに,/etc/network/interface を以下の通り変更しました.

# cat /etc/network/interfaces

# Location: /etc/network/interfaces
# Please modify network settings via: dietpi-config
# Or create your own drop-ins in: /etc/network/interfaces.d/

# Drop-in configs
source interfaces.d/*

# Local
auto lo
iface lo inet loopback

# Ethernet
allow-hotplug eth0
iface eth0 inet manual

# WiFi
allow-hotplug wlan0
iface wlan0 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

# Bridge
auto br0
iface br0 inet dhcp
bridge_ports eth0
# address 192.168.0.100
# netmask 255.255.255.0
# gateway 192.168.0.1
# dns-nameservers 8.8.8.8 8.8.4.4

また,/etc/sysctl.d/r.conf として以下の内容のファイルを配置しました.これななくても構いませんが,あとでルーティングなんかが必要になったときのためです.

# cat /etc/sysctl.d/r.conf 
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.default.forwarding = 0

なお,設定項目の概要は,

/etc/ufw/sysctl.conf 覚書 - Qiita
/etc/ufw/sysctl.conf のコメント行の和訳。#Configuration file for setting network variables/etc/sysctl.conf …

に簡単な説明があります.

再起動して,ブリッジインターフェースにきちんと IP アドレス等が割り当たっていることを確かめます.

# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::ba20:efff:fee5:eeec  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:15:ee:9c  txqueuelen 1000  (イーサネット)
        RX packets 317  bytes 48703 (47.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 171  bytes 21601 (21.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether b8:27:eb:15:ee:9c  txqueuelen 1000  (イーサネット)
        RX packets 317  bytes 48703 (47.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 171  bytes 23349 (22.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (ローカルループバック)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:40:bb:c9  txqueuelen 1000  (イーサネット)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.b827eb15ee9c	no		eth0

問題なく設定できている様です.

Wifi HotSpot 化

hotspot 化のために必要なパッケージを追加します.

# apt install hostapd

また,設定ファイルを以下の内容で /etc/hostapd/hostapd.conf として配置しました.

# cat hostapd.conf 
interface=wlan0
bridge=br0
driver=nl80211
ssid=DietPi-HotSpot
country_code=JP
hw_mode=g
channel=3
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=dietpihotspot
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ieee80211n=1

各設定項目の概略は以下を見ればだいたい意味が分かるかと.

hostapd.conf 覚書 - Qiita
/usr/share/doc/hostapd/examples/hostapd.conf.gz に記載されているコメントの日本語訳。定義AP(Access Point): 無線/有線 LAN サ…

アクセスポイントとしてきちんと動くかどうかテストしてみます.

# hostapd -d /etc/hostapd/hostapd.conf

これで,ノートPCなどから,

  • SSID: DietPi-HotSpot
  • PASSWORD: dietpihotspot

として見えます.試しに接続してみてネットにつながれば動作確認終了です.

自動起動

自動起動させるために systemd の設定ファイルを /etc/systemd/system/hostapd.service として配置します.ただし,なぜだか初期状態だとこのファイルは /dev/null へのシンボリックリンクとなっています.

これはどうも systemd からは「マスク」されたサービスだと認識されるみたいで,まず,以下の様にマスクを解除しなければなりません.

# systemctl unmask hostapd.service

解除後,/etc/systemd/system/hostapd.service を以下の内容で配置します.

# cat /etc/systemd/system/hostapd.service 
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=network.target
 
[Service]
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf
 
[Install]
WantedBy=multi-user.target

その後,

# systemctl enable hostapd.service
# systemctl start hostapd.service

としてやることで,自動起動するようになります.

速度は最大で 5MByte/s(40Mbyte/s) くらいしか出ませんが,モバイルバッテリーでそれなりの時間動きますし,中身は Linux なので,やろうと思えば色々できるってのが良いところなんじゃないかなと思います.

以上!

タイトルとURLをコピーしました