Raspberry PiでSORACOM Arcを利用してSORACOM Napterを使ってみた話

今日発表されたSORACOM Arcを早速使ってみたので記事にしました

今回の検証はこんな感じ

インターネット側から自宅のRaspberry Piにはルーター経由で踏み込めない前提で，
SORACOM Arcを利用してNapter経由でRaspbery PiにSSH接続を試みます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/04f6e98f-a737-5a51-f621-af25f53124ca.png)

（客先・現地行かなくてもしれっとメンテナンスできんじゃんこれ）



各種作業の具体的な手順は下記のドキュメントに詳しく記載されていますが，今回は大まかな流れと躓いたところを書いてみようと思います．

https://users.soracom.io/ja-jp/docs/arc/

手順としては「Getting Started：[バーチャル SIM/Subscriber を作成して WireGuard で接続する](https://users.soracom.io/ja-jp/docs/arc/create-virtual-sim-and-connect-with-wireguard/)」をお手本にしてみようと思います

# 手順
## Raspberry PiにWireGuardをインストールする

「WireGuard:[Installation](https://www.wireguard.com/install/)」に各Distribution別のインストールコマンドが載ってます．

Raspberry Pi OSはDebianベースなので

```(console)
$ sudo apt install wireguard
```

としてインストールを行っておきます．

## vSIMを登録する 

下記の手順に従ってSIMを登録します．

[バーチャル SIM/Subscriber を作成する](https://users.soracom.io/ja-jp/docs/arc/create-virtual-sim/)


~~自分の場合，（ここまでの手順を間違ってたのか，「[Peers]」の部分が間違っていたから消してあるのかわからないですが）SIM登録時に下記画面の赤枠で囲われた接続設定が出なかったので，この後の手順で補正してます．~~

(2021/06/24修正）
登録したらちゃんと赤枠の部分表示されました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/d339c0db-8656-da24-5df4-0c3dd2e26219.png)

## 認証情報を登録する

- SIM一覧で作成したSIMにチェックして，上部メニューから「詳細」を選択します．
- モーダルが開くので，「バーチャルSIM」→「CREDENTIALS」を選択し，モーダル下部右側の「USE AUTO-GENERATED CREDENTIALS」にある「Generate credentials」ボタンを押下します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/be0fa5f0-d66e-0674-ca71-c7f6c1a04102.png)

- ボタンの横に下記の用に認証情報が表示されるので記録しておきます．

```
{ "arcClientPeerPrivateKey": "foo", "arcClientPeerPublicKey": "bar" }
```


> 【参考】バーチャル SIM/Subscriber の認証情報を登録・削除する
> https://users.soracom.io/ja-jp/docs/arc/attach-credential/

## セッションを作成する

- SIM一覧で作成したSIMにチェックして，上部メニューから「操作」を選択肢，「Arcセッション作成を選択します」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/6e7dbaa3-f477-948b-0ea6-e4af484747e0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/91c40261-e5f6-3c00-dd0e-d9093fd6594f.png)

- 「作成する」ボタンを押下すると下記のような設定情報が表示されます．

```(console)
[Interface]
PrivateKey = <YOUR_PRIVATE_KEY>
Address = <arcClientPeerIpAddress>/32　←生成された時点で入ってるはず
 
[Peer]
PublicKey = <arcServerPeerPublicKey> ←生成された時点で入ってるはず
AllowedIPs = 100.127.0.0/16
Endpoint = <arcServerEndpoint> ←生成された時点で入ってるはず
```

- 上記の設定情報の`<YOUR_PRIVATE_KEY>`の部分を，前節で取得した認証情報の `arcClientPeerPrivateKey` に書き換えを行い，Raspberry Pi上の `/etc/wireguard/wg0.conf` として保存します．

```console
$ sudo vi /etc/wireguard/wg0.conf
```

# WireGuardを起動して接続する

```console
$ sudo wg-quick up wg0
$ ip a
（中略）
n: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet <arcClientPeerIpAddress>/32 scope global wg0
       valid_lft forever preferred_lft forever
```

ここまでの手順をこなしてWireGuard起動の上で，`ip a`コマンドでインターフェイスを表示した際に`wg0`が立ち上がっていれば成功です

# ユーザーコンソール上でアクセスしたいSIMがオンラインになったことを確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/c68c7619-af4d-13dc-17c0-decbef8c3ce2.png)


# SORACOM Napter（オンデマンドリモートアクセス）を利用してRaspbery PiにSSH接続する

ここからは通常のNapterを利用する手順です．
「SIM管理」画面でSIMにチェック入れて，「操作」からオンデマンドリモートアクセスを選んでホストとポート情報が表示されますので，SSHクライアントからアクセスします．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/e51ecd00-4396-fa05-427b-c31464108c63.png)

> 3G/LTE USBドングルを備えた遠隔地のオンプレサーバにSORACOM Napterを使ってSSH接続して保守を行う
> https://qiita.com/nc30mtd/items/82e889caf3c91d7e57c3

# まとめ

上記のような手順でSORACOM Arcを利用してSORACOM Napter経由でSSH接続をしてみました．


# おまけ

今回実験に使った我が家のRaspberry Piには，
酷使しすぎて底板が割れてしまったmyCobotがつながっていますので，これでどこからでも動かせるようになりますね
外にいながら自宅のロボットを動かせるセキュアな踏み台（？）ができたよ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310137/48ad6f9a-bf27-b99e-2e27-5e279dd813e2.png)