Raspberry Piでリモート操作用ルーターを作る

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

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

なお、VPNサーバーの構築や設定については今回の説明には含んでいません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136933/182ba5cd-a2dc-61c8-eea3-90da8f041301.png)


## Piのセットアップ
Raspberry PiのOSは公式の[ダウンロードサイト](https://www.raspberrypi.com/software/operating-systems/)の中段あたりにある「Raspberry Pi OS Lite」をダウンロードしました。

電源を投入したら環境設定をします。

```bash
sudo raspi-config
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136933/880fc18d-3c39-d48c-6aca-5996953d5f18.png)

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

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

一度再起動します。

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

```bash
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をルーター化する
基本的な操作はこちらにドキュメントがあり、そこから一部変更をしています。

URL: https://www.raspberrypi.com/documentation/computers/configuration.html#setting-up-a-routed-wireless-access-point

### 必要なソフトウエアのインストール
```
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)を固定にします。

```:/etc/dhcpcd.conf
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アドレスの指定を行います。

```:/etc/dnsmasq.conf
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(アクセスポイント名)とパスフレーズを指定します。

```:/etc/hostapd/hostapd/conf
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の設定ファイルを指定します

```:/etc/default/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
```
再起動して動作していれば作業完了です