遠隔地にある設備を操作したいという案件があるため、Raspberry PiにLTEドングルを接続して、遠隔地からWi-Fi+LANで接続された設備を遠隔操作するためのルーターを実現してみたいと思います。システム構成は以下のとおりです。
Raspberry Piをルーター化する作業を行い、その作業をまとめました。LTE回線はソラコムで、RasbperryPiにOnyx LTE USBドングル SC-QGLC4-C1を挿入してルーターを実現します。
なお、VPNサーバーの構築や設定については今回の説明には含んでいません。
Piのセットアップ
Raspberry PiのOSは公式のダウンロードサイトの中段あたりにある「Raspberry Pi OS Lite」をダウンロードしました。
電源を投入したら環境設定をします。
sudo raspi-config
一旦、Wi-Fi、キーボード、SSHの有効化などの設定を行います。
- System Options -> Wireless LANで一旦、Wi-Fi経由でインターネットに接続をします。
- Interface Option -> SSHで、SSHを有効にします。
- Localisation Options -> TimezonでタイムゾーンをTokyoに設定します。
- 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のホームページに詳細が記載されていますのでこちらを参照してください。
URL:https://users.soracom.io/ja-jp/guides/usb-dongles/soracom-onyx/raspberrypi/
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
DNSの設定
/etc/dnsmasq.conf
のファイルを開き、接続されたネットワークに応じて割り振るIPアドレスの指定を行います。
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
Wi-Fiアクセスポイントの設定
/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
再起動して動作していれば作業完了です