💭

WSL2 2.2.x正式版がこっそリリース

2024/07/01に公開

バージョンは2.2.4

WSLのバージョンチェックをしていると最新版がリリースされていた。

https://github.com/microsoft/WSL/releases/tag/2.2.4

(´・ω・)こっそリリースが常態化してるなぁ

WSL2 2.0でパラメータが増えたが、
実験的機能(Experimental)状態だったのを徐々に正式化していて
今回もその内容になっている。

以前書いたWSL2.2.x で DNS tunnelingがデフォルトににて、
DNS Tunnelingがデフォルトになった話をしたが、
それの正式リリースということになる。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

アップデート

wslにはアップデートコマンドがある
管理者ユーザーでターミナルを開いて以下を実行

wsl --update
wsl --version
  WSL バージョン: 2.2.4.0
  カーネル バージョン: 5.15.153.1-2
  ・・・・

アップデート内容

以前の記事でも記載したが改めて

Enable DNS tunneling by default(デフォルトでDNSトンネリングを有効にする)
Integrate DNS tunneling with Linux native Docker(DNSトンネリングをLinuxネイティブDockerに統合する)
Change the default reclamation mode to drop cache(デフォルトの再利用モードをドロップキャッシュに変更する)

(その他バグ修正などは割愛)

Enable DNS tunneling by default

WSL2.0の設定値のうち DNS tunneling でデフォルトで有効になった

https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config#main-wsl-settings

key value default
dnsTunneling bool false WSL から Windows への DNS 要求のプロキシ方法を変更します

ただし、Windows 11 バージョン 22H2 以降が必要

( ;∀;) Windows10に来てくれ~

そもそもDNS Tunnelingってなんぞ

https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/#dns-tunneling

One contributing factor to when WSL can’t connect to the internet, is that the DNS call to the Windows host is being blocked. This is because the networking packet for DNS sent by the WSL VM to the Windows host was being blocked by the existing networking configuration. DNS tunneling fixes this by instead using a virtualization feature to communicate with Windows directly. This allows us to resolve the DNS name request without sending a networking packet, which will allow you to get better internet connectivity even if you have a VPN, specific firewall setup, or other networking configurations. This feature should improve network compatibility, making it less likely for you to have no network connection inside of WSL.

WSLがインターネットに接続できない要因の一つは、WindowsホストへのDNSコールがブロックされていることです。これは、WSL VMからWindowsホストへ送信されるDNS用のネットワークパケットが、既存のネットワーク構成によってブロックされているためです。DNSトンネリングは、代わりに仮想化機能を使用してWindowsと直接通信することで、この問題を解決します。これにより、ネットワークパケットを送信することなくDNSの名前要求を解決することができるため、VPNや特定のファイアウォール設定、その他のネットワーク設定を行っている場合でも、インターネット接続を改善することができます。この機能により、ネットワークの互換性が向上し、WSL 内でネットワークに接続できないことが少なくなります。

apt getnpm install とかを実行すると、
DNSが解決しなくてダウンロードが進まないことがまぁまぁ発生する。
回避する方法はなくはないが公式でやってくれるならありがたい。

設定値の変更

dnsTunnelingの利用には.wslconfigの設定が必要

~/.wslconfig
[wsl2]
dnsTunneling=true

Integrate DNS tunneling with Linux native Docker

上記DNS tunnelingをWSL上のDockerにも適用するって感じだろうか。
WSLでDockerを運用するときは Docker Desktop を使う場合もなくはないが、
WSL上にnative Dockerを搭載するのが一般的かなと思う。

ここで名前解決問題はまぁまぁ発生するので、
対応されるとありがたい。

実は2.1リリース時にDNS tunnelingはデフォルトになる予定だったが、
このDocker問題が解決できなかったのでいったん伏せられた。
今回は大丈夫になったっぽい。

Change the default reclamation mode to drop cache

2.0の目玉でもあったメモリ管理。
実際使ってみると効果は大きく wsl をシャットダウンする場面が減った。
これがデフォルトで有効になるように変更になった。

Discussion