概要
Hyper-Vの仮想ネットワークスイッチは「外部」「内部」「プライベート」を選択することが出来ます。
ゲストOSに「外部」スイッチに接続したネットワークアダプターを取り付けて、ホストOSと同じNW帯のIPを振れば外部との通信に何の問題も発生しないのですが、職場等ではIPアドレスが枯渇していたり、IPアドレスの払い出し手続きが面倒だったりします。
ここでは、ゲストOSのネットワークアダプターを仮想ネットワークスイッチにして、内部ネットワークから外部ネットワークへの接続をNAT・IPマスカレードとします。
ゲストOSは外部ネットワークとは異なるNW帯に所属することになり、外部NWからはホストOSと同じIPアドレスに見えます。
また、ここでは続けて外部ネットワークから内部ネットワークのゲストOSサービスに接続する手順も記します。
ポート変換を伴うNAPTによる接続となりますので、基本的にウェルノウンポートによるサービスへの接続が難しくなってきますが、それは許容します。
環境情報
-
ホストOS: Windows10 バージョン1803
-
外部ネットワークセグメント:192.168.11.0/24
-
内部ネットワークセグメント:192.168.12.0/24
-
ホストOS IP:192.168.11.9(設定する上では特に必要ありません。)
内部仮想ネットワークスイッチの作成
「Hyper-Vマネージャー」から該当サーバーを右クリックして「仮想スイッチマネージャ」を選択します。
「仮想スイッチの作成」>「どの種類の仮想スイッチを作成しますか」から「内部」を選択して「仮想スイッチの作成」ボタンをクリックします。
設定を以下として「OK」ボタンを押下します。
項目 | 設定値 | 備考 |
---|---|---|
名前 | nat | なんでもOK |
メモ | (empty) | なんでもOK |
接続の種類 | 内部ネットワーク | |
VLANID (管理オペレーティングシステムの仮想LAN IDを有効にする) |
(nocheck) |
コントロールパネルの「ネットワーク接続」画面(ファイル名を指定して実行「ncpa.cpl」で開きます。)に「vEthernet(nat)」が作成されていることを確認します。
内部仮想ネットワークスイッチ「vEthernet(nat)」にIPアドレスを設定
「ネットワーク接続」画面で「vEthernet(nat)」を右クリックして「タブ:ネットワーク」>「インターネットプロトコルバージョン4(TCP/IPv4)」を選択して「プロパティ」ボタンを押下します。
「タブ:全般」で以下を設定して「OK」ボタンを押下します。
- 「次のIPアドレスを使う」を選択
項目 | 設定値 | 備考 |
---|---|---|
IPアドレス | 192.168.12.1 | |
サブネットマスク | 255.255.255.0 | |
デフォルトゲートウェイ | (empty) |
- 「次のDNSサーバーのアドレスを使う」を選択するが、IPアドレスは空白とする。
NAT(IPマスカレード)設定
PowerShellを管理者権限で起動してNAT(IPマスカレード)設定します。
PS C:\WINDOWS\system32> New-NetNat -Name natNetwork -InternalIPInterfaceAddressPrefix 192.168.12.0/24
New-NetNatコマンドでは内部ネットワークのみ指定します。私の環境では外部ネットワークは指定できませんでした。外部ネットワークについては自動で192.168.11.0/24が選択されるようで、特に問題はありません。
仮想マシンの設定
仮想マシンのネットワークアダプターを上記で作成した「nat」にします。
仮想マシンには「192.168.12.0/24」のIPを振ります。また、DNSは明示的に設定する必要があります。私の環境ではGoogleのパブリックDNS「8.8.8.8」としています。
静的NAT(NAPT)の設定
PowerShellを管理者権限で起動してNAT設定します。
PS C:\WINDOWS\system32> Add-NetNatStaticMapping -NatName natNetwork -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.12.11 -ExternalPort 3391 -InternalPort 3389 -Protocol TCP
Add-NetNatStaticMappingコマンドのオプション設定については以下の通りとなっています。
オプション | 設定値 | 備考 |
---|---|---|
NatName | natNetwork | なんでもOK |
ExternalIPAddress | 0.0.0.0 | 外部IPアドレスは全て(0.0.0.0)とします。私の環境では外部IPを指定することはできませんでした。 |
InternalIPAddress | 192.168.12.11 | 任意の仮想マシンIPを指定します。 |
ExternalPort | 3391 | 外部向けに任意のポートを指定します。 |
InternalPort | 3389 | 任意の内部ポートを指定します。 ここではリモートデスクトップのウェルノウンポートを指定しています。 |