Raspberry Piをルーター化してみた

遠隔地にある設備を操作したいという案件があるため、Raspberry PiにLTEドングルを接続して、遠隔地からWi-Fi+LANで接続された設備を遠隔操作するためのルーターを実現してみたいと思います。システム構成は以下のとおりです。

Raspberry Piをルーター化する作業を行い、その作業をまとめました。LTE回線はソラコムで、RasbperryPiにOnyx LTE USBドングル SC-QGLC4-C1を挿入してルーターを実現します。

VPNサーバーはAWS上に構築済なので、今回の説明には含んでいません。

Raspberry Piのセットアップ

Raspberry PiのOSは公式のダウンロードサイトの中段あたりにある「Raspberry Pi OS Lite」をダウンロードしました。

電源を起動したら環境設定をします。

sudo raspi-config

一旦、Wi-Fi、キーボード、SSHの有効化などの設定を行います。

  1. System Options -> Wireless LANで一旦、Wi-Fi経由でインターネットに接続をします。
  2. Interface Option -> SSHで、SSHを有効にします。
  3. Localisation Options -> TimezonでタイムゾーンをTokyoに設定します。
  4. Localisation Options -> WLAN CountryでWi-Fiの使用場所をJPに設定します。

一度再起動します。

sudo reboot

再起動したらソフトウエアのアップデートを行い、再び再起動します。

sudo apt-get update
sudo apt-get upgrade
sudo reboot

再起動後はsudo apt-get updateでエラーが発生するようになってしまいましたが、このコマンドで復旧できます。

sudo apt-get update --allow-releaseinfo-change

LTE回線でインターネットに接続する

Soracomのホームページに詳細が記載されていますのでこちらを参照してください。

設定方法: Raspberry Pi (Raspberry Pi OS) の設定 | Soracom Onyx - LTE™ USB ドングルをセットアップする | ソラコムユーザーサイト - SORACOM Users

IoT に関わるアイディアを実現するために、ソラコムが提供するデバイスやサービスの基本的な利用方法を説明するサイトです。開発者向けの API リファレンスや SORACOM CLI…

LTE回線で接続ができたら、Wi-FiをOFFにしてインターネット接続ができるか確認をします。

pingの応答があればOKです

pi@raspberrypi:~ $ sudo ifconfig wlan0 down
pi@raspberrypi:~ $ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=311 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=300 ms

Rasbperry Piをルーター化する

必要なソフトウエアのインストール

sudo apt-get install dnsmasq
sudo apt-get install iptables
sudo apt-get install hostapd

IPアドレスを固定してルーターの設定をする

/etc/dhcpcd.confのファイルを開き、それぞれ、有線LANのIPアドレス(eth0)、Wi-Fiのアドレス(wlan0)を固定にします。

interface eth0
	static ip_address=192.168.10.1/24

interface wlan0
	static ip_address=192.168.11.1/24
	nohook wpa_supplicant

/etc/dnsmasq.confのファイルを開き、接続したデバイスに割り当てるIPアドレスを指定します。eth0とwlan0それぞれ個別にアドレスを割り当てるように記述します。

dhcp-range=tag:eth0,192.168.10.2,192.168.10.127,24h
dhcp-range=tag:wlan0,192.168.11.2,192.168.11.127,24h
dhcp-option=tag:eth0,option:router,192.168.10.1
dhcp-option=tag:wlan0,option:router,192.168.11.1

/etc/hostapd/hostapd.confにWi-Fiがルーターとして動作するための設定を行います。[SSID]と[PASSPHRASE]にはWi-FiのSSID(アクセスポイント名)とパスフレーズを指定します。

interface=wlan0
country_code=JP
driver=nl80211
ssid=[SSID]
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=[PASSPHRASE]
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

/etc/default/hostapdのファイルを開いてhostapdの設定ファイルを指定します

DAEMON_CONF="/etc/hostapd/hostapd.conf"

/etc/sysctl.confのファイルを開いてIPフォワードを有効化する設定を有効にします。

dhcpcdの起動

rfkill unblock wifi
sudo systemctl restart dhcpcd

dnsmasqの起動とdaemon化

sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq

hostapdの起動とdaemon化

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

ルーティング設定

eth0とeth0で接続されたネットワークをwwan0に転送するように設定します。

sudo iptables -A FORWARD -i wlan0 -o wwan0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wwan0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE

再起動して動作していれば作業完了です

sudo reboot