Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 : libvirt デーモンの起動時に自動的に起動する network-name をマークします。--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]
このコマンドは、--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 は、指定した仮想ネットワークの stdout に、仮想ネットワーク情報を 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 (これらは同義)
  • 削除
  • 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 は、ネットワークの <ip> 要素内の <dhcp> 要素に含まれる <host> 要素を変更します。
XML は、変更するタイプの XML 要素全体 (<host mac="00:11:22:33:44:55' ip='1.2.3.4'/> など) のテキスト、または XML 要素がすべて含まれるファイル名のいずれかになります。あいまいさの除去は、提供されているテキストの最初の文字を調べて行います。最初の文字が < の場合は XML テキストで、最初の文字が > でない場合は、使用される xml テキストが含まれるファイル名になります。--parent-index オプションは、要求された要素が、複数の親要素のうちどの要素にあるのかを指定するために使用します (0-ベース)。
たとえば、dhcp <host> 要素は、ネットワーク内の複数の <ip> 要素のいずれかに置くことができます。parent-index が指定されていない場合は最も適切な <ip> 要素が選択されます (通常は、<dhcp> 要素がすでに存在するものだけが対象となります)。ただし、--parent-index が指定されていると、<ip> の特定のインスタンスが修正されます。--live を指定すると、実行中のネットワークに影響を及ぼします。--config を指定した場合は、次に永続的なネットワークを起動する際に影響を及ぼします。--current を指定した場合は、現在のネットワークステータスに影響を及ぼします。--live フラグと --config フラグの両方が指定できますが、--current は排他的になります。フラグを指定しないことは、--current を指定することと同じです。

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

virsh を使用した移行に関する情報は、Live KVM Migration with virsh というタイトルのセクションにあります。「virsh を使用した KVM のライブ移行」 を参照してください。

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

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

手順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 コマンドは、IP アドレスを再要求せずに、多くの DHCP クライアントが短い間ケーブルを切断できるため、重要です。10 秒経過すると、DHCP クライアントは古い IP アドレスを忘れ、up コマンドが実行されると新しい IP アドレスを要求します。何らかの理由でこのコマンドが失敗した場合は、ゲストオペレーティングシステムの管理インターフェイスからゲストのインターフェイスをリセットする必要があります。