予選
この次はUbuntu 12.04で機能しました。干渉しないように、これをテストするときにコンピューターのファイアウォールを無効にする必要があります。
/ etc / default / qemu-kvmファイルは、最初にインストールされたものである必要があります。
bridge-utils qemu-kvmおよびlibvirt-binがインストールされている必要があります。仮想マシンを使用するユーザーはすべて、libvirtdグループに追加する必要があります。
CAP_NET_ADMIN機能を追加する必要はもはやないようです。
ネットワークセットアップ
デフォルトのネットワークモードはユーザーモードで、SLIRPとも呼ばれます。ゲストコンピューターにNATでルーティングされる定義済みのvirbr0ブリッジを使用します。NATルーティングは、カーネルのip_forwarding機能とiptablesを使用します。ブリッジモードは、(番号なしの)イーサネットインターフェースが接続され、ホストとゲストの両方がネットワークインターフェースを持つゲストの仮想ブリッジを使用します。
次の図は、違いを明確にする可能性があります。
デフォルトのユーザーネットワークがどのように定義されているかを見ることができます:
virsh net-dumpxml default
次の方法でブリッジモードを設定できます。
/ etc / network / interfacesで(質問で言及した投稿のブリッジ部分から):
オートロー
iface lo inetループバック
#auto eth0
#iface eth0 inet dhcp
自動eth0
iface eth0 inetマニュアル
自動br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
リブート; ワイヤレスネットワークがアクティブになっていないことを確認してください。でデフォルトのIPルートを確認しますip route
。br0インターフェイスを使用している必要があります。
注:この変更が行われたときにイーサネットが接続されていない場合は、イーサネットケーブルを差し込んでキャリアを取得する必要があります。そうしないと、ブートが2分間ハングし、ネットワーク機能を使用できなくなります。このファイルに含まれていると、起動が正常に進む前に起動する必要があります。
NB一般に、複数のMACアドレスを使用できないため、eth0の代わりにワイヤレスネットワークを使用することはできません(ブリッジに2つ目のアドレスが必要であると推測します)。
別の方法として、イーサネットの使用を無効にし、IPアドレスがないこと、およびで設定されたデフォルトルートがないことを確認できますip route
。次に:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
ここで静的IPアドレスを指定したり、デフォルトルートとDNSアドレスを定義することもできます。この例でdhclient
はこれを行います。
これが私のルートテーブルです。
$ ipルートリスト
デフォルトは192.168.1.1 dev br0メトリック100経由
169.254.0.0/16 dev br0スコープリンクメトリック1000
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.45
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
kvmを使用する
その後、次のコマンドでブリッジされたkvmマシンを起動できます。
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
この-netdev tap
パラメーターにより、sudoが必須になります。VMが開始されると、qemu-kvmは次のコマンドを実行します。
ifconfig vnet0 0.0.0.0 up
brctl addif brctl addif br0 vnet0
これは/ etc / qemu-ifupによって行われます
上記のデフォルトルートはそのブリッジインターフェイスを使用するため、VMのvnet0インターフェイスがbr0ブリッジに追加されます。存在しない場合は、代わりにタップインターフェイスがvirbr0インターフェイスに追加されます。これはインターネットに接続されていないため、私の実験では、ゲストをホストとインターネットに接続するためにNATが使用されます。/ etc / default / qemu-kvmの特定のブリッジにvnet0を向けることができます。以下のvirt-managerを使用すると、接続するブリッジを明示的に指示できます。
qemu-kvmによって発行される上記のコマンドと-netdev tap,id=tunnel,ifname=vnet0
パラメーターのため、vm仮想マシンはvnet0トンネルに接続され、トンネルはbr0ブリッジに接続されます。
これで、ネットワーク上の別のコンピューターからこのゲストVMに直接sshできるようになりました。
ホストifconfig
(VMの実行中にネットワーク上に表示されるvnet0インターフェイスに注意してください):
$ ifconfig
br0リンクencap:Ethernet HWaddr 00:1e:33:88:07:e5
inet addr:192.168.1.45 Bcast:255.255.255.255 Mask:255.255.255.0
inet6 addr:fe80 :: 21e:33ff:fe88:7e5 / 64スコープ:リンク
放送実行中のマルチキャストMTU:1500メトリック:1
RXパケット:6526エラー:0ドロップ:0オーバーラン:0フレーム:0
TXパケット:7543エラー:0ドロップ:0オーバーラン:0キャリア:0
collisions:0 txqueuelen:0
RXバイト:2712940(2.7 MB)TXバイト:1071835(1.0 MB)
eth0リンクencap:Ethernet HWaddr 00:1e:33:88:07:e5
放送実行中のマルチキャストMTU:1500メトリック:1
RXパケット:7181エラー:0ドロップ:0オーバーラン:0フレーム:0
TXパケット:7740エラー:0ドロップ:0オーバーラン:0キャリア:0
collisions:0 txqueuelen:1000
RXバイト:2974585(2.9 MB)TXバイト:1096580(1.0 MB)
割り込み:43ベースアドレス:0x6000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr::: 1/128 Scope:Host
UPLOOPBACK RUNNING MTU:16436メトリック:1
RXパケット:10エラー:0ドロップ:0オーバーラン:0フレーム:0
TXパケット:10エラー:0ドロップ:0オーバーラン:0キャリア:0
collisions:0 txqueuelen:0
RXバイト:664(664.0 B)TXバイト:664(664.0 B)
vnet0リンクencap:Ethernet HWaddr ca:0c:73:c3:bc:45
inet6 addr:fe80 :: c80c:73ff:fec3:bc45 / 64 Scope:Link
放送実行中のマルチキャストMTU:1500メトリック:1
RXパケット:226エラー:0ドロップ:0オーバーラン:0フレーム:0
TXパケット:429エラー:0ドロップ:0オーバーラン:0キャリア:0
collisions:0 txqueuelen:500
RXバイト:26919(26.9 KB)TXバイト:58929(58.9 KB)
virbr0リンクencap:Ethernet HWaddr d6:18:22:db:ff:93
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
アップブロードキャストマルチキャストMTU:1500メトリック:1
RXパケット:0エラー:0ドロップ:0オーバーラン:0フレーム:0
TXパケット:0エラー:0ドロップ:0オーバーラン:0キャリア:0
collisions:0 txqueuelen:0
RXバイト:0(0.0 B)TXバイト:0(0.0 B)
VM実行中のブリッジ構成:
$ brctl show
ブリッジ名ブリッジID STP対応インターフェイス
br0 8000.001e338807e5 no eth0
vnet0
virbr0 8000.000000000000はい
仮想マシンのvnet0インターフェイスとeth0インターフェイスの両方がbr0ブリッジに接続されていることに注意してください。
そして、br0インターフェース上のMAC:
$ brctl showmacs br0
ポートno mac addrはローカルですか?エージングタイマー
1 00:05:5d:cf:64:61 2.54なし
1 00:19:d2:42:5d:3fいいえ36.76
1 00:19:df:da:af:7cいいえ2.86
1 00:1e:33:88:07:e5はい0.00
1 00:60:0f:e4:17:d6いいえ0.79
2 52:54:00:12:34:56いいえ0.80
1 58:6d:8f:17:5b:c0いいえ5.91
1 c8:aa:21:be:8d:16いいえ167.69
2 ca:0c:73:c3:bc:45はい0.00
br0インターフェイスは、ホストコンピューターをゲストが使用している同じブリッジに接続することに注意してください。
を使用して、NATが独自のネットワークにルーティングされるのではなく、ブリッジされていることを確認できますtraceroute 8.8.8.8
。最初のノードがゲストのIPアドレスではなくネットワークのルーターである場合、ネットワークは正しく機能しているはずです。
このドキュメントを参照してください。
virt-manager
あなたがインストールされていることを確認してくださいvirt-manager
とhal
。hal
パッケージには、のために提案され、依存関係であるvirt-manager
とゲストを作成または編集するときに、あなたのシステムのネットワーク構成を決定するために使用されます。
上記のようにbr0ブリッジを定義しながら、次のようにvirt-managerを使用して仮想マシンを作成しました。
このゲストからホームネットワークの残りの部分とインターネットに直接アクセスできました。また、ホームネットワーク上の他の(非ホスト、非ゲスト)Ubuntuコンピューターからsshすることもできました。
次にkvm
、virt-managerで実行される非常に長いコマンドを示します(EApubsまたはこれに問題がある他のユーザーと比較するため)。
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1、sockets = 1、cores = 1、threads = 1 -name precise -uuid f057a729-eda6-4b85-84dc-f100c9ae3789- nodefconfig -nodefaults -chardev socket、id = charmonitor、path = / var / lib / libvirt / qemu / precise.monitor、server、nowait -mon chardev = charmonitor、id = monitor、mode = control -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2、if = none、id = drive-ide0-0-0、format = qcow2 -device ide-drive、bus = ide.0 、unit = 0、drive = drive-ide0-0-0、id = ide0-0-0、bootindex = 1 -netdev tap、fd = 18、id = hostnet0 -device rtl8139、netdev = hostnet0、id = net0、mac = 52:54:00:0e:da:9b、bus = pci.0、addr = 0x3 -chardev pty、id = charserial0 -device isa-serial、chardev = charserial0、id = serial0 -usb -vnc 127.0.0.1: 0 -vga cirrus -device intel-hda、id = sound0、bus = pci.0、addr = 0x4 -device hda-duplex、id = sound0-codec0、bus = sound0.0、cad = 0-デバイスvirtio-balloon-pci、id = balloon0、bus = pci.0、addr = 0x5
/etc/libvirt/qemu/quantal.xmlの仮想マシン記述のネットワーク部分は次のとおりです。
<interface type='bridge'>
<mac address='52:54:00:b0:8e:aa'/>
<source bridge='br0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
このリンクによると、パフォーマンスと信頼性のために、ネットワークデバイスモデルをに設定するのが最適かもしれませんvirtio
。virt-viewerでiボタンを押し、NIC設定に移動し、「デバイスモデルにvirtio
。次の行を追加して、上記のXMLにこれを追加することもできます。
<model type='virtio'/>
要約すれば
これが12.04で行ったすべては:
- virt-manager、bridge-utils、qemu-kvm、および関連パッケージのインストール
- kvmを使用する各ユーザーがlibvirtdグループに属していることを確認してください。
- 上記のように/ etc / network / interfacesを定義します(引用された記事と一致します)
- リブートして、イーサネットが接続され、ワイヤレス(ある場合)がオフになっていることを確認します。
- たとえば
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
、イメージに対してkvmを直接実行するか、virt-managerを使用して仮想マシンを作成し、[ステップ4->詳細オプション]パネルでネットワークブリッジbr0を指定します。
ネットワーク、機能、テンプレート、または構成を変更する必要はありません。
新しいゲストのサービスをインターネットに公開するには:
- 必要なファイアウォールサービスを準備して構成します。
- ゲスト構成またはDHCPサービスで静的アドレスを割り当てます。
- NATルーターを使用している場合、ゲストのIPアドレスへのダイレクトを実装するサービスのポートを開きます。
ホストコンピューターのファイアウォールサービスをテストし、再度有効にすることを忘れないでください。ゲストにトラフィックを転送するためにエントリが必要になる場合があります。
参照https://help.ubuntu.com/community/KVM/Installation、https://help.ubuntu.com/community/KVM/Networking、およびhttps://help.ubuntu.com/12.04/serverguide/libvirt。 HTML。
ifconfig
、brctl show
、brctl showmacs br0
、とip route
。ゲストで:ifconfig
、ip route
、ping 8.8.8.8
、ping <your internet router>
、とtraceroute 8.8.8.8
。私はあなたが持っている方法でkvmを設定したとは言えませんが、kvm
コマンドを使用して動作するようにブリッジしました。ホストがインターネットに接続するようにワイヤレスを切断する必要がありました。引用した指示に従って、イーサネットでインターネットに接続する必要があります。