20.37. 仮想ネットワークの管理

このセクションでは、virsh コマンドで仮想ネットワークを管理する方法について説明します。仮想ネットワークの一覧を表示するには、以下を実行します。
# virsh net-list
このコマンドを実行すると以下のような出力が生成されます。
# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes
vnet1	             active     yes
vnet2	             active     yes
特定の仮想ネットワークのネットワーク情報を表示するには、以下を実行します。
# virsh net-dumpxml NetworkName
指定した仮想ネットワークに関する情報が XML 形式で表示されます。
# virsh net-dumpxml vnet1
<network>
  <name>vnet1</name>
  <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid>
  <forward dev='eth0'/>
  <bridge name='vnet0' stp='on' forwardDelay='0' />
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254' />
    </dhcp>
  </ip>
</network>
仮想ネットワークの管理で使用される他の virsh コマンドを以下に示します。
  • virsh net-autostart network-name : network-name デーモンの起動時に、libvirt が自動的に起動するようマークします。--disable オプションで network-name のマークを解除します。
  • virsh net-create XMLfile : 既存ファイルの XML 定義を使用して、新規の (一時的) ネットワークを開始します。
  • virsh net-define XMLfile : 既存ファイルの XML 定義を使用して新規のネットワークを定義しますが、これを起動しません。
  • virsh net-destroy network-name : network-name で指定されたネットワークを破棄します。
  • virsh net-name networkUUID : 指定した networkUUID をネットワーク名に変換します。
  • virsh net-uuid network-name : 指定した network-name をネットワーク UUID に変換します。
  • virsh net-start nameOfInactiveNetwork : 非アクティブのネットワークを起動します。
  • virsh net-undefine nameOfInactiveNetwork : ネットワークの非アクティブな XML 定義を削除します。これはネットワークの状態には影響を与えません。コマンド実行時にドメインが稼働していれば、ネットワークは稼働し続けます。ただし、ネットワークは永続的ではなく、一時的なものになります。
libvirt には、ドメインによって使用され、実際のネットワークデバイスにリンクされる仮想ネットワークを定義する機能があります。この機能についての詳細は、libvirt のアップストリームの web サイト にあるドキュメントを参照してください。仮想ネットワークのコマンドの多くはドメインに使用されるコマンドと似ていますが、仮想ネットワークに名前を付ける方法は、その名前自体または UUID のいずれかを使用する方法になります。

20.37.1. 仮想ネットワークの自動起動

virsh net-autostart コマンドは、ゲスト仮想マシンの起動時に自動的に起動される仮想ネットワークを設定します。
# virsh net-autostart network [--disable]
このコマンドは、autostart コマンドを無効にする --disable オプションを受け入れます。

20.37.2. XML ファイルによる仮想ネットワークの作成

virsh net-create コマンドは、XML ファイルから仮想ネットワークを作成します。libvirt で使用する XML ネットワーク形式の説明については、libvirt のアップストリームの web サイト を参照してください。このコマンドで、file は XML ファイルのパスになります。XML ファイルから仮想ネットワークを作成するには、以下を実行します。
# virsh net-create file

20.37.3. XML ファイルによる仮想ネットワークの定義

virsh net-define コマンドは、XML ファイルから仮想ネットワークを定義します。ネットワークは定義されますが、インスタンス化は行われません。
# virsh net-define file

20.37.4. 仮想ネットワークの停止

virsh net-destroy コマンドは、名前または UUID で指定した仮想ネットワークを破棄 (停止) します。これはすぐに有効になります。指定されたネットワークを停止するには、network が必要になります。
# virsh net-destroy network

20.37.5. ダンプファイルの作成

virsh net-dumpxml コマンドは、指定された仮想ネットワークの情報を標準出力に XML ダンプとして出力します。--inactive が指定されている場合、物理機能は関連付けられた仮想機能に拡張されません。
# virsh net-dumpxml network [--inactive]

20.37.6. 仮想ネットワークの XML 設定ファイルの編集

以下のコマンドは、ネットワークの XML 設定ファイルを編集します。
# virsh net-edit network
XML ファイルの編集に使用するエディターは $VISUAL または $EDITOR 環境変数で指定でき、デフォルトは vi になります。

20.37.7. 仮想ネットワークについての情報の取得

virsh net-info は、network オブジェクトの基本情報を返します。
# virsh net-info network

