2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WSL2のコロコロ変わるIPをMyDNSで何とかする

Posted at

1.WSL2のIPは起動するごとに変わる気まぐれさん

 Windows10Build18922に搭載されているWSL2はお試しバージョンということだけあって、ネットワークに難があります。その最たるものは、起動するごとにプライベートIPが変化する部分です。これではsshやhttp接続の時に、面倒くさいことこの上ない状態となります。

 IPを固定する方法を試行錯誤してみたのですが、ホストOS側の仮想ブリッジが再作成されてネットワークそのものが変えられてしまうため、小手先でどうにかなる問題ではありませんでした。

 ということで対応策を考えた結果、ドメインと関連付ければ良いという結論に至りました。

2.そうだ、MyDNSを利用しよう

 まずは、MyDNSでアカウントを作成し、ドメインを一つ設定します。ローカルで使うだけなので、無料の中から好きなものを選びましょう。

3.プログラムのインストール

 お察しの通り、まっとうな方法ではプライベートIPを登録することは出来ないので、WSL上でnodeを入れてゴニョゴニョします。

.sh
sudo apt install nodejs npm

 wsl2mydnsをnpmからインストールします。これがゴニョゴニョするプログラムです。

.sh
sudo npm -g  wsl2mydns

 これで必要なもののインストールは完了です。

4.Windows側でbatを作成

wsl_start2.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で出来ています。

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?