転職やライフステージの変化に応じて、アパートなどの家を変えているのだが、その度にnuro光などのその時の最速のインターネットに乗り換えているのですが、多くは工事が必要でそのためのNTTの手続きが遅い...。nuro光はNTT網の空きネットワークであるダークファイバを利用しているので、必ず工事が必要で、工事の一部をNTTに依頼しているのですが、2019年11月に引っ越し依頼をして、2020年1月まだ工事が開通していません。
GCPやAWSなどの予算が溢れないようにネットワークディスクやローカルで済む簡単な計算などは現在でも一部は家のオンプレのサーバでやっています。単純に自分の機械を触っている時間を除くとオンプレはコストはクラウドに比べてそんなに高くないのとネットワークの実験が色々できて遊びと勉強が両立できて良いです。
この人手不足とワークライフバランスが重要視される世の中なので、NTTの人を責める事はありませんが、水や電気やガスといった生命に関係するインフラは当日開くのに、ネット用な一部の人間には十分生命に関係するインフラがこんなに遅いのか解せません。
softbank airという旧PHSの電波網を利用した4G(に近い通信方式)でアクセスすることができます。
ちなみにこのデバイス、価格コムでボロクソに叩かれており、とにかく遅いです。WiMaxよりマシなところは、3日で10G制限がないことでしょうか。こんな制限されたら死んでしまう。
この遅さを何とかする方法も今回の方法で解決できたりします。 ←高速にはなりませんでした
この手の工事が必要ないモバイル回線を転用した高速通信の常として、グローバルIPアドレスが外部からどうやってもアクセス不能になるというデメリットがあります。
私の使い方だと安価な計算や大容量の高頻度アクセスが必要なディスクはオンプレ、めちゃ重い計算はGCPに降っているという都合があって、どうしても普段使いでは家のサーバにアクセスしたいというモチベーションがあります。
こんなときにどこかのクラウドサービスでインスタンスを借りて、そこでVPNサーバを立ち上げれば、どこからでも家のパソコンにアクセスすることができます。
ユースケースとしては趣味や仕事のデータ(個人でデータを取り扱って良い)をカフェや会社の休み時間などからアクセスして操作したり、膨大な処理だった場合、進捗を確認したりすることができます。
conohaのVPSの激弱激安インスタンス上にVPNサーバをデプロイすることで、そこ経由で家のPCにアクセスしたいです。どうにもインフラが職人芸化する要因にソフトウェアのチューニングや設定がとても狭い知識で成立していて、かなりわかりにくく、一度なんとかしても、もう二度目は使えなかったりするなど結構苦しいです。
「dockerで簡単にサーバの設定を含めてデプロイできたらなぁー」とか言っていたら、そのものが存在しました。
英語なのと、いくつか情報が多すぎるので簡単化のため、wrapperスクリプトを書いたのでご紹介します。
最近知ったのですが、Pythonのsubprocess.Popenはかなりきれいなshell scriptの上位互換的なコードを書くことができ、stdin, stdoutを自在にコントールできるので、Linux, Unix的なシステムと非常に相性がいいです。
docker-composeでもいいのですが、インタラクティブにユーザ名、パスワードを設定したいので、以下のようなコードを書きました。
USERNAME = input('USERNAMEを指定してください:')
PASSWORD = input('PASSWORDを指定してください:')
PSK = input('PSKのパスワードを指定してください:')
query = \
['docker',
'run',
'-d',
'--cap-add',
'NET_ADMIN',
'-p',
'500:500/udp',
'-p',
'4500:4500/udp',
'-p',
'1701:1701/tcp',
'-p',
'1194:1194/udp',
'-p',
'5555:5555/tcp',
'-e',
f'USERNAME={USERNAME}',
'-e',
f'PASSWORD={PASSWORD}',
'-e',
f'PSK={PSK}',
'siomiz/softethervpn']
with Popen(query, stdout=PIPE, stdin=PIPE) as proc:
proc.wait(timeout=60)
reader = io.TextIOWrapper(proc.stdout)
while True:
r = reader.read(1)
if not r:
break
print(r, end='', flush=True)
サーバはDockerインストール済みのconohaのUbuntu 18.04を想定しています。
$ wget -q https://raw.githubusercontent.com/GINK03/softether_docker_wrapper/master/run_softether_vpn_server_on_docker.py -O /tmp/vpn.py && python3 /tmp/vpn.py
USERNAMEを指定してください:hogehoge
PASSWORDを指定してください:1223334444
PSKのパスワードを指定してください:vpn
3f98a1d924124c5fb1abd119d151bc2c95cb3fb76bdbfd64804e6c5ba42949b9
45秒もかからない?
例えばMacでセットアップする場合、設定のネットワークから、+からVPN(L2TP)を選択し、USERNAMEをterminalで入力したものと同一のものを入力します。 PASSWORDはパスワードに、PSKのパスワードはMacでは共有シークレットの部分になります。softetherのclientをdockerにラップアップしてinstallしようと試みましたが、再現性が謎のエラーが多く、不安定すぎてやめました。L2TSが使えれば結局VPNに入れるので、特別に用意する必要は私のスキルでは労力に見合わないのさそうです。
出先のカフェから家のiMacにsshをしてみました。iMacはsoftbank airのネットワークの内側なので、本来ならばアクセスできないはずですが、VPNサーバで同一のネットワークにいることになるので、通信ができるようになりました。