docker の内部ネットワークへVPNで接続する
こんな感じのネットワークを構築します。
※筆者はVPNについてまるで素人なので、言いたいことがあれば是非是非コメント欄やついったへオナシャス><
1.SoftEtherVPNのdockerコンテナをセットアップ
docker run -d --name softethervpn --cap-add NET_ADMIN -p 500:500/udp -p 4500:4500/udp -p 443:443 -e USERNAME=ユーザ名 -e PASSWORD=パスワード -e PSK=事前共有鍵 --restart=unless-stopped siomiz/softethervpn
「ユーザ名」「パスワード」「事前共有鍵」の値はおこのみで設定してください。
また、ポート転送するポートは、必要なものだけにしておいたほうが良さそうです。
2.ufwでポートを開く
ufw allow 443 ufw allow 500 ufw allow 4500
※設定方法の詳細は 「docker run -p hostPort:containerPort」で転送したポートへのアクセスをufwで制限する - くんすとの備忘録 を参照
3.VPN Clientのインストールと設定
インストール
ここからダウンロードしてインストール
http://www.softether-download.com/ja.aspx?product=softether
4.Dockerコンテナの作成
JenkinsとRedmineのコンテナを作成する
docker run -d --name jenkins --restart=unless-stopped blacklabelops/jenkins docker run -d --name redmine --restart=unless-stopped 74th/redmine-all-in-one:JP
※ポートの外部公開はしない
5.DockerコンテナのIPアドレスを調べる
docker ps -q | xargs docker inspect -f "{{.Name}} {{.NetworkSettings.IPAddress }}"
/redmine 172.17.0.4 /jenkins 172.17.0.3 /softethervpn 172.17.0.2
こんな感じで、予定通りのIPアドレスが振られています。
6.DockerコンテナへVPN越しに接続する
疎通確認
当然ながら、VPNを接続していない状態では、pingは通りません。
C:\work>ping 172.17.0.3 172.17.0.3 に ping を送信しています 32 バイトのデータ: 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 172.17.0.3 の ping 統計: パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
C:\work>ping 172.17.0.3 172.17.0.3 に ping を送信しています 32 バイトのデータ: 172.17.0.3 からの応答: バイト数 =32 時間 =210ms TTL=63 172.17.0.3 からの応答: バイト数 =32 時間 =214ms TTL=63 172.17.0.3 からの応答: バイト数 =32 時間 =219ms TTL=63 172.17.0.3 からの応答: バイト数 =32 時間 =223ms TTL=63 172.17.0.3 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 210ms、最大 = 223ms、平均 = 216ms
つながりました!
ブラウザからの接続確認
こっちもOKです!
注意点など
- SoftEtherVPNについて
- 今回は443ポートを使いましたが、実運用では変えておいた方がよさそうです。
- 今回利用したSoftEtherVPNのdockerコンテナは、サーバー管理マネージャは使えないっぽい。
- dockerコンテナ作成時、サーバ管理用のパスワードにランダム文字列を割り当ててるっぽいので。