6.3. トランスポートモード

リモート管理用に、libvirt では次のようなトランスポートモードに対応しています。
Transport Layer Security (TLS)

Transport Layer Security TLS 1.0 (SSL 3.1) で認証され、暗号化される TCP/IP ソケットは、通常パブリックポート番号でリッスンします。これを使用するには、クライアントとサーバーの証明書を生成する必要があります。標準のポートは 16514 です。

UNIX ソケット

UNIX ドメインソケットはローカルマシン上でのみアクセス可能となります。ソケットは暗号化されず、認証には SELinux または UNIX のパーミッションを使用します。標準のソケット名は /var/run/libvirt/libvirt-sock/var/run/libvirt/libvirt-sock-ro (読み取り専用接続) です。

SSH

Secure Shell protocol (SSH) 接続経由でトランスポートされます。Netcat (nc パッケージ) をインストールしておく必要があります。libvirt デーモン (libvirtd) がリモートマシン上で実行されている必要があります。SSH アクセス用にポート 22 を開けておく必要があります。いずれかの SSH キー管理 (ssh-agent など) を使用しないとパスワードの入力が求められます。

ext

ext パラメーターは、libvirt の対象範囲外となる手段でリモートマシンに接続を行う外部プログラムに使用されます。このパラメーターはサポートされていません。

TCP

暗号化されていない TCP/IP ソケットです。実稼働での使用には推奨されません。通常は無効になっていますが、テストを行う場合や信頼できるネットワークで使用する場合などには管理者によって有効にされることがあります。デフォルトのポートは 16509 です。

他に指定がない場合、デフォルトのトランスポートモードは TLS です。
リモート URI

URI (Uniform Resource Identifier) は、リモートホストに接続するために virshlibvirt によって使用されます。また URI は virsh コマンドに --connect パラメータを付けて使用すると、リモートホストで単一コマンドや移行を実行することができます。リモート URI は一般的なローカル URI を取り、ホスト名またはトランスポート名を追加して形成されます。特殊なケースとして、「リモート」の URI スキームを使用すると、リモート libvirtd サーバーは最適なハイパーバイザードライバーを探索するように指示されます。これはローカル接続用に NULL URI を渡すのと同等です。

libvirt URI は汎用の形式を取ります (角括弧 [] 内の内容はオプションの関数を表します)。
driver[+transport]://[username@][hostname][:port]/path[?extraparameters]
ハイパーバイザー (ドライバー) が QEMU の場合、パスは必須になります。XEN の場合、パスはオプションになります。
以下は有効なリモート URI のいくつかの例です。
  • qemu://hostname/
  • xen://hostname/
  • xen+ssh://hostname/
外部の場所を対象とする場合は、トランスポートメソッドまたはホスト名を指定する必要があります。詳細は、http://libvirt.org/guide/html/Application_Development_Guide-Architecture-Remote_URIs.html を参照してください。

リモート管理の例

  • host2 という名前のリモート KVM ホストに接続します。SSH トランスポートを使用し、SSH ユーザー名は virtuser です。connect コマンドは connect [<name>] [--readonly] です。ここでの <name> は、説明されている有効な URI になります。virsh connect コマンドについての詳細は、「connect」 を参照してください。
    qemu+ssh://virtuser@hot2/
  • ホスト上にある host2 という名前のリモート KVM ハイパーバイザーに接続します。TLS を使用します。
    qemu://host2/

テスト事例

  • ローカルの KVM ハイパーバイザーに非標準の UNIX ソケットで接続します。この例では、UNIX ソケットへの完全パスが明示的に指定されています。
    qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock
  • 暗号化していない TCP/IP 接続で libvirt デーモンに接続します。IP アドレスが 10.1.1.10 でポートが 5000 のサーバーへの接続です。この例ではデフォルト設定で test ドライバーが使用されています。
    test+tcp://10.1.1.10:5000/default
追加の URI パラメーター

追加パラメーターをリモート URI に追加することができます。以下の表に認識されているパラメーターを示します (表6.1「追加の URI パラメーター」)。これ以外のパラメーターはすべて無視されます。パラメーターの値は URI エスケープにしなければならない点に注意してください (つまり、疑問符 (?) をパラメーターの前に付けると、特殊文字が URI 形式に変換されます)。

表6.1 追加の URI パラメーター

名前トランスポートモード詳細使用事例
nameすべてのモードname がリモートの virConnectOpen 関数に渡されます。name は通常、リモート URI からトランスポート、ホスト名、ポート番号、ユーザー名および追加パラメーターを取り除いたものになります。ただし、非常に複雑なケースでは、name を明示的に指定する方がよい場合があります。name=qemu:///system
commandssh と ext外部コマンドです。ext トランスポートの場合に必要です。ssh の場合、デフォルトは ssh です。command の PATH が検索されます。command=/opt/openssh/bin/ssh
socketunix と sshUNIX ドメインソケットへのパスで、デフォルトを上書きします。ssh トランスポートの場合、これがリモートの netcat コマンドに渡されます (netcat を参照)。socket=/opt/libvirt/run/libvirt/libvirt-sock
netcatssh
リモートシステムに接続する場合に netcat コマンドを使用することができます。デフォルトの netcat パラメーターは nc コマンドを使用します。SSH トランスポートの場合、libvirt により以下の形式で SSH コマンドが構成されます。
command -p port [-l username] hostname
netcat -U socket
portusername、および hostname の各パラメーターをリモート URI の一部として指定できます。commandnetcat、および socket は他の追加パラメーターから取られたものです。
netcat=/opt/netcat/bin/nc
no_verifytlsゼロ以外の値に設定すると、クライアント側のサーバー証明書のチェックが無効になります。サーバー側のクライアント証明書のチェックまたは IP アドレスのチェックを無効にする場合は、libvirtd 設定を変更する必要があります。no_verify=1
no_ttysshゼロ以外の値に設定すると、リモートマシンに自動的にログインできない場合に SSH がパスワードの入力を求めてこないようにします。ターミナルにアクセスできない場合にこれを使用します。no_tty=1