« LAMY tipoにV BALL RTのリフィルを入れてみた | トップページ | 嫁と格安SIM − mineoの場合 − (その9) »

2018.01.08

Windows 10上のHyper-VでUbuntuを動かしてネットワーク設定(NAT)を行う

新年明けましておめでとうございます。今年もよろしくお願い申し上げます。

さて、この新年はWindows 10 Pro ではHyper-Vが使えますので、これを使ってUbuntuを仮想マシン上で動かすことを試してみました。
VMWare Player等と違って、ネットワーク設定等自分でやらないといけないことがあり、Hyper-Vの仕組みを理解するのに頭の整理が必要で、それなりに手間取りましたので、過程をメモしておきます。

ホスト
物理マシン: ThinkPad E440
OSエディション: Windows 10 Pro Insider Preview
バージョン: 1709
OSビルド: 17025.1000

ゲストVM
OS: Ubuntu 16.04 LTS

ラップトップPCなので、通常のネットワークはWi-Fi接続となります。

ホストマシンとゲストVMの両方からインターネット接続する設定の解説は、例えばこちらのサイトにあります。
Hyper-Vで物理マシンと仮想マシンの両方をインターネット接続するための仮想スイッチの種類:らどこの消費生活 続き
ネットで探して多くヒットするのが
1.「外部」+「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」
という方法ですが、このサイトにあるとおり、物理NICの接続が固定的でないと、安定して動作しません。

ラップトップPCの場合、
2.「内部」+物理マシンの仮想NICと物理NICを「ブリッジ接続」
3.「内部」+物理マシンの物理NICの「インターネット接続の共有」(ICS)
が、比較的安定的に運用できるとのことで、自分でもある程度安定して運用できることを確認できましたが、ときにホスト側のブラウザが起動しない現象もありました。

Windows 10 Proでは、これらに加えて標準でNATを使うことができます。設定にGUIを使うことができないですし、制限もあるのですが、ここではこの方法をメモしておきます。
以下のサイトを参考にしました。ありがとうございます。
NAT ネットワークの設定:Microsoft Docs
TP5 NAPT 仮想スイッチ:MURA's HomePage
Windows NAT (WinNAT) — Capabilities and limitations: Virtualization Blog

まず、LANの構成ですが、192.168.0.0/24の物理ネットワーク内に存在するラップトップPCをホストとして、ゲストVMのネットワーク192.168.1.0/24を構成します。当該ネットワークのディフォルトゲートウェイのIPアドレスを192.168.1.1とし、ゲストVMのIPアドレスを手動で設定することとし(※)、ここでは192.168.1.11とします。DNSは契約プロバイダのものを利用しました(適宜、Google DNS(8.8.8.8, 8.8.4.4)等のパブリックDNSを利用することも可能です)。

※ DHCP機能がないなど、ゲストOSのネットワーク自動設定ができないというWindows NATの制限があるため

設定は、PowerShell(管理者権限)から行います。コマンドレットの使用法は適宜上の参考サイト等で調べて下さい。


PS C:\> New-VMSwitch -SwitchName "WinNAT" -SwitchType Internal

Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
WinNAT Internal

