Windows10をホストとするHyper-V 仮想マシンをNAT出来るようにする

Sponsored Link
ロリポップ!レンタルサーバー

 

はじめに

これまでHyper-Vは仮想化基盤として本気で仮想マシンを稼働させる環境しか触ってきませんでした。

このようなHyper-Vを本気で使っている環境ではNICを稼働させる仮想マシンに必要な数だけ用意するのが通常なので、仮想マシンで使う仮想スイッチ(ちょっと引っかかる表現ですよね)は外部ネットワークとして物理NICを割り当てて、ほとんど問題無くネットワークとして接続できていた訳です。

で、今更ですがこの度Windows 10 でHyper-Vを使ってみようと思いいろいろと参考にさせてもらって見たのですが、思うように仮想マシンから外部ネットワークに出ていく事ができず、結果的にWinNATを設定しましたというお話しです。

思うように外部へ接続できないというのはDHCPを使っていないことが大きな要因だと思いますが、個人宅のPC環境で主に検証・開発するためにNICを複数用意するのもアレだし、外部ネットワークをホストと共有するのもなんか違う気がするので、出来るだけホストに影響のない形で仮想マシン達を外部ネットワークに出したいと思った次第です。

※タイトルではWindows10がホストなのかゲストなのかわかりにくかったので修正しました。それでもわかりにくいですが。(2020/11/26)

Sponsored Link

構成

  • ホストマシン:Windows 10 Pro バージョン 20H2
  • ネットワーク:デスクトップですが、無線LANでルータに接続。有線NICもありますが、場所の都合で無線で接続。(どうでもいい情報)

○環境の概要図

ホストとルーターはいわゆる普通の環境だと思います。

設定する手順は次の通り。

  1. 内部ネットワークの仮想スイッチを作成
    • 仮想スイッチ名:WinNAT
  2. その仮想スイッチのIPアドレスを設定(これがNATゲートウェイとして、仮想マシンのゲートウェイになります)
    • IPアドレス:10.0.0.1/255.255.0.0
  3. NATネットワークを作成する
    • NATネットワーク名:WinNAT(同じにしたのでややこしいですが、仮想スイッチ名との関連はありません)
    • NATサブネットプレフィクス:10.0.0.0/16
  4. 仮想マシンのネットワークを設定する(これは今回触れませんが以下のように設定します)
    • IPアドレス:NATサブネットプレフィクスの範囲内で。
    • ゲートウェイ:10.0.0.1
    • DNS:192.168.1.1 ルータのアドレスを指定しました。(他のDNSサーバでも大丈夫です)

参考:以下のリンク(MS本家)を参考にしました。上の説明でなるほどと思った方はこのリンク先で十分かとw

NAT ネットワークの設定NAT ネットワークの設定
NAT ネットワークの設定 docs.microsoft.com
NAT ネットワークの設定

 

仮想スイッチの設定

設定作業は以下全て、管理者権限のPowerShellで行います。

○仮想スイッチの作成

New-VMSwitch -SwitchName "WinNAT" -SwitchType Internal

○作成したスイッチのインデックスを確認する。

> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
Wi-Fi                     BUFFALO WI-U3-866D Wireless LAN Ad...#3      30 Up           XX-XX-XX-XX-XX-XX     866.7 Mbps
vEthernet (Default Swi... Hyper-V Virtual Ethernet Adapter             67 Up           00-15-5D-A4-72-7D        10 Gbps
vEthernet (WinNAT)        Hyper-V Virtual Ethernet Adapter #3          18 Up           00-15-5D-47-B1-07        10 Gbps

これは、次にIPアドレスを指定するために確認します。上記結果では、18がインデックスとなります。

○仮想スイッチにIPアドレスを割り当てる

> New-NetIPAddress -IPAddress 10.0.0.1 -PrefixLength 16 -ifIndex 18

IPAddress         : 10.0.0.1
InterfaceIndex    : 18       
InterfaceAlias    : vEthernet (WinNAT)
AddressFamily     : IPv4
(以下略)

 

NATネットワークを設定する

○すでにNATネットワークが無いか確認する

サポートされるNATネットワークは1つだけなので、一応確認します。
バグのため、複数作成される事があるようなので確認しておきましょう。

Get-NetNat
NATネットワークが存在していたら削除します。
Get-NetNat | Remove-NetNat

○NATネットワークを設定する

> New-NetNat -Name WinNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/16

Name                             : WinNAT
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 10.0.0.0/16
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
(以下略)

設定する際、すでに他の内部スイッチでNATサブネットの範囲のIPアドレスが使われている場合などは設定時にエラーが発生するので、NATサブネットを変更するか、該当する内部スイッチを変更・削除するなどして対処してください。

これで、設定はおわりです。

あとは仮想マシンのネットワーク設定を前述の通り設定してあげれば外部接続が出来ると思います。

ちなみにNATセッションが発生していたら、Get-NetNatSessionコマンドで確認できます。
以下はDNSサーバにnslookupを実行したときのセッション情報。

> Get-NetNatSession

NatName : WinNAT
InternalRoutingDomainId : {省略}
CreationTime : 2020/11/24 23:19:24
Protocol : 17
InternalSourceAddress : 10.0.2.11
InternalSourcePort : 60370
InternalDestinationAddress : 192.168.1.1
InternalDestinationPort : 53
ExternalSourceAddress : 192.168.1.13
ExternalSourcePort : 57852
ExternalDestinationAddress : 192.168.1.1
ExternalDestinationPort : 53

おわりに

このWinNATを使えるようになってHyper-Vを使った仮想マシンの構築はすっきりしましたが、このWinNATは遅い、もっさりしているなど、いろいろと気になる点は多いようです。ま、ネットワーク系をいろいろ検証する時はもっと環境を整えるでしょうからあまり気にしなくてもいいと思いますが。

ではでは。

 


Sponsored Link

前の記事

AWS CLI v2を使ってみます