テスト用のLinuxを持ち運びたくて、WindowsノートPC上にHyper-Vで仮想PCを作りましたが、ネットワーク接続に困った。
・外のPCからはアクセスされなくて良い
・自分のWindowsからは固定されたIPでアクセスしたい
↑or 独自のローカルドメイン名でアクセスさせる(unbound DNS使用)
・仮想PCからインターネット接続も使いたい
Hyper-Vのネットワーク接続は仮想スイッチで行う。
仮想スイッチは「外部」「内部」「プライベート」があって、
・「外部」ホストPCの物理NICに相乗りする。なのでWiFiなど環境が変わると仮想PCもDHCPの影響を受ける。
・「内部」ホストPCと仮想PCでLANを作る。
・「プライベート」仮想PC同士だけでLANを作る。ホストPCとも繋がらない。
という違いがある。
仮想PCのIPアドレスを固定しつつインターネット接続を行うには、「内部」仮想スイッチを作成して、そこからNAT(WinNAT)で仮想PCのアクセスを確保する。
仮想スイッチのIPアドレスを 192.168.99.1、仮想PCのIPアドレスを192.168.99.2として
ホストPC上管理者権限で
New-NetNat -Name hogeNAT -InternalIPInterfaceAddressPrefix 192.168.99.0/24
とするとNATが使えるようになる。
やってみたけどすぐには使えなくて、再起動したら使えるようになってた。
NAPTでポート転送もできる。
Add-NetNatStaticMapping -NatName hogeNAT -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.99.2 -ExternalPort 10022 -InternalPort 22 -Protocol TCP
これで他のPCからホストPC:10022宛で仮想PC:sshができるようになったりする。
仮想PC側はIP固定にして、DNSはGoogle Public DNSなりホストPCに立てたDNSなりを使えば良い。DHCPサーバーを立てることもできるようだ(やってない)。
現在どんなNatが存在しているかはGet-NetNat、削除はRemove-NetNatのようだ。
コマンドが長いけどオプションまでタブ補完してくれて助かる。