PS C:\> Get-NetAdapter

Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
vEthernet (WinNAT) Hyper-V Virtual Ethernet Adapter #5 39 Up **-**-**-**-**-** 10 Gbps
イーサネット Realtek PCIe GBE Family Controller 7 Disconnected **-**-**-**-**-** 0 bps
vEthernet (内部ネット... Hyper-V Virtual Ethernet Adapter #4 28 Up **-**-**-**-**-** 10 Gbps
vEthernet (外部ネット... Hyper-V Virtual Ethernet Adapter #3 29 Disconnected **-**-**-**-**-** 10 Gbps
vEthernet (既定のスイ... Hyper-V Virtual Ethernet Adapter #2 35 Up **-**-**-**-**-** 10 Gbps
Wi-Fi Realtek RTL8723BE Wireless LAN 802.1... 12 Up **-**-**-**-**-** 150 Mbps
Nexus7Bluetoothネット... Bluetooth PAN HelpText 23 Disconnected **-**-**-**-**-** 3 Mbps

コマンドレットNew-VMSwitchで"WinNAT"という名前の内部ネットワークアダプタを作ります。
コマンドレットGet-NetAdapterでネットワークアダプタを表示します。

次に、WinNATのデフォルトゲートウェイのIPアドレスとネットワーク部のプレフィックス長、インターフェイスインデックスを設定します。インターフェイスインデックスは、上のGet-NetAdapterで調べた値です。物理ネットワークのネットワーク部はVMのネットワークから見ると外部IPプレフィックスとなり、VMのネットワークは内部IPプレフィックスとなりますが、両者はオーバーラップすることができませんので注意しましょう。


PS C:\> New-NetIPAddress -IPAddress 192.168.1.1 -PrefixLength 24 -InterfaceIndex 39

IPAddress : 192.168.1.1
InterfaceIndex : 39
InterfaceAlias : vEthernet (WinNAT)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Tentative
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore

IPAddress : 192.168.1.1
InterfaceIndex : 39
InterfaceAlias : vEthernet (WinNAT)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Invalid
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : PersistentStore


次に、NATネットワークを設定します。コマンドレットGet-NetIPAddressの出力結果は抜粋しています。


PS C:\> New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.1.0/24

Name : MyNATnetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.1.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True

PS C:\> Get-NetIPAddress

IPAddress : ::1
InterfaceIndex : 1
InterfaceAlias : Loopback Pseudo-Interface 1
AddressFamily : IPv6
Type : Unicast
PrefixLength : 128
PrefixOrigin : WellKnown
SuffixOrigin : WellKnown
AddressState : Preferred
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore

IPAddress : 127.0.0.1
InterfaceIndex : 1
InterfaceAlias : Loopback Pseudo-Interface 1
AddressFamily : IPv4
Type : Unicast
PrefixLength : 8
PrefixOrigin : WellKnown
SuffixOrigin : WellKnown
AddressState : Preferred
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore

IPAddress : 192.168.137.1
InterfaceIndex : 28
InterfaceAlias : vEthernet (内部ネットワーク)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Preferred
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore

IPAddress : 192.168.1.1
InterfaceIndex : 39
InterfaceAlias : vEthernet (WinNAT)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Preferred
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore

IPAddress : 192.168.0.12
InterfaceIndex : 12
InterfaceAlias : Wi-Fi
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Dhcp
SuffixOrigin : Dhcp
AddressState : Preferred
ValidLifetime : 00:52:37
PreferredLifetime : 00:52:37
SkipAsSource : False
PolicyStore : ActiveStore

コマンドレットNew-NetNatで"MyNATnetwork"という名称のネットワークを作成しました。プレフィックスを192.168.1.0/24としています。

なお、vEthernet (内部ネットワーク)(192.168.137.1)は、別途作成した仮想内部ネットワークアダプタで、共有設定するとディフォルトのIPアドレスが192.168.137.1で、これがデフォルトゲートウェイとして機能します。ここでは不要です。

次に、Hyper-VマネージャーのHyper-Vの設定からNATの仮想アダプタを追加します。
2018010701

2018010702

次に、ゲストOSにおいて、手動でネットワーク設定をします。
2018010704_2

ゲストVMがネットワーク接続されました。
2018010705_2

ラップトップPCのBash on Ubuntu on Windowsのコンソールから、ゲストOSにリモートログインしてみました。
2018010710


最後に、ポートフォワード設定をしてみます。


PS C:\> Add-NetNatStaticMapping -NatName "myNATnetwork" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.1.11 -ExternalPort 80 -InternalPort 80

StaticMappingID : 1
NatName : myNATnetwork
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 80
InternalIPAddress : 192.168.1.11
InternalPort : 80
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True

SSH(ポート22)も設定した後の結果は以下のとおり。

 
PS C:\> Get-NetNatStaticMapping

StaticMappingID : 0
NatName : MyNATnetwork
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 22
InternalIPAddress : 192.168.1.11
InternalPort : 22
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True

StaticMappingID : 1
NatName : myNATnetwork
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 80
InternalIPAddress : 192.168.1.11
InternalPort : 80
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True

これで、NAPTの設定ができましたので、外部クライアントからラップトップPCを経由してゲストOSのSSHやWebサービスにアクセスすることができます。

|

« LAMY tipoにV BALL RTのリフィルを入れてみた | トップページ | 嫁と格安SIM − mineoの場合 − (その9) »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1024423/72640691

この記事へのトラックバック一覧です: Windows 10上のHyper-VでUbuntuを動かしてネットワーク設定(NAT)を行う:

« LAMY tipoにV BALL RTのリフィルを入れてみた | トップページ | 嫁と格安SIM − mineoの場合 − (その9) »