やりたいこと
やりたいことと以下のような前提の環境を想定します。
- Raspberry PiはSORACOM Airでネットワーク接続されている
- クライアントはRaspberry PiにSSH接続したい
- クライアントはインターネット直接接続できない。Proxyを通した接続は可能。
- クライアントとProxyは3128/TCPポートのみ通信可能
- ProxyはSquidで構築されている
- Proxyには固定グローバルIPが割り当たっている
この場合にProxyとNapterを通してRaspberry PiにSSH接続ができるかを試しました。
Proxy(Squid)設定
インターネット接続可能なSquidサーバを準備します。インストール作業は省略します。
話の流れ上、ProxyサーバのプライベートIPは 192.168.10.100
とします。
Napterのドメインをホワイトリストに追加
Squidのホワイトリストを作成します。
ホワイトリストには .napter.soracom.io
と、Napterのドメインを設定します。
$ cat /etc/squid/whitelist .napter.soracom.io
squid.confの設定
squid.confはそれぞれの環境での書き方があると思いますので、最低限だけ残しました。
サービスポートはSquidのデフォルトの 3128
とします。
$ cat /etc/squid/squid.conf acl whitelist dstdomain "/etc/squid/whitelist" http_access allow whitelist http_access deny all http_port 3128
Squidの設定反映
Systemd環境なら以下のように設定をロードします。
$ sudo systemctl reload squid
SquidサーバのグローバルIPを取得
Napterに接続許可設定するために、SquidサーバのグローバルIPを取得しておきます。
せっかくなのでSORAOCMのエンドポイント使って確認してみます。この値は後でNapterを設定する時に使います。
$ curl -s checkip.amazonaws.com
xxx.xxx.xxx.xxx
Napterの設定
Napterの設定はCLIからもできますが、WEB管理画面から実行してみます。
まずは対象のRaspbery Piに接続されているSIMを選択します。
その腕、「操作」>「オンデマンドリモートアクセス」をクリックします。
アクセス元IPアドレスに、先程 checkip.amazonaws.com
のエンドポイントで調べたProxy(Squid)のグローバルIPアドレスを設定してOKをクリックします。これでProxyを通してのみNapterを通したアクセスが可能になります。
SIMに接続できるグローバルIPとポートが生成されるので、こちらを使っていきます。このIPとポートは一時的なものなので、オンデマンドリモートアクセスを削除すると開放されて、次回作成時には別のIPとポートが割当たります。
クライアントからの接続確認
ここまでで以下のように接続用の設定ができましたので、クライアントから接続してみます。 (このIPとポートは一時的に降り出されるもので実行毎に変化します)
nc(netcat)コマンドを使った接続確認
クライアントからProxyを通した接続確認してみます。
- PROXY_IPはSquidサーバーのプライベートIPアドレス(この環境では
192.168.10.100
)を指定します。 - Napterの設定で取得した情報からホスト名(
52-192-41-216.napter.soracom.io
)と ポート(36149
) を指定します。
$ PROXY_IP=192.168.10.100 $ nc --proxy-type http --proxy ${PROXY_IP}:3128 52-192-41-216.napter.soracom.io 36149
上手く繋がるとRaspberry PiからOpenSSHのメッセージが返されます。私の手元の検証用のRaspberry Piですが以下のようなメッセージを返してくれました。メッセージ確認したら Ctrl + C
で終了します。
ssh configの設定
先程のnetcatコマンドを ProxyCommand
として ~/.ssh/config
に設定するとProxyを通したSSHが可能となります。
Host *.napter.soracom.io ProxyCommand nc --proxy-type http --proxy 192.168.10.100:3128 %h %p
後はRaspberry Piのユーザを指定して繋ぐだけです。SSH鍵またはパスワードなど設定した認証方法でログオンできるはずです。
RPI_USER=pi ssh -p 36149 ${RPI_USER}@52-192-41-216.napter.soracom.io