Dockerコンテナを使って、IBM Cloud(旧SoftLayer)にVPN接続する方法
拙者、IBM Cloudで作った鯖にVPNで接続する必要がありましてね。IBM Cloudの公式ドキュメントをパラリパラリと読んだんス。そしたら、MotionProとかいう謎のVPNクライアントをインストールする必要があるそうで。
■ MotionPro VPNクライアントのMac版がとても微妙!
このMotionProのMac版が、絶妙に微妙!拙者はMacユーザーなので、Macのクライアントをインストールしたんですけども、接続情報を設定したプロファイルの設定情報が背景黒で文字色グレーってどうなの。ぜんぜん読めないよね、うん。
さらに、いざログインボタン押したら、接続アカウントとパスワードの設定されてる箇所の背景が白で文字色も白って、まじでどうしてそうなった?
あとこれは完全に個人的な感想だけれども、ちょっとこのクライアントあやしい雰囲気する。中華製。なんだかとても信用できない。だからあんまりPCに直接インストールしたままにしたくないなぁ、なんて思ったりしましてね。
というわけで、正直なところ、MotionProは使いたくない。だけど、IBM Cloudの鯖にVPN接続するためには現状、これ以外の選択肢がない。
■ MotionPro VPNクライアントが動くDockerコンテナをつくった
MotionProクライアントのインストール場所として、Dockerの上ならまぁ隔離空間だし許容できるかな、ってことで、CentOS7をベースに、Dockerイメージを作ってみますた。DockerHubで絶賛公開ちう。
今回つくったDockerイメージのソースコードはこちら。
ビルドの自動化は今回はじめてGithub Actionsを使ってみたんすけど、CircleCIよりサクサクしてて、すごくイィ!って思った。
■ MotionPro VPNクライアントDockerの使い方
DockerHubのページにも使い方は書いたのですが、英語なのでね、ここに日本語でも書いておきますね。
基本、このDockerイメージはbashで起動される前提です。というのも、VPN接続は確立するのは、このDockerコンテナの中で手動で行うのでね。順番としては、1. コンテナの起動 -> 2. コンテナの中に入ってVPN接続を確立 -> 3. コンテナの中からIBM Cloudの鯖に向けてSSH接続してなにかしらの作業 -> 4. 作業が終わったらVPN接続を解除 -> 5. コンテナから抜ける -> 6. コンテナを停止する、てな感じで使われることを想定してます。
将来的には、このイメージをベースにして、terraformとかansibleとかkubectlとかhelmとか、DevOpsに必要なツールと設定ファイルをプリセットした新しいDockerイメージを作ってチームにシェアすれば、設定マニュアルとか書かなくても、必要なツールがみんなに配布できるなぁ、なんて野望を持ってたりもしますけどもね。
前置きがながくなりますた。使い方かきます。
起動方法はこんな感じです。フォアグラウンドかつ対話モードで起動すれば、すぐにDockerの中に入れます。バックグラウンド起動をお望みの方は、--detachオプションに変えてください。
$ docker run --hostname my-vpn-client --name my-vpn-client --interactive --tty --privileged w0o0ps/motion-pro-vpn-client
[root@my-vpn-client /]$
コンテナの中では、既にMotionProコマンドがインストールされているので、そのコマンドを使ってVPN接続を開始できます。Mac版のMotionProクライアントよりLinux版のほうが、接続にかかる時間が断然早い・・・。あ、${VPN_ENDPOINT}、${YOUR_ACCOUNT}、${YOUR_PASSWORD} のところは、実際の環境に合わせてください。
[root@my-vpn-client /]$ MotionPro --host ${VPN_ENDPOINTS}
Only one method: radius
Input username: ${YOUR_ACCOUNT}
Input password for authentication: ${YOUR_PASSWORD}
login successfully!
starting vpn...
current status:0
current status:0
Connect successfully!
Vpn is connected!
これでVPN接続が確立できました。SSHでIBM Cloudの鯖にプライベートIPアドレスでアクセスして、煮るなり焼くなりやっちまってオッケーです。
[root@my-vpn-client /]$ ssh ${SERVER_ACCOUNT}@${PRIVATE_IP_ADDRESS}
作業が終わったら、VPN接続を解除し、コンテナからドロンします。
[root@my-vpn-client /]$ MotionPro --stop
stop connection successfully!
[root@my-vpn-client /]$ exit
$
これで終わりなんだけど、あの一番はじめのDockerの起動が長くてうざいな、って人は、docker-composeを使うと便利です。中身はこんな感じで。
version: '3'
services:
my-vpn-client:
container_name: my-vpn-client
hostname: my-vpn-client
image: w0o0ps/motion-pro-vpn-client:latest
tty: true
privileged: true
■ まとめ
MotionProクライアントは、Linux版が一番安定してると思う。