amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

Windows 簡単アクセス WSL2

多くの人が WSL を使用する際に、Windows ホストとの通信の問題に遭遇したことがあるでしょう。日常のプログラミングでは、WSL にデプロイされたデータベース、Web サービスなどに Windows からアクセスすることがよくあります。Windows 自体はマッピングを行います。たとえば、次のコマンドを使用して HTTP サーバーを起動します。

➜ source git:(master) python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

この場合、Windows でlocalhost:8000にアクセスすると正常に開くことができます。ただし、一部の場合(データベース接続など)、このマッピングは機能しなくなることがあります。おそらく、WSL はデフォルトで HTTP サービスのポートのみをマッピングしているためでしょうか?(疑問符)

上記の問題を解決するために、WSL に簡単にアクセスできる手段が必要です。以下に 3 つの解決方法を挙げ、最後に私の解決策を詳しく説明します。

WSL のローカル IP を手動で検索し、その IP を使用してアクセスする#

この方法は非常にシンプルで直接的であり、WSL の IP を手動で見つけてアクセスするだけです。

WSL でifconfigコマンドを実行すると、多くの出力が得られます。

 source git:(master) ifconfig
.....
eth0: .......
        inet 172.21.255.188  .....
.....

上記のinetの後にある IP アドレスが WSL のローカル IP です。

ただし、WSL の IP は起動するたびに変化するため、頻繁に WSL にアクセスする場合はこの方法は適していません。

ポートマッピングを使用する#

HobaiRiku/wsl2-auto-portproxyを使用して、WSL 内のすべての TCP ポートを Windows の localhost にマッピングします(UDP は現在サポートされていません)。

この方法は、WSL にアクセスする必要がある場合にバイナリファイルをダウンロードして実行するだけで、追加の操作は必要ありません。

WSL の IP を Windows の hosts ファイルに追加する#

先ほどの方法の欠点は、IP が起動するたびに変化することですが、これはドメイン名を思い出させます。

周知のように、ドメイン名の解決はまず hosts ファイルを検索し、見つからない場合に DNS を使用します。したがって、この方法は WSL の IP とカスタムドメイン名を Windows の hosts ファイルに追加し、アクセスする際には設定したドメイン名にアクセスすることです。

この要件から始まり、次の 2 つのアプローチが派生しました。

  1. このプロセスを Windows 上で完了する方法で、具体的な方法は、WSL でifconfigを実行し、IP を正規表現でマッチングして hosts ファイルに書き込むカスタムタスクを WSL の起動イベントにバインドすることです。
  2. このプロセスを WSL 上で完了する方法で、具体的な方法は、起動時に自動的に実行されるスクリプトを追加し、そのスクリプトで任意の手段でローカル IP を取得し、/mnt/c/Windows/System32/drivers/etc/hosts に書き込むことです(Windows のドライブは自動的に WSL の /mnt にマウントされます)。

アプローチ 1#

アプローチ 1 の核心はカスタムタスクですが、具体的なワークフローはさまざまな手段で実現できます。比較的簡単なのは、shayne/go-wsl2-hostです。このプロジェクトは、WSL の起動時にトリガーされるカスタムタスクを自動的に追加します。理論的にはインストールするだけで使用できるはずです(残念ながら、私の環境では正常に動作せず、原因がわかりません)。

アプローチ 2#

アプローチ 2 の実装は少ないです。過去の WSL では、効果的な「起動時自動実行」方法はありませんでした。しかし、WSL の systemd サポートにより、この障壁は消え去りました。したがって、私はこの方法を使用したプロジェクトを手作りしました。

このプロジェクトを使用するには、Arch Linux の場合:

  1. WSL が /mnt/c/Windows/System32/drivers/etc/hosts ファイルを正常に読み書きできることを確認します。
  2. リリースから.pkg.tar.zst ファイルをダウンロードし、sudo pacman -Uを使用してインストールします。
  3. sudo systemctl enable --now wah.serviceを使用してサービスを有効にします。

その他のディストリビューションの場合、上記の 2 番目の手順を手動でインストールに置き換えるだけです:

install -D -m 755 $srcdir/wah $pkgdir/usr/bin/wah
install -D -m 755 $srcdir/wah.service $pkgdir/usr/lib/systemd/system/wah.service
install -D -m 755 $srcdir/domains $pkgdir/etc/wah/domains

その他の手順は完全に同じです。

このプロジェクトでは、デフォルトで arch.wsl というドメイン名が使用されます。カスタマイズする場合は、/etc/wah/domains ファイルを編集し、複数のカスタムドメイン名の場合は単一のスペースで区切ってください。

このプロジェクトは、hosts ファイルの末尾に WSL のアドレスを自動的に追加し、WSL の起動時に自動的に更新されます:

image-20221129130815511

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。