CentOS7上にKVMサーバを構築する

新たにゲットしたサーバPC上に KVM ホスト環境を構築したので、手順を記しておきます。
OSは CentOS7 です。

はじめに

「暑さと連休明け ( 後人によっては五輪による寝不足 ) でやる気しねー」  な方も多そうな今日この頃、みなさまいかがお過ごしですか。
私も上記+αで連休明けからやる気死ねー状況だったりしますが... )

KVM のサーバ構築に関しては、以前 30分で仮想サーバ(KVMホスト)環境を構築する で記事にしていますが、先日新たにサーバをゲットし CentOS7 で新たに構築したので手順を書いておきます ( 前の記事は CentOS6 )。

CentOS6 の場合と比べてネットワーク周りの設定が大きく変わっているので、この辺りの差分を中心に説明します。

仮想化のメリット等は上記記事を参照して下さい。

環境

PC Intel VT、AMD-V 等の仮想化支援機能をサポートしているPC
Intelの対応CPU一覧 Intel の対応チップセット一覧
OS CentOS 7.2

ネットワーク構成

ネットワーク構成は 30分で仮想サーバ(KVMホスト)環境を構築する と同様です。

インストール

インストール手順を示します。

CentOSインストール

KVMのホストサーバとなるPCにCentOSをインストールします。
CentOS7 のインストールに関しては様々なサイトで解説されているので省略します。

パッケージのインストール

KVMサーバ構築に必要なパッケージをインストールします。
方法としては以下二通りの方法があります。

  • CentOS7 インストール中に選択する
    CentOS7 のインストーラにて "ソフトウェアの選択" が可能なので、ここで仮想化ホスト構築に必要なパッケージ ( "仮想化ホスト" )を追加します。
  • 既にインストール済みのCentOS7 にインストールする
    インストール済みのCentOS7の場合には yum groupinstall コマンドでインストールできます。
    # yum groupinstall "仮想化ホスト"
    

この辺りは CentOS6 の場合と同様です。

ネットワーク設定

ゲストOSをホストOSと同じネットワークに参加させるためにブリッジ接続の設定を行います。

前提

CentOS7 ではデバイス名のネーミングルールが変更になっています。

CentOS6 では eth0 などの名前になっていましたが、CentOS7 では eno1 等になっています。

先頭2文字次の1文字数字
en : イーサネット
wl : ワイヤレス
o : オンボード
s : PCI Express
デバイス番号

eno1 ならば、イーサネット、オンボードの1番という事になります。

ipv4転送設定

# vi /etc/sysctl.d/10-ipv4.conf
net.ipv4.ip_forward=1

上記設定を適用します。

# sysctl --system

非推奨手順

CentOS6 の場合にはネットワークスクリプトを直接編集しましたが、CentOS7では NetworkManager を利用する方法が推奨となっています。

※「非推奨手順書くなよ!」 な感もあるかもしれませんが、備忘録として書いておきます ( 推奨手順は後述 )。

  1. ブリッジネットワーク用スクリプトを作成します。
    # vi /etc/sysconfig/network-scripts/ifcfg-br0
    

    以下で作成します。ネットワークアドレス等は環境に応じて変更して下さい。

    DEVICE=br0
    NAME=br0
    TYPE=Bridge
    BOOTPROTO=none
    IPADDR=192.168.1.10
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    DELAY=0
    DNS1=192.168.1.1
    DNS2=192.168.1.2
    GATEWAY=192.168.1.1
    ONBOOT=yes
    
  2. eno1 の設定を変更します。既存スクリプトはバックアップ推奨。
    # vi /etc/sysconfig/network-scripts/ifcfg-eno1
    

    以下のように変更します。

    DEVICE=eno1
    NAME=eno1
    BOOTPROTO=none
    NM_CONTROLLED=yes
    ONBOOT=yes
    TYPE=Ethernet
    UUID=xxxxx-xx-xx-xx-xxxxx
    BRIDGE=br0
    

推奨手順

NetworkManager を利用する手順です。上述の通りCentOS7ではこちらが推奨手順です。
nmcli コマンドを利用します。

  1. br0 (ブリッジ) インターフェースを新規作成します。

    ※nmcli con の "con" は connection の省略形

    # nmcli con add type bridge ifname br0 con-name br0
    Connection 'br0' (....) successfully added.
    

    成功すると ... successfully added メッセージが出力されます。

    作成されたかどうかは以下で確認できます。

    # nmcli con show
    
  2. ブリッジ設定
    作成した br0 の設定を変更します。

    ※mod は modify の省略形

    # nmcli con mod br0 ipv4.method manual ipv4.addresses "192.168.1.10/24"
    # nmcli con mod br0 ipv4.gateway "192.168.1.1"
    # nmcli con mod br0 ipv4.dns "192.168.1.1"
    # nmcli con mod br0 ipv4.dns-search "agilegroup.local"
    

    上からそれぞれ以下を設定しています。

    • メソッド ( manual )、及び、IPアドレス
    • ゲートウェイ
    • DNSサーバ
      セカンダリも設定する場合、スペース区切りで指定
    • DNSサーチパス
  3. ブリッジスレーブコネクション( 物理ポートをブリッジに接続 ) の追加
    # nmcli con add type bridge-slave ifname eno1 con-name eno1-br0 master br0
    

    eno1-br0 という名前でブリッジスレーブコネクションが追加されます。

  4. 物理ポートを削除して再起動
    再起動後は物理ポートはブリッジ接続した状態 (上記ブリッジスレーブコネクションが有効になった状態 ) で起動します。
    # nmcli con del eno1; reboot
    

nmtui の利用

NetworkManager には上記 nmcli というコマンドラインツール以外にも、nmtui という CUI ベースのグラフィカル設定ツールも存在するので、これを利用して設定を変更するという方法でもよいでしょう。

ただし、個人的には、 nmtui の利用方法を理解していない状態でブリッジ設定行うのはお勧めしません ( 作業ログを残し難い。何を行っているか最初は判り辛い )。
上記設定を行い基本的な設定が完了/動作確認を行った後に、パラメータを調整する使い方あたりから始めるのが良いと思います。

設定しなくてもよかった事

CentOS6 ではファイアウォール (iptables) の転送設定を追加していましたが、CentOS7 では不要でした。

が、一応転送設定の手順に関しても備忘録として書いておきます。

ファイウォール転送設定

CentOS6と同様に転送設定する場合、以下で行える。

# firewall-cmd --permanent --direct --passthrough ipv4 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
# firewall-cmd --direct --passthrough ipv4 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

削除する場合、以下のようにする。

# firewall-cmd --permanent --direct --remove-passthrough ipv4 -m physdev --physdev-is-bridged -j ACCEPT
# firewall-cmd --direct --remove-passthrough ipv4 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

CentOS7 では iptables から firewalled に変更になりましたが、裏では iptables が動いており、iptables 上の設定を確認する事も可能です。
以下のコマンド群で確認可能となっています。

# firewall-cmd --direct --get-all-chains
# firewall-cmd --direct --get-all-rules
# firewall-cmd --direct --get-all-passthroughs

まとめ

CentOS7 でネットワーク周りは大分管理手順が変わりましたが、ブリッジネットワーク上に KVM サーバが構築できました。

今回も 手順を把握/理解していれば 30分程度で構築可能かと思われます。

ゲストOS の作成に関しては GUIでKVMの仮想マシンを管理する を参照して下さい。

 

仮想環境の構築、物理サーバからの移行などもご相談に応じます。お気軽にお問合せ下さい。