Heya仲間のコーダー/開発者/ネットワーカー/開発者/ ...
WSL2(Windows 10 2004バージョン)のコンテキストでmDNS
/DNS-SD
の設定に問題があります
自宅にメインサーバーとRaspberry Piを備えた非常にシンプルなセットアップがあり、DNSサービス検出をアクティブにして、Raspberry Pi上のサーバーの自動検出を簡単に実行できるようにしたいと考えています。
dnssd のような単純なライブラリを使用するか、適切なデータを自分でブロードキャストすることで、WSL2を使用しない場合でも簡単に機能させることができます。ただし、WSL2で機能させる必要があるため、状況が複雑になります。
WSL2は独自のサブネットで実行されているため、ブロードキャストは機能しなくなります。サブネットでのmDNSの使用は、このサブネットでのみ機能します。ただし、WindowsはすでにホストとWSL間のブロードキャストトラフィックの一部を再ルーティングしています。
これは簡単にテストできます。サーバーから単純なPing
を実行して、mDNSに依存するPiのAvahiアドレスを機能させます。
画面の左側には、Wiresharkによってキャプチャされたトラフィックがホストネットワークインターフェースで表示され、右側には、WiresharkによってキャプチャされたトラフィックがWSLネットワークインターフェースで表示されます。最初の3行は単純なpingです。これはWSLのコンテキストで実行されますが、ここに表示されるIPアドレス-172.28.192.1
-はWSLクライアントのIPアドレスではなく、内部のIPアドレスですWSLのDNSサーバー。右側に表示されているように、WindowsホストのIPアドレスを使用して、ホスト上で完全に再ルーティングされます:192.168.0.39
ただし、スクリプトによって実行される2番目のクエリにはWSLソースIP(172.28.204.42
)があり、これはホスト上で再ルーティングされません。
私のネットワークに関する知識は非常に限られており、これがどのように機能するか、またホスト上でWSLが自分のmDNSクエリをルーティングする方法を理解できません。ワイルドな推測は、それがiptablesに関係しているということですが、それは私が行っている限りです。
誰かがDNSサーバーの送信元アドレスで機能する理由の手がかりがあり、私が自分で実行するときではない場合、それは非常に役立ちます!
WSL2 Hyper-Vネットワークスイッチは、マルチキャストブリッジとして機能しません。デフォルトでは、スイッチは内部ネットワークを作成します。マルチキャストパケットは、内部ネットワークに接続されているシステムにのみ配信され、それ以外のシステムには配信されません。 Hyper-Vネットワークタイプの詳細については、 このNakivoブログ投稿 を参照してください。
最初のケースでは、pingは、リゾルバー(Windowsホスト)に送信される通常のDNSルックアップをトリガーします。次にWindowsホストは、外部ネットワークと内部ネットワークの両方でmDNSルックアップを実行します。パケットダンプには内部ルックアップが表示されますが、何も応答しないことに注意してください。応答は外部ネットワーク経由で送信され、pingは通常のDNS経由で応答を取得します。 2番目のケースでは、mDNSルックアップのみを実行します。その検索は内部ネットワークのみに送信されるため、応答はありません。 mDNSルックアップが内部ネットワークで機能することを証明するために、Windowsホストのローカルアドレス(MACHINE.local)をルックアップします。 Windowsホストが内部ネットワーク上にあり、応答できるため、これは機能します。
良いニュースは、WSLネットワークタイプを変更できることです。
これを実行した後、WSLを再起動します。
> wsl --shutdown
> wsl -t <distribution-name>
> wsl --distribution <distribution-name>
再起動すると、ゲストのネットワークが切断されます。 IPアドレスを追加し、ip addr add
およびip route
または同様のものを使用して外部ネットワークからルーティングする必要があります。ディストリビューションは、起動するたびにデフォルトのWSLスイッチ用にネットワークをセットアップしようとするので、将来、この外部ネットワークアドレスを追加するための構成をセットアップする必要があるかもしれません。たとえば、Ubuntu 20.04は、スイッチの構成に関係なく、常に内部ネットワークに動的アドレスを追加します。
ネットワークスイッチのタイプを変更すると、同じ理由でWSL2(Docker Desktopなど)の他の使用が中断される可能性があります。 Windowsは再起動するたびにHyper-Vネットワークスイッチを再作成するため、システムが稼働している間だけ変更が持続します。