「SIMカード+4GPi」でラズパイをモバイルWiFiルーターにする

# モバイルWiFiルーターとは？

小型で軽量な通信端末のことであり、一例を挙げるとポケットWiFiです。

本記事は「4GPi+SIMカード+ラズベリーパイ」でモバイルWiFiルーターとして
データ通信する手順を紹介します。

# 4GPiとは？
[4GPi(フォージーパイ)](https://mechatrax.com/products/4gpi/)は、ラズベリーパイ専用に開発された4G(LTE)通信モジュールです。

以下サイトで4GPiの使用例を紹介しております。
・　[メカトラックス様公式サイト(受託開発・製造)](https://mechatrax.com/development/)
・　[Stretch 版 4GPi のイメージから Buster へのアップグレード～4GPiを使うメリット～](https://qiita.com/vascodagama/items/e8e2546a7b359ed20f64#4gpi%E3%82%92%E4%BD%BF%E3%81%86%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88)

# 必要な物

◎ ラズベリーパイ用4G(LTE)通信モジュール「4GPi」
◎ ACアダプタ(12V 2A)　
◎ 標準SIM(私の場合は"NanoSIM" + "標準SIMへの変換アダプタ"で対応)
◎ ラズパイ
◎ パソコン
◎ MicroSDカード


取り付け手順・機器の画像・補足事項は[Stretch 版 4GPi のイメージから Buster へのアップグレード～必要な物～](https://qiita.com/vascodagama/items/e8e2546a7b359ed20f64#%E5%BF%85%E8%A6%81%E3%81%AA%E7%89%A9)で紹介しておりますのでそちらを参照ください！

# 「SIMカード+4GPi」でラズパイをモバイルWiFiルーターにする

## 下準備

### OSのダウンロード

[4GPiインストール済のbuster版イメージ](https://mechatrax.com/data/4gpi/4gpi-buster-lite-20190820.zip)をダウンロードします。

### OSイメージをMicroSDカードへ書き込み

今回は有名な書き込みソフト「Etcher」を使用しました。
書き込み手順は[こちらのサイトを参照](https://azriton.github.io/2017/11/12/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%81%AEOS%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E7%84%BC%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%AFEtcher%E3%81%8C%E4%BE%BF%E5%88%A9%EF%BC%86UI%E3%82%AB%E3%83%83%E3%82%B3%E3%81%84%E3%81%84/)

### パソコンからssh接続

ブラウザの表示をコピペしたいので、パソコンからssh接続します。
もちろんラズパイ直接入力でも問題ありません。

```bash
ssh pi@IPアドレス
```

のちの手順でwlan0をアクセスポイントとして使用するためラズパイは有線LANでつなぐことをお勧めします。
有線LANの場合、IPアドレスはifconfigコマンドで表示されるeth0のinetを入力してください。

### ラズパイのパッケージを更新

```bash
sudo apt-get update
sudo apt-get upgrade
```

### SIMカード情報を登録


| 項目|Y!Moblieの場合 |
|:-----------------|------------------:|
| APN|plus.acs.jp|
| ユーザー| ym|  
| パスワード|ym|       

Y!Moblieの場合は

```Bash
sudo nmcli con add type gsm ifname "*" con-name ymobile apn plus.acs.jp user ym password ym
```

接続できているかifconfigコマンドで確認します。

```Bash
ifconfig wwan0
```

inetにIPアドレスが表示されていればokです。


## wlan0を静的IPにする

アクセスポイントにするにはワイヤレスポートに割り当てられた静的IPアドレスが必要となります。

まずは設定ファイルを変更します。

```bash
sudo vi /etc/dhcpcd.conf
```

dhcpcd.conf内でwlan0に静的IP(192.168.4.1)を設定します。
また、wpa_supplicantの設定ファイルを読み込まないようにします。

ファイルの最終行に以下の3行を追加してください。

```bash
interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant
```

そして、変更した設定ファイルにて再起動します。

```bash
sudo service dhcpcd restart
```
## DHCPサーバーの設定(IPアドレスの自動割り当て)
DHCP(Dynamic Host Configuration Protocol)を設定します。
DHCPとは「コンピュータがネットワークに接続する際に必要な設定情報を自動的に割り当てる仕組み」です。

まずはdnsmasqをインストールします。

```bash
sudo apt install dnsmasq
```

既存のファイルは使用しませんので、リネームして別ファイルとして保存しておきましょう。


```bash
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
```

新しくファイルを新規作成します。

```bash
sudo vi /etc/dnsmasq.conf
```

中身に以下を2行を記載します。

```bash
interface=wlan0      
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h
```
24時間のリース時間で、192.168.4.2から192.168.4.20のIPアドレスを提供します。

dnsmasqの更新された設定ファイルにて再起動します。

```bash
sudo service dnsmasq restart
```

起動状態をチェックします。

```bash
sudo systemctl status dnsmasq
```

以下のように「Active:」の後にactive(runnnig)と記載されていればokです。

```bash
Active: active (running) since Mon 2019-09-16 16:27:48 JST; 2min 8s ago
```



## ラズパイをアクセスポイントにする

アクセスポイントを設定するパッケージ「hostapd」をインストールします。

```bash
sudo apt-get install hostapd
```


設定ファイルを新規作成します。

```bash
sudo vi /etc/hostapd/hostapd.conf
```

次に、以下内容を記載します。
「ssid」と「wpa_passphrase」は好きな値を設定してください。

```bash
interface=wlan0
driver=nl80211
ssid=RPiHotSpot
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=1234567890
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
```

「ssid」がWiFi接続の際に表示される名称でパスワードが「wpa_passphrase」です。

次にこの構成ファイルの場所をシステムに伝える必要があります。

```bash
sudo vi /etc/default/hostapd
```

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

起動するファイル名は、先ほどの設定ファイル「hostapd.conf」のフルパスを入力します。

hostapdを以下手順で起動します。

```bash
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
```
起動状態をチェックします。

```bash
sudo systemctl status hostapd
```

以下のように「Active:」の後にactive(runnnig)と記載されていればokです。

```bash
Active: active (running) since Mon 2019-09-16 16:27:48 JST; 2min 8s ago
```

## wlan0にアクセスした端末をSIMカードと通信する設定

sysctl.confを編集します。

```bash
sudo vi /etc/sysctl.conf
```

以下のコメントアウトを外します。

```bash
net.ipv4.ip_forward=1
```


wwan0のマスカレードを追加します。

```bash
sudo iptables -t nat -A  POSTROUTING -o wwan0 -j MASQUERADE
```

iptablesのルールを保存します。

```bash
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
```

ブート時にこれらのルールをインストールします。

```bash

sudo vi /etc/rc.local
```

exit 0の上の行に次のコマンドを追加します。

```bash
iptables-restore < /etc/iptables.ipv4.nat
```

ラズパイを再起動します。

```bash
sudo reboot
```
ここで有線LANを抜きましょう。
私の場合、有線LANが接続されたままだと「RPiHotSpot」に接続できますが、
Webサイトを読み込むことができませんでした。(干渉?)

スマホでWiFiとして設定できるか確認しましょう。

<img width="375" alt="wifi.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/2b42c440-7db5-b3f9-8dc5-d3b48998d45e.jpeg">

以上で設定完了です。

# おまけ(スピードチェック)

スマートフォン内にSIMカードを挿入してデータ通信した場合は19.0Mbps、
4GPiからスマートフォンにWiFiとしてデータ通信した場合は12.0Mbpsでした。

スマートフォンから直接SIMを読み込むほうが少し早かったです。
4GPiの速度はパラボラアンテナを作ると少しは上がるかもしれません。

# 参考サイト
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md