Hyper-V で内部ネットワーク間のルーティングを有効にする方法

スタンドアロンのHyper-Vホスト上で複数の内部IPサブネットを設定し、それらの間をルーティングするのは、最初は少し大変に感じるかもしれません。デフォルトでは、Hyper-Vは仮想スイッチやネットワーク間でトラフィックをプッシュしません。これは少し「不便」です。そのため、異なるサブネット上の仮想マシンが外部ルーターを介さずに相互通信できるようにしたい場合は、Hyper-Vホストにルーティングのスーパーパワーを与える必要があります。ここでのポイントは、ホスト上でIP転送を有効にし(IPEnableRouterを使用)、仮想スイッチを設定してゲートウェイのように動作するIPアドレスを割り当てることです。

これが完了すると、VM間の通信が可能になり、ルーティング専用のVMを実行する必要がなくなります。単一のマシン内でシンプルなハブアンドスポーク接続を実現したいだけなら、この設定の方が効率的ですっきりしています。正直に言うと、これはかなり高度な方法です(しゃれです)。しかし、サブネットを追加するたびに新しいVMをセットアップするのにうんざりしているなら、知っておく価値はあります。

Hyper-V でルーティングを有効にして内部ネットワークを設定する方法

Hyper-VホストでWindowsルーティングを有効にする

  • 役立つ理由: これにより、Hyper-V ホストがその場しのぎのルーターになり、異なる仮想スイッチ/サブネット間でトラフィックを流すことができます。
  • 適用される場合: VM がサブネット間で ping を実行できないか、トラフィックが期待どおりにルーティングされていないことがわかります。
  • 期待される効果:これを設定すると、ファイアウォールルールが正しい場合、サブネット間のトラフィックの流れが開始されます。設定によっては、サービスを開始するために再起動が必要になる場合があります。
  • やり方:
    1. PowerShell を管理者として開きます (PowerShell を検索し、右クリックして、「管理者として実行」を選択します)。
    2. 次のコマンドを実行して、IPEnableRouterレジストリ キーを設定します。
      Set-ItemProperty -Path HKLM:\system\CurrentControlSet\services\Tcpip\Parameters -Name IpEnableRouter -Value 1
    3. 次に、ホスト マシンを再起動します。
      Restart-Computer

注: 一部の設定では、この変更がすぐに反映されない場合があります。再起動するか、ルーティングとリモートアクセスサービスを手動で再起動すると改善する場合があります。

内部仮想スイッチを作成する

  • 役立つ理由:内部スイッチは内部ネットワークケーブルのようなもので、ホスト内にVM専用のプライベートな「ネットワーク化された島」を提供します。これらのスイッチには、ハードウェアルータと同様にゲートウェイIPを割り当てます。
  • 適用される場合: 個別のサブネットが必要だが、物理的なイーサネット ケーブルや外部ネットワーク アクセスは必要ない場合。
  • 期待される効果:Hyper-Vにスイッチが表示され、Windowsのネットワーク設定に新しいネットワークアダプターが表示されます。これらのアダプターにIPアドレスを割り当てると、デフォルトゲートウェイとして機能します。
  • やり方:
    • PowerShell の使用:
      New-VMSwitch -Name vSwitchIntMUN -SwitchType Internal New-VMSwitch -Name vSwitchIntHH -SwitchType Internal
    • または、Hyper-V マネージャー経由:仮想スイッチ マネージャーに移動し、新しい仮想ネットワーク スイッチを選択して、内部に設定し、名前を付けて適用します。

スイッチを作成したら、「コントロールパネル」>「ネットワークとインターネット」>「ネットワーク接続」に進みます。2つの新しい仮想アダプタ(おそらく「vEthernet (vSwitchIntMUN)」「vEthernet (vSwitchIntHH)」)が表示されます。これらに静的IPアドレスを割り当てます。

New-NetIPAddress -InterfaceAlias 'vEthernet (vSwitchIntMUN)' -IPAddress 192.168.13.1 -PrefixLength 24 New-NetIPAddress -InterfaceAlias 'vEthernet (vSwitchIntHH)' -IPAddress 192.168.113.1 -PrefixLength 24

このステップは非常に重要です。これらの IP は各サブネットの「ゲートウェイ」 IP として機能します。

仮想マシンを構成して適切なスイッチに接続する

  • 役立つ理由: 各 VM が独自の仮想スイッチに接続されていることを確認すると、トラフィックがホストの構成されたゲートウェイを経由してルーティングされるようになります。
  • 適用される場合: スイッチを作成し、IP を割り当てた後、VM が問題なく通信できるようにします。
  • 期待される結果: VM はゲートウェイ IP (ホストの仮想 NIC IP) を認識し、ファイアウォールが正しく構成されている場合は相互に ping できるようになります。
  • やり方:
    • PowerShell の場合:
      Connect-VMNetworkAdapter -VMName mun-dc01 -SwitchName vSwitchIntMUN Connect-VMNetworkAdapter -VMName hh-dc02 -SwitchName vSwitchIntHH
    • または、Hyper-V マネージャー経由で、各 VM の設定を編集し、ネットワーク アダプターを適切な仮想スイッチに接続します。

また、VM自体にも静的IPアドレスを設定する必要があることに注意してください。ホストの仮想アダプタゲートウェイと同じサブネットを使用し、デフォルトゲートウェイをホストIPアドレス(例:mun-dc01の場合は192.168.13.1)に設定してください。

ルーティングのテストとトラブルシューティング

  • 役立つ理由:トラフィックがサブネット間で実際にルーティングできることを確認することが最終ステップです。ルーティングできない場合は、通常、ファイアウォールに問題があります。
  • 適用される場合: 構成後、VM が相互に ping を実行できないか、共有リソースにアクセスできない場合。
  • 期待される結果:ICMP pingとTCPポートテストが成功します。トラブルシューティングにはtracertまたはTest-NetConnectionを使用してください。
  • やり方:
    Test-NetConnection 192.168.13.11 -port 445 tracert 192.168.13.11

    VM の Windows ファイアウォールが ICMP と必要なポートを許可していることを確認します。ファイアウォール ルールがサイレント キラーとなる場合もあります。

つまり、結局のところ、ハイパーバイザーは基本的にルーティング処理を自ら行ってくれます。繰り返しになりますが、設定によっては、スムーズに通信を行うために再起動やファイアウォールの調整が必要になる場合があります。重要なのは、これは単なるハックではなく、Windowsホストをルーターとして利用する正当な方法であり、追加のVMを追加する手間を省くことができるということです。

まとめ

  • レジストリでIPEnableRouter を有効にして再起動します。
  • 内部仮想スイッチを作成します。
  • ゲートウェイ IP として機能する仮想アダプターに IP アドレスを割り当てます。
  • VM を正しいスイッチに接続し、静的 IP とゲートウェイを設定します。
  • Test-NetConnectiontracertを使用してトラフィックをテストします。ファイアウォールを構成することを忘れないでください。

まとめ

この設定が、ルーティングのためだけに仮想マシンを頻繁に起動し続ける手間を省くのに役立つことを願っています。確かに少し「ハック」な感じはしますが、コツをつかめばかなりうまく機能します。ただし、ファイアウォールルールが問題の原因になる可能性があるので、行き詰まったら確認してください。いずれにせよ、この方法は、限られた環境でHyper-Vを使用している人にとっては隠れた秘策であり、手間とリソースを節約できます。お役に立てれば幸いです。そして、仮想ネットワークを楽しんでください!