検証

【Windows 11】Hyper-Vで物理NICをトランク化してVLANタグを扱う方法

gumio

導入

ネットワーク検証で管理系通信やE2Eの通信を流すためのテスト端末を複数台準備するという作業は、正直かなり負担が大きいのではないでしょうか。
私自身も以前は、数台のPCを机の上に並べ、電源タップを増設し、LANケーブルを引き回しながら検証環境を構築していました。
しかし、こうした作業は手間がかかるだけでなく、物理的なスペースの確保にも悩まされ、毎回大きな労力が必要になるのが実情です。

そこで本記事では、Hyper-Vを有効化したWindows PC1台 + VLAN間ルーティング可能なネットワーク機器1台の最小構成で、セグメントを分けて複数のホストを用意できる環境を再現する方法を紹介します。

構成イメージは以下の通りです。
Ubuntu VM・コンテナA・コンテナB間でpingによる疎通確認ができる状態をゴールとします。

動作環境

以下の環境で動作を確認しています。

  • ホストOS
    • Windows 11 Enterprise 評価版
  • ハイパーバイザー
    • Hyper-V
  • 物理・仮想ネットワークの接続
    • 外部仮想スイッチを使用
  • 仮想マシン
    • Ubuntu Server 24.04.3 LTS
  • コンテナエンジン
    • Podman
  • コンテナ
    • Ubuntu 22.04
  • macvlanモード
    • bridge
  • 物理ルータ
    • C891FJ-K9

物理ルータのインターフェイス設定は以下の通りです。

interface GigabitEthernet6
 switchport trunk native vlan 40
 switchport trunk allowed vlan 1,2,40,100,200,1002-1005
 switchport mode trunk
 no ip address
!

Hyper-Vの有効化

管理者権限のPowerShellを起動し、以下のコマンドを実行します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart

コマンド実行後、設定を反映するために再起動してください。

仮想環境構築

仮想スイッチ作成

再起動後、ネットワークアダプタ一覧にDefault Switchが追加されていることを確認します。あわせて、使用する物理NICの名称を控えておきます。(本例では「イーサネット」)

管理者権限のPowerShellを起動し、以下のコマンドを実行して外部仮想スイッチを作成します。NetAdapterNameは、先ほど控えた「イーサネット」を指定します。

New-VMSwitch -Name "ExternalTrunk" -NetAdapterName "イーサネット" -AllowManagementOS $true -Notes "外部接続用"

仮想マシン作成

引き続きPowerShellを使用して操作していきます。
まずは仮想ハードディスク(VHDX)を作成します。

New-VHD -Path "C:\VMs\Ubuntu01\Ubuntu01.vhdx" -SizeBytes 60GB -Dynamic

続いて仮想マシンを新規作成し、必要なリソースを割り当てていきます。なお、パスなどはご自身の環境に合わせて適宜変更してください。

New-VHD -Path "C:\VMs\Ubuntu01\Ubuntu01.vhdx" -SizeBytes 60GB -Dynamic

New-VM -Name "Ubuntu01" `
       -MemoryStartupBytes 4GB `
       -Generation 2 `
       -VHDPath "C:\VMs\Ubuntu01\Ubuntu01.vhdx" `
       -SwitchName "ExternalTrunk"

Set-VMProcessor -VMName "Ubuntu01" -Count 2
Set-VMFirmware -VMName "Ubuntu01" -EnableSecureBoot Off
Add-VMDvdDrive -VMName "Ubuntu01" -Path "C:\Users\gumio\Desktop\Installer\Ubuntu-24.04.3\ubuntu-24.04.3-live-server-amd64.iso"

仮想マシンのNIC設定

作成したUbuntu VMのNIC名称を確認し、対象のNICをトランクポートとして設定します。下記は、仮想スイッチとUbuntu VM間をトランクリンクとして構成し、「タグ無し,VLAN100,200」をAllowedする例です。

Get-VMNetworkAdapter -VMName "Ubuntu01"
Set-VMNetworkAdapterVlan -VMName "Ubuntu01" -VMNetworkAdapterName "ネットワーク アダプター" -Trunk -NativeVlanId 0 -AllowedVlanIdList "100,200"

対象のNICでMACアドレススプーフィングを許可し、実質的に無差別モードを有効化します。

Set-VMNetworkAdapter -VMName "Ubuntu01" -MacAddressSpoofing On

Tips

今回の構成では、物理ネットワークにおけるタグ無しVLANのIDを40としています。ただし、仮想マシンのNICに対して「-NativeVlanId 40」を設定すると、仮想マシンから送信されたタグ無しフレームに対して、仮想スイッチがVLAN ID 40を付与してアップリンクへ転送する挙動となるため注意が必要です。

この構成では、タグ無しフレームをそのままアップリンクへ転送するため、「-NativeVlanId 0」が正しい設定となります。

仮想マシン起動~初期設定

仮想マシンを起動し、セットアップウィザードに従ってUbuntuの初期設定をしましょう。

Start-VM -Name "Ubuntu01"

Ubuntuのインストール完了後、ISOファイルは不要となるためアンマウントします。

Get-VMDvdDrive -VMName "Ubuntu01"
Set-VMDvdDrive -VMName "Ubuntu01" -Path $null
Get-VMDvdDrive -VMName "Ubuntu01"

コンテナ作成~疎通確認

コンテナの作成から疎通確認までの手順は、過去の記事と同じ内容となります。詳しい解説は以下の記事にまとめていますので、あわせてご参照下さい。
なお、Netplanファイルに記載するインターフェイス名は、ご自身の環境に合わせて適宜修正して下さい。

まとめ

今回紹介した方法を活用することで、これまで物理端末を複数用意して行っていた検証作業を、ノートPC1台で効率的かつスマートに再現できるようになります。

限られたスペースでも柔軟にネットワーク構成を試せるため、日常的な検証はもちろん、設計構築の事前検証やトラブルシューティングにも役立つはずです。

この記事が皆様の検証環境づくりに少しでも役に立てば幸いです。

ABOUT ME
空花(そらはな)ぐみを
空花(そらはな)ぐみを
ネットワークエンジニア / 愛猫家
高卒工場勤務を経て31歳でIT業界へ転職し、現在はSIerでネットワークエンジニアの現場リーダーとして設計・構築を担当しています。未経験からキャリアを切り開いた経験を活かし、
・ネットワークエンジニア初級〜中級者がつまずきやすいポイントの解説
・ラボ環境を活用した検証手順
・業務で生かせる実践的なノウハウ
など、インフラエンジニアを目指す方や、現職でスキルを磨きたい方に役立つ情報を発信していきます。
記事URLをコピーしました