Ubunut20.04 KVMでプライベートクラウドを構築しよう ~その3 KVMと仮想環境
本記事では、KVMをインストールしたときにホストマシンの内部に自動作成される、「KVMデフォルトネットワーク」の構成について説明します。
KVMのインストール方法については、前の記事を参照してください。
1.KVMのデフォルトネットワーク
図1は、KVMインストール初期状態の仮想環境の構成図です。
後ろの記事で図1の補足説明をしていますので、図を見ながら記事を読むと良いと思います。
図1 KVMデフォルトネットワークの構成
KVMをインストールすると、内部にvirbr0という名前の仮想ブリッジ(スイッチングハブ)が自動で作成されます。この仮想ブリッジは、内部に192.168.123.1/24のIPアドレスが付与されています。仮想ブリッジvirbr0のIPネットワークアドレスの範囲は、192.168.123.0/24(192.168.123.1 ~ 192.168.123.254)であり、virbr0に接続される仮想マシンへは、このネットワーク範囲に含まれるIPアドレスを付与します。
virbr0-nicは、仮想ブリッジvirbr0の内部に作成された仮想NICです。virbr0-nicは、仮想ブリッジvirbr0に接続された仮想マシンからは、IPアドレス192.168.123.1をもつ、デフォルトゲートウェイルータのポートに見えます。
以下、仮想マシンの作成手順に沿って、仮想マシンへのネットワーク設定について説明します。
ここで作成する仮想マシンを、仮に「仮想マシン1」とします。仮想マシン1作成時、どの仮想ブリッジに接続するか聞かれますので、ここで仮想ブリッジvirbr0(デフォルトネットワーク:NAT)に接続するよう指定します。このタイミングで、仮想ブリッジvirbr0には、vnetx(xは数字の通し番号)の名前で接続ポートが自動作成され、仮想マシン1のNICと自動接続されます。
つづいて、仮想マシン1にOSをインストールして仮想マシン1を完成させます。
作成した仮想マシン1を起動すると、仮想マシン1のネットワーク接続に必要な項目が自動設定され、仮想マシン1はそのまま外部ホストと通信ができるようになります。これは、仮想ブリッジvirbr0が、KVMデフォルトネットワーク(192.168.123.0/24)のDHCPサーバを兼ねているからです。KVMのデフォルトネットワークに接続する仮想マシンについては、ネットワーク設定をする必要がありません。
3.KVMデフォルトネットワークと外部物理ネットワークの接続方式
上記で説明したKVMデフォルトネットワーク(仮想ブリッジvirbr0のネットワーク)と外部物理ネットワークの接続方式について補足します。
KVMのデフォルトネットワーク(192.168.123.0/24)に接続された仮想マシンから、外部ネットワーク向きのサービスリクエスト通信は、物理NICのIPアドレス(192.168.0.101)でソースNAT(IPマスカレード)されます。
仮想マシンのネットワーク設定が不要で、便利なデフォルトネットワークですが、仮想環境にサーバを構築したい場合は困ったことになります。IPマスカレードでは、外部ホストから仮想マシン(192.168.123.0/24)宛のサービスリクエストをルーティングすることができないためです。
ルーティング以外の方法で解決する策もあるのですが、ネットワークやアプリケーションの設定が面倒になります。仮想環境にサーバを構築したい場合は、KVMのデフォルトネットワークとは別の仮想ネットワークを作ることをおすすめします。
次の記事では、サーバ接続用の仮想ネットワークの構成と作成方法について説明をします。KVM環境にサーバを構築したい方は、是非参考にしてください。
KVMインストール直後のホストマシンのipコマンド(ip addrとip route)の出力です。上記図1を使って説明したホストマシンの各仮想NICや仮想ブリッジは、linux OSからは以下のように確認することができます。
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp89s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether 1c:69:7a:a2:21:45 brd ff:ff:ff:ff:ff:ff
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:00:4e:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.123.1/24 brd 192.168.123.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:00:4e:c0 brd ff:ff:ff:ff:ff:ff
5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:a6:01:ad brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fea6:1ad/64 scope link
valid_lft forever preferred_lft forever
$ ip route
default via 192.168.0.1 dev br0 proto static
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.101
192.168.123.0/24 dev virbr0 proto kernel scope link src 192.168.123.1
ogs-digilife@HomeGW-NUC11i5$
仮想ブリッジvirbr0に接続された「仮想マシン1」のipコマンド(ip addrとip route)の出力です。
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:a6:01:ad brd ff:ff:ff:ff:ff:ff
inet 192.168.123.2/24 brd 192.168.123.255 scope global dynamic noprefixroute enp1s0
valid_lft 3368sec preferred_lft 3368sec
inet6 fe80::75e7:7329:9aa6:3fce/64 scope link noprefixroute
valid_lft forever preferred_lft forever
$ ip route
default via 192.168.123.1 dev enp1s0 proto dhcp metric 100
169.254.0.0/16 dev enp1s0 scope link metric 1000
192.168.123.0/24 dev enp1s0 proto kernel scope link src 192.168.123.23 metric 100
この記事が気に入ったらサポートをしてみませんか?