Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

WSLとHyper-VでSSHが繋がらない理由と2つのネットワーク解決策

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
WSL(Windows Subsystem for Linux)のLinuxと、通常のHyper-V仮想マシン(VM)。どちらもWindows上で動くLinux環境なのに、なぜか初期状態(そのまま)ではお互いにSSH接続ができません。
「同じPCの中にいるんだから繋がりそうなのに!」と不思議に思いますよね。
この記事では、インフラ初心者にもわかりやすく、なぜ繋がらないのか(理由)と、どうすれば繋がるのか(解決策)をサクッと解説します!

理由を1行で言うと?
「それぞれが別々の独立したプライベートネットワーク(内部スイッチ)に所属しているから」です。
同じWindowsという親の中にいながら、子供たちは別々の「すれ違えない部屋」に隔離されている状態なのです。

なぜ繋がらない?3つのネットワークの壁
1. 仮想スイッチが別々である
Hyper-Vで作成した仮想マシンは、デフォルトで「Default Switch」という仮想スイッチに接続されます。
一方、WSL2(現在の主流)は、WSL専用に自動生成される「WSL専用の仮想スイッチ」に接続されます。
親玉である仮想スイッチが異なるため、ルーターが2台あるような状態になり、お互いの存在が標準では見えません。
2. どちらも「NAT(内部ホストのみ)」で構築されている
WSL2もHyper-VのDefault Switchも、基本的には「NAT(Network Address Translation)」という仕組みで動いています。
  • Windowsホスト(親)からは、WSLにもHyper-Vにもアクセスできる。
  • WSLやHyper-Vから、外部のインターネットにはアクセスできる。
  • しかし、WSL(子)からHyper-V(子)への横移動は、NATの壁に阻まれて届かない。
3. IPアドレスのセグメント(ネットワーク)が違う
実際に双方の環境で ip addr などのコマンドを打ってIPアドレスを確認してみてください。
  • WSLのIP: 172.29.x.x
  • Hyper-VのIP: 172.18.x.x
このように、ネットワークの所属(セグメント)自体が全く異なるため、そのままでは経路(ルート)が分からず迷子になってしまうのです。

どうすればSSHできるようになる?(解決策)
この問題を解決する方法は主に2つあります。環境に合わせて試してみてください。
解決策A:Hyper-V側を「外部スイッチ」に変更する(おすすめ)
一番手っ取り早く、確実な方法です。
  1. Hyper-Vマネージャーを開く。
  2. 「仮想スイッチマネージャー」で、物理LAN(Wi-Fiや有線)に紐づいた「外部」スイッチを新しく作成する。
  3. Hyper-V仮想マシンの設定を開き、ネットワークアダプターの接続先を今作った「外部スイッチ」に変える。
【結果】 Hyper-VのVMが、あなたの家のルーターから直接IPアドレス(例: 192.168.x.x)を貰うようになります。これでWindowsホストと同じネットワークになるため、WSLからも一発でSSHできるようになります。
解決策B:Windows側でポートフォワーディングを設定する
ネットワーク構成を変えたくない場合は、Windows(親)を中継地点にする方法です。
WindowsのPowerShell(管理者権限)で netsh interface portproxy コマンドを使い、「Windowsの特定のポートに届いた通信を、Hyper-V(またはWSL)のIPに転送する」という設定を組みます。

まとめ:仕組みさえ分かれば怖くない!
  • 原因: WSLとHyper-Vは、別々の仮想ルーター(スイッチ)に繋がっているから。
  • 対策: Hyper-V側を「外部スイッチ」にして、同じネットワークに参加させてあげるのが一番簡単。
同じPC内だからこそ盲点になりやすいネットワークの壁。仕組みを理解して、快適な開発環境を構築しましょう!

タイトルとURLをコピーしました