SORACOM Napterを使いSquid Proxy経由でデバイスにSSH接続する

やりたいこと

やりたいことと以下のような前提の環境を想定します。

  • 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

参考URL

soracom.jp