Ubunut20.04 KVMでプライベートクラウドを構築しよう ~その4 サーバ接続用仮想ネットワークの作成

 本記事では、KVMの仮想環境に、サーバ接続用の仮想ネットワークを構築する方法について説明します。
 サーバ接続用の仮想ネットワークとは、作成する仮想マシンに固定IPドレスを設定して、外部ホストと直接通信させるための仮想ネットワークのことです。
 サーバ接続用の仮想ネットワークを作っておくと、仮想マシンでアプリケーションサーバを構築することができるようになります。
 また、サーバ接続用ネットワークの仮想マシンにRDPサーバアプリをインストールすると、別PCから仮想マシンをリモートデスクトップで利用できるようになります。いろいろなOSやLinuxディストリビューションの仮想マシンで遊んでみたい人は是非、サーバ接続用の仮想ネットワークを作成してみましょう。
 なお、本記事で説明するサーバ接続用の仮想ネットワークを追加しても、前の記事で説明したKVMのデフォルトネットワークはそのまま利用することができます。

関連記事
 インストールするパッケージについて
 KVMのインストールと仮想マシンの作成
 KVMの仮想環境
 サーバ接続用仮想ネットワークの作成(この記事)

1.構築するサーバネットワークの構成

 図1に、作成するサーバ接続用ネットワークの構成図を示し、説明を補足します。

前提条件として、ホストマシン(物理PC)には、enp89s0という名前のイーサネットのネットワークインタフェースカード(NIC)が1枚あるものとします。このNICは192.168.0.0/24の物理LANに接続されており、設定変更前は、192.168.0.101のIPアドレスが設定されていたものとします。

ホストマシンで無線LANが有効になっており、物理NIC(enp89s0)と同じIPネットワーク(192.168.0.0/24)に接続されている場合は、ホストマシンの無線LANを無効化してください。仮想ブリッジが外部のホストとうまく通信できなくなりました。

画像1

図1 本記事で構築するサーバ接続用ネットワークの構成

 以下は、図1の補足説明となります。本記事では、Ubuntu20.04のネットワーク設定ツールである、netplanを使って図1のネットワークを構築します。

 まず、br0のyamlファイルを作成し、netplan applyコマンドを実行してブリッジbr0を作成します(yamlファイルの中身とコマンドについては後述)。
 このとき、ホストマシンの物理NIC enp89s0に設定されていたIPアドレス192.168.0.101/24は、物理NIC enp89s0ではなく、仮想ブリッジbr0に設定します。物理NICenp89s0にはIPアドレスを付与しません(図1参照)。

 この状態で192.168.0.101宛のサービスリクエストを物理NICが受信した場合、サービスリクエストはホストマシンのアプリケーションに転送されます。
 一方、ホストマシンのアプリケーションからのサービスリクエストは物理NICを通して外部へ送信されます。このときの送信元IPアドレスは仮想ブリッジbr0に設定された192.168.0.101/24となります。

 br0を作成したら、つぎに、仮想マシンを作成してbr0に接続させます。
 仮想マシンは、こちらの記事で紹介したvirt-managerを使って作成します。
 ここで、作成する仮想マシン名を「仮想マシン1」とします。
 仮想マシン1作成時、接続先のブリッジを聞かれますので、先に作成した仮想ブリッジbr0に接続するよう指定します。このタイミングで、仮想ブリッジbr0には、vnetx(xは数字の通し番号)の名前で接続ポートが自動で作成され、仮想マシン1のNICと自動で接続されます(図1参照)。

 仮想マシンの作成が完了したら、作成した仮想マシン1のNICに固定IPを設定します。設定するIPアドレスはbr0が接続されたネットワーク(図1の例では192.168.0.0/24)のアドレスレンジから選択します。(例:192.168.0.111/24など)。他のホストのIPアドレスと重複させないようにアドレスを選択してください。

 virt-managerを使ってOSインストールして仮想マシンを作成すると、たいていの場合は起動時にDHCPサーバ(通常はブロードバンドルータが兼ねる)からIPアドレスを自動取得する設定となっています。この設定を、固定IPアドレスの設定に変更します。

 仮想マシンの固定IPの設定は、OSの種類により異なります。OSがUbuntu20.04の場合はこちらの記事で固定IPアドレスの設定方法を紹介しています。参考にしてみてください。

 図1の接続構成とすることで、Home LANに接続されたホストと仮想マシン1は、仮想ブリッジbr0を介して同じIPネットワーク(192.168.0.0/24)に接続されます。このため、Home LANに接続されたホスト同士の通信に、ルータは介在しません。仮想マシンであれ、物理ホストであれ、ブリッジ(スイッチングハブ)を介して直接通信する構成となります。

2.サーバ接続用ネットワークの設定(br0の作成)

 図1で示したサーバ接続用ネットワーク(仮想ブリッジbr0)は、ホストマシン(物理マシン:図1の192.168.0.101)の/etc/netplan配下のyamlファイルで定義します。
 なお、netplanのファイル名には以下の制限があります。

・設定ファイルは/etc/netplanディレクトリに作成します
・設定ファイルの拡張子は.yamlとしてください
 (拡張子は".yml"でもダメなんだそうですので気を付けて)
