1.WSL2のIPは起動するごとに変わる気まぐれさん
Windows10Build18922に搭載されているWSL2はお試しバージョンということだけあって、ネットワークに難があります。その最たるものは、起動するごとにプライベートIPが変化する部分です。これではsshやhttp接続の時に、面倒くさいことこの上ない状態となります。
IPを固定する方法を試行錯誤してみたのですが、ホストOS側の仮想ブリッジが再作成されてネットワークそのものが変えられてしまうため、小手先でどうにかなる問題ではありませんでした。
ということで対応策を考えた結果、ドメインと関連付ければ良いという結論に至りました。
2.そうだ、MyDNSを利用しよう
まずは、MyDNSでアカウントを作成し、ドメインを一つ設定します。ローカルで使うだけなので、無料の中から好きなものを選びましょう。
3.プログラムのインストール
お察しの通り、まっとうな方法ではプライベートIPを登録することは出来ないので、WSL上でnodeを入れてゴニョゴニョします。
sudo apt install nodejs npm
wsl2mydnsをnpmからインストールします。これがゴニョゴニョするプログラムです。
sudo npm -g wsl2mydns
これで必要なもののインストールは完了です。
4.Windows側でbatを作成
@echo off
start wsl wsl2mydns MyDNS-ID MyDNS-PASS
pause
WSL2を使うときに、このbatをWindowから実行すればOKです。IPはMyDNSに通知され、ドメインとプライベートIPが結びつきます。
5.仕組み
MyDNSに通常の方法でIPを通知すると、自分の使っているネットワークのグローバルIPが設定されてしまいます。ということで、プログラムでWSL2上のeth0のIPを通知するようになっています。
ソースコードはGitHubに入れてあります。TypeScriptを使いました。
6.困ったこと
Windowsからビルドしたものをnpmに登録すると、コマンドとして実行させるための以下の行、
#!/usr/bin/env node
ここの改行コードに文句を言われ、コマンドが正常に実行できない状態になりました。おかげで何度もnpmに再アップする羽目になりました。
7.作成に使ったTypeScript
思い立ったが吉日で、さくっと作りました。MyDNSの操作ライブラリは以前から作ってあったので、DirectIP登録の部分だけ追加するだけで済みました。やはりTypeScriptを使うと、素のJavaScriptでやるよりも、プログラミングが楽です。
こちらにTypeScriptの入門ネタを作り始めました。時間のあるときに内容を書き足していきたいと思っています。ちなみにそのシステム自体も、フロントエンドとバックエンド両方ともTypeScriptで出来ています。