11
6

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 3 years have passed since last update.

WSL2が接続された仮想スイッチは必ずパブリックネットワーク?

Last updated at Posted at 2021-09-23

WSL2のネットワークはHyper-V仮想スイッチ

WSL2のネットワークはHyper-V仮想スイッチです。これはWindowsがPro以上の品目であればHyper-VマネージャでWSLというスイッチを確認できます。このスイッチ自体はHyper-V Default Switchとよく似た構成になっていて、外部への通信はWinNATが中継します。

イーサネット---------------+-------------------------
                          |
                       Windows(WinNAT)
                          |
vEthernet (WSL)-----------+-------------+----------
                                        |
                                       WSL2

Hyper-V仮想スイッチ自体はWSL2等が存在するHyper-V域内とWindows外部のネットワークを普通に接続しているので比較的自由度が高いと思っています。

WSL2ネットワークの(正しい?)用途

WSL2(というかMicrosoft社)が認識しているネットワークの用途は

  1. WSL2インスタンスからWinNATを介して(Windowsホストの)外部へ通信する
  2. localhostを介してWSL2インスタンスで起動したサービスにWindowsホストから接続する
    (これはネットワーク接続というより中継プログラムが担当)

この2点なのだと思います。

  1. WSL2インスタンスからWindowsホストに直接通信する
  2. 外部からWindowsホストをルータとして直接WSL2インスタンスにアクセスする

等というのは基本想定外なのでしょう。

この想定外の用途を検証していて発生した躓きポイントはWindowsセキュリティが想定する「パブリックネットワーク」です。

検証してみましょう

具体的には、以下のコマンドを WSL2で実行してください。筆者環境(Windows Defender + プライベートネットワーク)では通信できません。

WSL2のshellで実行
$ ping `ip route | sed -nr 's/.*default *via *([0-9.]+).*$/\1/p'`
PING 172.18.0.1 (172.18.0.1) 56(84) バイトのデータ

これは、WSL2のデフォルトルート(=vEthernet (WSL)に接続されたWindowsホストIPアドレス)へ ping を送るものです。

この状態で、Windowsセキュリティ - ファイアウオールとネットワーク保護で「パブリックネットワーク」の保護を無効にすると、、

WSL2のshellで実行
$ ping `ip route | sed -nr 's/.*default *via *([0-9.]+).*$/\1/p'`
PING 172.18.0.1 (172.18.0.1) 56(84) バイトのデータ
64 バイト応答 送信元 172.18.0.1: icmp_seq=104 ttl=128 時間=0.322ミリ秒
64 バイト応答 送信元 172.18.0.1: icmp_seq=105 ttl=128 時間=0.537ミリ秒
64 バイト応答 送信元 172.18.0.1: icmp_seq=106 ttl=128 時間=0.518ミリ秒
64 バイト応答 送信元 172.18.0.1: icmp_seq=107 ttl=128 時間=0.501ミリ秒

このようにレスポンスが返るようになります。
この時、フィルタルールに手を加える(確認の為に一旦無効にしましたが)のは、必ず「パブリックネットワーク」というのが注意点です。
Windowsセキュリティでプライベートネットワークを選択していても適用されるフィルタはパブリックネットワークです。どうやら、WindowsにとってvEthernetの先は全てパブリックネットワークという判断のようです。

Hyper-V仮想スイッチはパケットフォワードを有効にするとルーター的に普通にネットワークを超えられるのですが、ここういう通信にはDefenderの介入はないようですね。フィルタルールには「受信」「送信」に中継するパケットの送受信も含まれるのかと思ったのですが少なくともDefenderは素通しするようです。

11
6
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
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?