技術的な話

【Hyper-V開発 #2】Hyper-Vのネットワーク設定を行う

前回はこちらから

今回の目標

  • 内部ネットワーク設定
  • 固定IPを設定する
  • インターネット接続が出来るようにする

外部ネットワークに設定した場合、同一ネットワーク上に仮想マシンも表示されます。
例えば、会社などのセキュリティが厳しいネットワーク上だと登録されていないPCが接続されたとして情シスが調査しに…来たりするかも。もしくは登録されていないMACアドレスなのでインターネット接続できない…とか。

今回はホストPCの内部ネットワーク上で通信させるので同一ネットワーク上には表示されず、尚且つホストPCの物理NICを通してインターネット接続する方法になります。
要はちゃんとした人の後ろに隠れてコソコソ通信する方式です。

別にコソコソ通信しなくても堂々と通信しても良いという人はデフォルト若しくは外部ネットワークのスイッチを作成することでいけます。
なのでここを読む必要は無いです。

同じようなネットワーク設定をVirtual Boxでも実現可能です

気になる方は下記よりどうぞ!

内部ネットワーク用のスイッチを作成、反映手順

Hyper-Vの仮想スイッチマネージャーから作成します。
ポイントは下記になります。

  • 接続の種類:内部ネットワーク

内部ネットワークインターフェースのIPアドレス設定

作成した内部ネットワークのIPアドレスを設定します。

今回はとりあえず10.xxx.xxx.xxx系に設定しました。
ここは自身のNW環境によって変えてください。

次にPowershellを管理者権限で起動します。
その後下記コマンドを実行して、作成した内部ネットワークでインターネット接続できるようにNAPT設定を行います。

PS> New-NeTNat -Name "MyNAPT" -InternalIPInterfaceAddressPrefix 10.10.254.0/24

最初のオプションは名称なのでご自由に設定してください。
次のオプションは先ほど内部ネットワークに設定したIPアドレス体系を入力してください。

この設定を実施することで内部ネットワークと物理ネットワークを通信させることができます。
これによりインターネット接続が可能になります。

Ubuntuのネットワーク設定手順

仮想マシンのIPアドレスを設定します。
UbuntuはNetplanってものがあるらしいのでそれで設定します。

最初にある設定ファイルをリネームしておきます。

$ sudo mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.default

次に設定ファイルを作成します。
99-config.yamlを作成するのが一応推奨のやり方みたいですね。

$ sudo vi /etc/netplan/99-config.yaml

設定ファイルに下記内容を記載します。
IPアドレス体系を変えている場合は別途読み替えてください。
デフォルトゲートウェイは先ほど内部ネットワークに設定したIPアドレスを設定しました。
DNSはとりあえずの設定にしています。
たまにネットワークインターフェース(eth0)の名称が違う場合があるのでお気を付けください。

network:
  version: 2
  ethernets:
    eth0:
      addresses: [10.10.254.101/24]
      gateway4: 10.10.254.254
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

以下コマンドで設定を反映させます。

$ sudo netplan apply

接続確認をする

とりあえず色々な場所にPingを打ってみて疎通確認を行います。

# デフォルトゲートウェイへの通信確認
$ ping 10.10.254.254

# ホストPCへの通信確認
$ ping 192.168.1.xxx

# DNSへの通信確認
$ ping 8.8.8.8

# Google先生への通信確認
$ ping google.com

# curlしてみる
$ curl https://www.google.com/

全て問題無さそうであれば完了です。

デフォルトゲートウェイで通信出来なかった場合はUbuntuのネットワーク設定や内部ネットワークのIPアドレス設定を確認してみてください。

ホストPC、DNS、Googleへの通信が出来なかった場合はNAPT設定が上手くいっていない可能性、もしくはUbuntuのIPアドレス設定が上手くいっていない可能性があります。

以上で全て完了です。
より良い環境で開発していきたいものですね!

-技術的な話
-, , ,