20.37.8. 仮想ネットワークについての情報の一覧表示

virsh net-list コマンドは、アクティブなネットワークの一覧を返します。--all を指定する場合は、定義済みであるものの、アクティブではないネットワークも含まれます。--inactive が指定される場合、アクティブではないネットワークのみが一覧表示されます。さらに、返されたネットワークを絞り込む場合は、永続的なネットワークを一覧表示するには --persistent を、一時的なネットワークを一覧表示するには --transient を、自動起動が有効なネットワークを一覧表示するには --autostart を使用し、さらに自動起動が無効なネットワークを一覧表示するには --no-autostart を使用して実行できます。
注意: 古いサーバーと通信する際、このコマンドには、固有の競合が関係する一連の API 呼び出しの使用が強制されます。これにより、一覧が収集されている間に複数の呼び出し間の状態が変更される場合、プールは一覧表示されなくなるか、または複数回表示される可能性があります。ただし、新しいサーバーの場合は、この問題は発生しません。
仮想ネットワークを一覧表示するには、以下を実行します。
# virsh net-list [--inactive | --all] [--persistent] [<--transient>] [--autostart] [<--no-autostart>]

20.37.9. ネットワーク UUID からネットワーク名への変換

virsh net-name コマンドは、ネットワーク UUID をネットワーク名に変換します。
# virsh net-name network-UUID

20.37.10. ネットワーク名からネットワーク UUID への変換

virsh net-uuid コマンドは、ネットワーク名をネットワーク UUID に変換します。
# virsh net-uuid network-name

20.37.11. 非アクティブの(定義済み)ネットワークの起動

virsh net-start コマンドは、(以前に定義された) 非アクティブなネットワークを開始します。
# virsh net-start network

20.37.12. 停止状態のネットワークの設定の定義解除

virsh net-undefine コマンドは、非アクティブなネットワーク設定の定義を解除します。
# virsh net-undefine network

20.37.13. 既存のネットワーク定義ファイルの更新

# virsh net-update network directive section XML [--parent-index index] [[--live] [--config] | [--current]]
virsh net-update コマンドは、以下のいずれかの directives を既存ネットワーク定義の指定されたセクションに発行することで、これを更新します。
  • add-first
  • add-last または add (これらは同義)
  • delete
  • modify
section は以下のいずれかになります。
  • bridge
  • domain
  • ip
  • ip-dhcp-host
  • ip-dhcp-range
  • forward
  • forward interface
  • forward-pf
  • portgroup
  • dns-host
  • dns-txt
  • dns-srv
