45秒でdockerでvpnサーバを建てる

nardtree
6 min readJan 4, 2020

--

参考 YouTubeのみなみチャンネル

Q. 45秒で何ができる?

A. 45秒でvpnサーバを建てられる

引っ越しのたびに光回線を引き直しているんだけど…

転職やライフステージの変化に応じて、アパートなどの家を変えているのだが、その度にnuro光などのその時の最速のインターネットに乗り換えているのですが、多くは工事が必要でそのためのNTTの手続きが遅い…。nuro光はNTT網の空きネットワークであるダークファイバを利用しているので、必ず工事が必要で、工事の一部をNTTに依頼しているのですが、2019年11月に引っ越し依頼をして、2020年1月まだ工事が開通していません。

GCPやAWSなどの予算が溢れないようにネットワークディスクやローカルで済む簡単な計算などは現在でも一部は家のオンプレのサーバでやっています。単純に自分の機械を触っている時間を除くとオンプレはコストはクラウドに比べてそんなに高くないのとネットワークの実験が色々できて遊びと勉強が両立できて良いです。

この人手不足とワークライフバランスが重要視される世の中なので、NTTの人を責める事はありませんが、水や電気やガスといった生命に関係するインフラは当日開くのに、ネット用な一部の人間には十分生命に関係するインフラがこんなに遅いのか解せません。

NTTの工事が終わるまでどうやり過ごすか

softbank airという旧PHSの電波網を利用した4G(に近い通信方式)でアクセスすることができます。
ちなみにこのデバイス、価格コムでボロクソに叩かれており、とにかく遅いです。WiMaxよりマシなところは、3日で10G制限がないことでしょうか。こんな制限されたら死んでしまう。

この遅さを何とかする方法も今回の方法で解決できたりします。 ←高速にはなりませんでした

図1. SoftBank Air(遅い)

この手の工事が必要ないモバイル回線を転用した高速通信の常として、グローバルIPアドレスが外部からどうやってもアクセス不能になるというデメリットがあります。

私の使い方だと安価な計算や大容量の高頻度アクセスが必要なディスクはオンプレ、めちゃ重い計算はGCPに降っているという都合があって、どうしても普段使いでは家のサーバにアクセスしたいというモチベーションがあります。

こんなときにどこかのクラウドサービスでインスタンスを借りて、そこでVPNサーバを立ち上げれば、どこからでも家のパソコンにアクセスすることができます。

ユースケースとしては趣味や仕事のデータ(個人でデータを取り扱って良い)をカフェや会社の休み時間などからアクセスして操作したり、膨大な処理だった場合、進捗を確認したりすることができます。

図2. 家のPC、この計算力やディスクを遊ばせておくのは損失

イメージするネットワーク図

図3. こんな使い方をしたい

conohaのVPSの激弱激安インスタンス上にVPNサーバをデプロイすることで、そこ経由で家のPCにアクセスしたいです。

VPNサーバの設定は難しい & 苦痛

どうにもインフラが職人芸化する要因にソフトウェアのチューニングや設定がとても狭い知識で成立していて、かなりわかりにくく、一度なんとかしても、もう二度目は使えなかったりするなど結構苦しいです。

「dockerで簡単にサーバの設定を含めてデプロイできたらなぁー」とか言っていたら、そのものが存在しました。

英語なのと、いくつか情報が多すぎるので簡単化のため、wrapperスクリプトを書いたのでご紹介します。

コード

最近知ったのですが、Pythonのsubprocess.Popenはかなりきれいなshell scriptの上位互換的なコードを書くことができ、stdin, stdoutを自在にコントールできるので、Linux, Unix的なシステムと非常に相性がいいです。

docker-composeでもいいのですが、インタラクティブにユーザ名、パスワードを設定したいので、以下のようなコードを書きました。

mediumの制限でコードの一部

使い方

LinuxにVPNサーバをdockerでインストールする

サーバはDockerインストール済みのconohaのUbuntu 18.04を想定しています。

45秒もかからない?

Macをクライアントとする

図4. 設定の例1

例えばMacでセットアップする場合、設定のネットワークから、+からVPN(L2TP)を選択し、USERNAMEをterminalで入力したものと同一のものを入力します。

図5. 設定の例2

PASSWORDはパスワードに、PSKのパスワードはMacでは共有シークレットの部分になります。

結局、OSXやiOSやAndroidで使うにはL2TSが使えれば良い

softetherのclientをdockerにラップアップしてinstallしようと試みましたが、再現性が謎のエラーが多く、不安定すぎてやめました。L2TSが使えれば結局VPNに入れるので、特別に用意する必要は私のスキルでは労力に見合わないのさそうです。

操作感

出先のカフェから家のiMacにsshをしてみました。iMacはsoftbank airのネットワークの内側なので、本来ならばアクセスできないはずですが、VPNサーバで同一のネットワークにいることになるので、通信ができるようになりました。

IPアドレスもGMOのconohaのものになっています。

出先のMacBookから家のiMacへ接続成功(LAN内にはいれた)

作成したコード

https://github.com/GINK03/softether_docker_wrapper

--

--