・設定ファイルのファイル名は、他の設定ファイル(.yaml)のファイル名の中で英数順で最後になるファイル名にしてください
・他の設定ファイル(.yaml)を変更する必要はありません。

 以下、netplanの設定ファイルの内容を示し、補足します。私のホストマシンの/etc/netplanには、以下のnetplan設定ファイルが保存されている状態でした。

$ ls -l /etc/netplan
合計 16
-rw-r--r-- 1 root root 104  88  2020 01-network-manager-all.yaml
-rw-r--r-- 1 root root 221  525 18:00 100-nuc1-networkd-eth01.yaml

そこで、br0作成の設定ファイルを、英数順で一番最後にくるように、ファイル名を

200-nuc1-networkd-eth01-br0.yaml

としました。
設定ファイル"200-nuc1-networkd-eth01-br0.yaml"の中身は以下のとおりです。

network:
  version: 2
  renderer: networkd
 
  ethernets:
    enp89s0:
      dhcp4: no
 
  bridges:
    br0:
      interfaces: [enp89s0]
      addresses: [192.168.0.101/24]
      gateway4: 192.168.0.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8]

以下、設定ファイルの補足です。

 network:で始まる最初の3行は、netplanの設定ファイルがversion2の形式で記述されていること、設定のサブツールに、"networkd"を利用することが定義されています。
 "networkd"は、ubuntuのネットワーク設定をカスタマイズする際に利用するサブツールです。

 ethernets:で始まる次の3行は、ホストマシンのイーサネットNICである"enp89s0"の設定が記述されています。dhcp4:noは、このNICが内部の仮想ネットワークに接続された仮想マシンに対して、dhcpサーバの機能を無効にする定義が書かれています。
 IP関連の設定は一切定義されていないため、enp89s0はIPアドレスを持ちません。

 bridges:以下で仮想ブリッジを作成しています。
 2行目のbr0:で、ブリッジ名"br0"の仮想ブリッジを作成することを宣言しています。
 3行目のinterfaces: では、br0の接続ポートとするNICを定義しています。[]はリスト形式のデータであることを示しており、ホストマシンが複数のNICを持つ場合、カンマ区切りで複数のNICを指定することができます。
 ここでは、物理NIC enp89s0をブリッジbr0の接続ポートとすることを定義しています。
 4行目のaddressesは、br0の固定IPアドレスを定義しています。192.168.0.101が定義されていますが、本記事の例では、もともと物理NIC enp89s0に付与されていたIPアドレスです。このIPアドレスを、仮想ブリッジbr0に付与しました。IPアドレスは複数設定できるので、リスト形式で定義されています。
 上記の図1でも説明したとおり、この192.168.0.101は、ホストマシンの固定IPアドレスとなります。

 5行目のgateway4:は、仮想ブリッジbr0のデフォルトルートとなる隣接ルータのIPが設定されています。Home LAN(192.168.0.0/24)以外のIPネットワークへパケットを転送する場合は、すべて192.168.0.1に転送されます。
 この、IPアドレス192.168.0.1は、我が家のブロードバンドルータのLAN側のIPアドレスです。この設定が誤ると、ホストマシンのアプリケーションからインターネットに接続することができません。

 6行目のmtu:は、イーサネットフレームの最大フレーム長(Byte)を定義しています。特殊なチューニングをやる必要がなければ1500にしておけば良いです。

 7行目と8行目は、DNSキャッシュサーバのアドレスを指定しています。8.8.8.8は、googleがインターネットに公開しているDNSキャッシュサーバのアドレスです。リスト形式で複数指定できます。
  br0のnameservers:と、addresses:の設定がホストマシンのキャッシュDNSの設定になるため、ホストマシンを固定IPで利用する場合、この設定は必須となります。DNSが利用できないと、インターネットのサーバにアクセスできません。

 上記yamlファイルの作成が完了したら、netplanコマンドを実行してこの設定を反映させましょう。

$ sudo netplan apply

 不具合が生じる場合は、作成したyamlファイル(本記事では"200-nuc1-networkd-eth01-br0.yaml")を削除するか、ファイルの拡張子をyamlから別のものに変更して再度sudo netplan applyコマンドを実行してください。ネットワークの設定が元に戻ります。

3.仮想マシンを作成して固定IPアドレスを設定する

 仮想マシンの作成方法は、前の記事で説明した方法と同じです。作成するときに仮想マシンの接続先のネットワークに、"br0"を選択すれば良いだけです。

 上記図1で示したとおり、br0に接続した仮想マシンは、ブロードバンドルータと同じIPネットワークに接続されます。
 このため、作成する仮想マシンに固定IPアドレスが設定されていない場合は、DHCPサーバとして動作している、ブロードバンドルータからIPアドレスが自動付与され、そのままデスクトップPCとして利用できます。
 便利なのですが、起動するたびにIPアドレスが変わってしまうため、サーバ用途で使う場合は仮想マシンに固定IPアドレスを設定する必要があります。設定方法についてはこちらの記事を参考にしてください。


この記事が気に入ったらサポートをしてみませんか?