各セクションは、変更される要素につながる XML 要素の階層を連結したもので命名されています。たとえば、ip-dhcp-host は、ネットワークの <host> 要素内の <dhcp> 要素に格納されている <ip> 要素を変更します。
XML は、変更される完全 XML 要素のタイプのテキスト (たとえば、<host mac="00:11:22:33:44:55’ ip=’1.2.3.4’/>) か、完全 XML 要素を格納しているファイル名になります。提供されたテキストの最初の文字が < であれば XML テキストであり、最初の文字が > でなければ、使用する XML テキストを格納しているファイル名になります。--parent-index オプションを使うと、要求される要素が格納されている親要素を指定することができます (0 ベース)。
たとえば、dhcp <host> 要素は、ネットワーク内の複数の <ip> 要素に格納されることが可能です。親インデックスが提供されない場合、最適な <ip> 要素 (通常は、<dhcp> 要素を既に持っているもの) が選択されますが、--parent-index が提供されている場合は、特定の <ip> インスタンスが修正されます。--live を指定すると、実行中のネットワークに適用されます。--config を指定すると、永続的ネットワークの次回起動時に適用されます。--current を指定すると、現在のネットワーク状態に適用されます。--live--config フラグは同時に使用することができますが、--current とはできません。フラグを何も指定しないと、--current を指定した場合と同じになります。

20.37.14. virsh を使用したゲスト仮想マシンの移行

virsh を使用した移行についての情報は、「virsh を使用した KVM のライブマイグレーション」というタイトルのセクションに記載されています。「virsh を使用した KVM のライブマイグレーション」 を参照してください。

20.37.15. ゲスト仮想マシンの静的 IP アドレスの設定

ゲスト仮想マシンが DHCP から IP アドレスを取得するように設定されているものの、それを予測可能な静的 IP アドレスを持つように設定する必要がある場合、以下の手順を使用して libvirt で使用される DHCP サーバー設定を変更することができます。この手順では、この変更を行うためにゲストインターフェースの MAC アドレスを把握しておく必要があります。そのため、この操作をゲストの作成後に実行するか、または作成前にゲストの MAC アドレスを決定して、ゲスト仮想マシンの作成時にこの同じアドレスを手動で設定する必要があります。
さらに、この手順は libvirt 仮想ネットワークに接続されているゲストインターフェースで、転送モードの "nat""route" が設定されているか、または転送モードが設定されていない場合にのみ機能することに注意する必要があります。この手順は、ネットワークが forward mode="bridge" または "hostdev" で設定されている場合には機能しません。その場合、DCHP サーバーはネットワークの別の場所に置かれているため、libvirt の制御下にはありません。この場合、静的 IP エントリーをリモート DHCP サーバーに作成する必要があります。これを実行するには、サーバーと共に提供されるドキュメントを参照してください。

手順20.5 静的 IP アドレスの設定

この手順はホスト物理マシンで実行されます。
  1. ゲスト XML 設定ファイルをチェックします。

    virsh domiflist guest1 コマンドを実行してゲストのネットワーク設定を表示します。guest1 を仮想マシンの名前で置き換えます。表が表示されるので、「Source」コラムを確認します。これはネットワークの名前です。この例では、ネットワークは default になります。この名前は MAC アドレスと共に残りの手順で使用されます。
    # virsh domiflist guest1
    Interface  Type       Source     Model       MAC
    -------------------------------------------------------
    vnet4      network    default    virtio      52:54:00:48:27:1D
    
  2. DHCP 範囲の確認

    設定する IP アドレスは、ネットワークに指定される dhcp 範囲内にある必要があります。さらに、ネットワーク上のその他の既存の静的 IP アドレスとの競合を避ける必要があります。使用されるアドレスと利用可能なアドレスの範囲を確認するには、ホストマシンで以下のコマンドを実行します。
    # virsh net-dumpxml default | egrep 'range|host\ mac'
    
    <range start='198.51.100.2' end='198.51.100.254'/>
    <host mac='52:54:00:48:27:1C:1D' ip='198.51.100.2'/>
    表示される出力はサンプルとは異なり、より多くの行と複数のホスト MAC 行が表示されます。各ゲストの静的 IP アドレスには 1 つの行があります。
  3. 静的 IP アドレスの設定

    ホストマシンで以下のコマンドを使用し、default をネットワーク名で置き換えます。
    # virsh net-update default add ip-dhcp-host '<host mac='52:54:00:48:27:1D' ip='198.51.100.3"/>'--live --config
    --live オプションを使用すると、この変更がすぐに有効になり、--config オプションは変更を永続化します。また、このコマンドは、有効な IP および MAC アドレスを使用していれば、まだ作成されていないゲスト仮想マシンでも機能します。MAC アドレスは有効なユニキャスト MAC アドレス (最初の数字のペアが偶数で、: で区切られる、6 組の 16 進数数字のペア) になります。libvirt が新規のランダム MAC アドレスを作成する場合、最初の 3 つの数字ペアに 52:54:00 を使用するので、この規則に準じることが推奨されます。
  4. インターフェースの再起動 (オプション)

    ゲスト仮想マシンが現在実行中の場合に、ゲスト仮想マシンが DHCP アドレスを再要求することを強制する必要があります。ゲストが実行されていない場合、新規 IP アドレスが次回の起動時に実施されます。インターフェースを再起動するには、以下のコマンドをホストマシンのターミナルに入力します。
    # virsh domif-setlink guest1 52:54:00:48:27:1D down
    # sleep 10
    # virsh domif-setlink guest1 52:54:00:48:27:1D up
    このコマンドにより、ゲスト仮想マシンのオペレーティングシステムは、イーサネットケーブルがアンプラグされ、10 秒後に再度プラグされたと認識します。sleep コマンドは、多くの DHCP クライアントが IP アドレスを再要求せずにケーブルの短い切断を可能にするので重要です。up コマンドが実行されると、10 秒程度で DHCP クライアントは古い IP アドレスを破棄し、新規アドレスを要求します。ある理由でこのコマンドが失敗する場合、ゲストオペレーティングシステムの管理インターフェースからゲストのインターフェースをリセットする必要があります。