テザリング+VPN+ポートフォワーディング+リモートデスクトップ

今の世の中のアレとしてリモートワークが主流になってきているということで俺も嬉々として家に引き籠ろうとしたのだが、そういう時に限って研究室のサーバーが死ぬ。ということでネットワーク環境をまたちょっと整備した。

テザリング+VPN+ポートフォワーディング+リモートデスクトップ

今うちの研究室には2台のワークステーションmouse(SASとVPNサービス用Windowsマシン)とretriever(RとJupyter用Linuxマシン)がいる(名前は大学院時代の研究室のネーミングルールに則っているので何も言わないように)。俺が普段から研究室にほとんどいないので、これらは2台ともグローバルIPを持っており外部から触れるようになっているが、接続にあたっては強固なファイアウォールが立ちはだかっている。グローバル環境に開放しているのはmouseのVPN用ポートのみで、それも常時ログを監視して接続時にSlackが飛ぶようになっている。

学外にいるときには、まずVPNでmouseに繋ぐ。これでクライアント側のグローバルIPを固定したら、あとはretrieverのJupyter用のポートにアクセスしたり、SSHでいじったり、学内IPなので論文検索をしたりと色々できるようになる。ファイアウォールでmouseとretrieverにIP+ポート指定で相互に穴を開けているので、決められたポート内であれば相互参照はできる。

しかしここで問題があって、mouseにVPNで繋いだ状態でMicrosoft Remote Desktop (for macOS)でmouseにリモートデスクトップ接続しようとすると絶対に通らない。これがなぜなのかがわからない。IPは固定したのでリモートデスクトップ用のポート(一般的には3389)にはアクセスできるはずなのだができない。ファイアウォールの穴をゆるくしたり、あるいはポートを変えたりしても絶対に通らない。本来mouseはVPN用の単あんる踏み台サーバーではなくSAS使用のためにWindowsを生かしてある結構な値段の解析用マシンなので、使えないと困る。

仕方ないのでもう一つ踏み台を作る

まあそうなるわな。相互参照ができるretrieverを踏み台にするしかない。元々VPNさえ繋がればmouse経由でretrieverにはアクセスできる状態になっているし、逆にretrieverからもmouseの主要なポートにはアクセスできる状態なので、さらにそれを踏み台にmouseにローカルポートフォワーディングを仕掛ける。

ssh -L 13389:<MOUSE_GLOBAL_IP>:3389 <MY_ACCOUNT_NAME>@<RETRIEVER_GLOBAL_IP>

これでポートフォワーディングできたので、localhostの13389ポートにアクセスするとVPNでmouseに飛んで、mouseからretrieverにアクセスして、retrieverからmouseの3389ポートに繋がる。Microsoft Remote Desktopではlocalhost:13389を指定すればいい。

馬鹿みたいだがこれで実際繋がる。そういうものだ。出先からは大抵iPadのモバイルホットスポットでテザリングしてつなげるのだが、それでも意外とストレスなく操作できる。

これで俺はもうteamviewerを使うことは一生ない。ないはず。