最新のWSL Previewを使用すると簡単にWindowsホストにブリッジ接続できます。詳しくはWSL2ネットワークを新機能でブリッジモードに変更する(IPv6も利用可)を参照してください。
ブリッジすることで、いくつかの問題を解決できると思いますが、逆にできなくなることもあります。
今回はそのあたりをまとめておきます。
ブリッジ接続で解決すること
IPv6接続が可能になる
WSL2をIPv6ネットワークに接続するに書いたように現行のWSL2(Windows10を含む)でも、DHCPv6-PDでのプレフィクス移譲を受けてIPv6接続できます。ただし、これは接続ネットワークが複数プレフィクスを持っていて下流に委譲できるような、一例としてはNTTのフレッツ光ネクストのような環境でないと利用できません。対して、ブリッジ接続が可能になると、WindowsホストがIPv6通信できる環境であればWSLインスタンスも同様にIPv6接続が可能になります。しかも非常にお手軽です。
NATの問題が解決する
筆者は経験していないのではっきりとは申し上げられませんが、一部環境ではMTUを調整しないと通信できないという現象が発生しているようです。WSL Preview 0.47.1にてMTUの自動調整機能が入っているので、それを使えば解決できるのかもしれませんが、ブリッジ接続するとWindowsホストの内側のネットワークで生じていたNATやMTU等の問題には影響を受けなくなります。
DNSの問題が解決する
Hyper-V?ICS?HCS?で提供されるDNSサーバはEDNS0やTCPでの参照に対応していません。このため、レスポンスが大きくなるようなDNS参照を行うと結果を受け取れない問題があります。一般的な解決方法は、パブリックDNSやWindowsホストが参照するDNSサーバを/etc/resolv.confに追記することですが、ブリッジすると問題のあったWindows内部のDNSサーバは参照しません。よってこの問題も解決します。
IPアドレスがころころ変わらない
WSL2の通常のネットワークはHyper-V同様に起動するたびにネットワークがアサインされ、その中で適当なIPアドレスが割り振られます。つまり、起動するたびにIPアドレスが変わってしまいます。ブリッジ接続の場合、IPアドレスはWindowsホストと同じDHCPサーバから受け取ることになりますが、MACアドレスを指定できるので毎回同じIPアドレスを受け取ることが可能です。DHCPサーバで永続的に固定してしまうことも可能でしょう。
ポートフォワードが必要ない
WSLインスタンスでsshd等のネットワークサービスを起動した場合、PCの外部からは直接は見えない場所にあるので、他のノードからアクセスする場合にはWindowsホストにてパケットを転送しないといけません。
ブリッジしていると他のノードからもWindowsからは独立したノードとしてアクセスが可能になります。
逆にできなくなることや変わってしまうこともあります
WindowsのVPNが使えない
まずWindowsで接続したVPNが使えません。ブリッジするとWSLから外部への通信はWindowsホストを経由しません。経由しないということはWindowsホストが接続しているVPNもWSLには影響を及ぼしません。WSLインスタンス(Linux)でVPN接続を行うかブリッジを解除して通常のWinNAT経由での接続にもどせばVPNの利用は可能です。
WSLからWindowsホストのIPアドレスがわからない
WSL2では通常/etc/resolv.confのネームサーバのアドレス、あるいはデフォルトゲートウェイのアドレスがWindowsホストを指示しています。しかし、ブリッジ接続してしまうと、/etc/resolv.confはDHCPサーバが通知してきたDNSサーバ、デフォルトゲートウェイは上流のルータとなりWindowsホストがわからなくなります。ただし、Windowsコマンドが実行可能なため、ipconfig.exeやPowerShellのコマンドレットを使えばWindowsホストのIPアドレスを知ることは可能です。
ホストのネットワークアダプタが変わってしまう
クライアントPCの場合ネットワークインタフェースは通常一つしかないので、外部仮想スイッチを作成するとWindowsが使用するネットワークアダプタも作成した仮想スイッチに切り替わります。この場合、多少なりともWindowsホストのネットワークパフォーマンスに影響があるようです。実際には差が感じられなかったので、最近のWindows?ハードウェア?であれば影響はあまりないのかもしれません。気になるようならインタフェースを拡張すればWindows用と分けられます。
内部仮想スイッチと通信できない
WSL2の標準ネットワークは *.mshome.net でHyper-Vインスタンスと通信できますが、外部仮想スイッチに接続が切り替わるとDefault Switchをはじめ内部仮想スイッチとの通信ができなくなります。
.wslconfigの設定としては以下のようになっているので、複数指定できるようになれば解決するのですが、同じ項目を複数設定しても最後のものだけがが有効になります。
複数の仮想スイッチに接続出来ればVPNの問題も解決できそう?
networkingMode=bridged ... DHCPからIPアドレス、DNSサーバ等の情報を受け取る
networkingMode=default ... HCSからIPアドレス、DNSサーバ等の情報を受け取る
vmSwitch=<スイッチ名> ... 任意のスイッチを指定出来るDefault Switch, WSLも可