このガイドに従ってUbuntuサーバーにKVMをインストールしました: https://help.ubuntu.com/community/KVM/Installation
次に、ここに示すようにブリッジネットワークを準備します。 https://help.ubuntu.com/community/KVM/Networking
次に、virt-managerを使用して仮想マシンを作成しました。何回か試しましたが、ゲストはネットワークに接続できません!助けがありますか?
ifconfig:
br0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
inet addr:192.168.20.100 Bcast:192.168.20.255 Mask:255.255.255.0
inet6 addr: fe80::d227:88ff:feb0:e438/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10493 (10.4 KB) TX bytes:8433 (8.4 KB)
eth0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11361 (11.3 KB) TX bytes:8479 (8.4 KB)
Interrupt:41
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
virbr0 Link encap:Ethernet HWaddr 5a:8c:57:95:af:3b
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
brctl show:
bridge name bridge id STP enabled interfaces
br0 8000.d02788b0e438 no eth0
virbr0 8000.000000000000 yes
brctl showmacs br0:
port no mac addr is local? ageing timer
1 5c:d9:98:67:b6:28 no 48.33
1 d0:27:88:b0:e4:38 yes 0.00
1 e0:2a:82:f9:6c:09 no 0.00
ipルート:
default via 192.168.20.1 dev br0 metric 100
192.168.20.0/24 dev br0 proto kernel scope link src 192.168.20.100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
*ゲストで*sshできないため、ゲストから情報をコピーして貼り付けることができませんでした。 DHCPからIPを取得できませんでした。手動で設定しても機能しません。
予備
この次は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で(質問で言及した投稿のブリッジ部分から):
auto lo iface lo inetループバック #auto eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inetマニュアル auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
リブート;ワイヤレスネットワークがアクティブになっていないことを確認してください。 ip route
を使用してデフォルトのIPルートを確認します。 br0インターフェイスを使用している必要があります。
N.B。この変更が行われたときにイーサネットが接続されていない場合、イーサネットケーブルを差し込んでキャリアを取得する必要があります。そうしないと、ブートが2分間ハングし、ネットワーク機能を使用できなくなります eth0インターフェースは、このファイル内にあるため、起動が正常に進む前に起動する必要があります。
N.B。一般に、複数の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 route list default via 192.168.1.1 dev br0 metric 100 169.254.0.0/16 dev br0 scope link metric 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 Link 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 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RXパケット:6526エラー:0ドロップ:0オーバーラン: 0フレーム:0 TXパケット:7543エラー:0ドロップ:0オーバーラン:0キャリア:0 コリジョン:0 txqueuelen:0 RXバイト:2712940(2.7 MB)TX bytes:1071835(1.0 MB) eth0 Link encap:Ethernet HWaddr 00:1e:33:88:07:e5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric: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ベースアドレス:0x60 00 loリンクencap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr::: 1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RXパケット:10エラー:0ドロップ:0オーバーラン:0フレーム:0 TXパケット:10エラー:0ドロップ:0オーバーラン:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:664(664.0 B)TX bytes:664(664.0 B) vnet0 Link encap :Ethernet HWaddr ca:0c:73:c3:bc:45 inet6 addr:fe80 :: c80c:73ff:fec3:bc45/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric :1 RXパケット:226エラー:0ドロップ:0オーバーラン:0フレーム:0 TXパケット:429エラー:0ドロップ:0オーバーラン:0キャリア:0 コリジョン:0 txqueuelen:500 RXバイト:26919(26.9 KB)TXバイト:58929(58.9 KB) virbr0リンクencap:Ethernet HWaddr d6:18:22:db: ff:9 3 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped: 0オーバーラン:0フレーム:0 TXパケット:0エラー:0ドロップ:0オーバーラン:0キャリア:0 コリジョン:0 txqueuelen:0 RXバイト:0(0.0 B)TXバイト:0(0.0 B)
VM実行中のブリッジ構成:
$ brctl show bridge name bridge id STP enabled interfaces br0 8000.001e338807e5 no eth0 vnet0 virbr0 8000.000000000000はい
仮想マシンのvnet0インターフェイスとeth0インターフェイスの両方がbr0ブリッジに接続されていることに注意してください。
そして、br0インターフェース上のMAC:
$ brctl showmacs br0 port no mac addr is local?エージングタイマー 1 00:05:5d:cf:64:61 no 2.54 1 00:19:d2:42:5d:3f no 36.76 1 00:19: df:da:af:7c no 2.86 1 00:1e:33:88:07:e5 yes 0.00 1 00:60:0f:e4:17:d6 no 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インターフェイスは、ホストコンピューターをゲストが使用しているのと同じブリッジに接続することに注意してください。
traceroute 8.8.8.8
を使用すると、NATが独自のネットワークにルーティングされるのではなく、ブリッジされていることを確認できます。最初のノードがゲストのIPアドレスではなくネットワークのルーターである場合、ネットワークは正しく機能しているはずです。
このドキュメント を参照してください。
virt-manager
virt-manager
およびhal
がインストールされていることを確認してください。 hal
パッケージは、virt-manager
の推奨される依存関係であり、ゲストの作成または編集時にシステムのネットワーク構成を決定するために使用されます。
上記のようにbr0ブリッジを定義しながら、次のようにvirt-managerで仮想マシンを作成しました。
このゲストから、ホームネットワークの残りの部分とインターネットに直接アクセスできました。また、ホームネットワーク上の他の(非ホスト、非ゲスト)Ubuntuコンピューターからsshを使用することもできました。
以下は、virt-managerによって実行される非常に長いkvm
コマンドです(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 -device 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>
this リンクによれば、パフォーマンスと信頼性のために、ネットワークデバイスモデルをvirtio
に設定するのが最善かもしれません。virt-viewerでiボタン、NIC設定に移動し、「デバイスモデル」をvirtio
に設定します。次の行を追加して、上記のXMLにこれを追加することもできます。
<model type='virtio'/>
まとめ
これが12.04で行ったすべては:
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
、またはvirt-managerを使用して仮想マシンを作成し、[ステップ4->詳細オプション]パネルでネットワークブリッジbr0を指定します。ネットワーク、機能、テンプレート、または構成を変更する必要はありません。
新しいゲストのサービスをインターネットに公開するには:
ホストコンピューターのファイアウォールサービスをテストし、再度有効にすることを忘れないでください。ゲストにトラフィックを転送するためにエントリが必要になる場合があります。
https://help.ubuntu.com/community/KVM/Installation 、 https://help.ubuntu.com/community/KVM/Networking 、および-を参照してください https://help.ubuntu.com/12.04/serverguide/libvirt.html 。
表示されている動作がホストがゲストにアクセスでき、ゲストがホストにアクセスできるが、ゲストがネットワーク上の他のマシンにアクセスできない、またはその逆の場合...ホストのファイアウォールがアクセスをブロックしている可能性があります。
参照: https://bugs.launchpad.net/ubuntu/+source/ufw/+bug/573461
具体的には、このセクション:「最後のステップは、ブリッジでnetfilterを無効にすることです。
# cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
EOF
これらは、qemu-kvm
のブリッジを作成するために使用する2つのスクリプトです。
まず、ホストをIPルーターにします。
スクリプトip-router.sh
:
#!/bin/bash
internetinterface="eth0"
username=`whoami`
if [ "x$username" != "xroot" ] ; then
echo
echo "You must be root in order to run this script..."
echo
exit
fi
if [ "x$1" != "x" ] ; then
internetinterface="$1"
fi
if [ "x$1" == "xdel" ] || [ "x$2" == "xdel" ] ; then
disable="1"
else
disable="0"
fi
if [ "$disable" == "0" ] ; then
echo "Enabling IP forward and setting up masquerade NAT on interface $internetinterface"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $internetinterface -j MASQUERADE
else
echo "Disable IP forward and setting down masquerade NAT on interface $internetinterface"
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -D POSTROUTING -o $internetinterface -j MASQUERADE
fi
次に、tun-tap
インターフェースを作成し、デフォルトのインターフェース(通常はインターネットに接続されているインターフェース)でbridge
インターフェースを作成します。
スクリプトcreate-qemu-bridged-tuntap.sh
:
#!/bin/bash
bridgename=br0
tapinterface=tap0
outinterface=eth1
if [ "x$1" != "x" ] ; then
outinterface="$1"
fi
ifaces=`awk -F: '{print $1}' /proc/net/dev | tail -n +3`
iffound="0"
for i in $ifaces
do
if [ "$outinterface" == "$i" ] ; then
iffound="1"
fi
done
if [ "$iffound" == "0" ] ; then
echo
echo "Can't find the output interface."
echo
exit 1
fi
outifaceip=`ifconfig | grep -A1 $outinterface | tail -1 | awk -F: '{print $2}' | awk '{print $1}'`
outifaceiptokens=`echo $outifaceip | awk -F \. '{print NF}'`
if [ "$outifaceiptokens" != "4" ] ; then
echo
echo "The selected output interface $outinterface doesn't seem to have a valid IP address."
echo
exit 1
fi
hostaddress="192.168.1.1"
guestaddress="192.168.1.95"
Sudo tunctl -t $tapinterface
Sudo brctl addbr $bridgename
Sudo brctl addif $bridgename $tapinterface
Sudo ip link set $bridgename up
Sudo ip addr add $hostaddress/24 dev $bridgename
Sudo route add -Host $guestaddress dev $bridgename
Sudo parprouted eth1 $bridgename
Sudo ~/scripts/ip-router.sh $outinterface
私はこれらのスクリプトを毎日使用しているので、あなたにとってもうまく機能するはずです。このすべてを機能させるには、いくつかのパッケージをインストールする必要があります。を使用して:
dlocate `which COMMAND`
COMMAND
を持つために必要なパッケージを確認できます。たとえば、どのパッケージにbrctl
が必要かを確認するには、次を実行します。
dlocate `which brctl`
あなたが持っています:
bridge-utils: /sbin/brctl
これらのスクリプトのすべてのコマンドに同じアプローチを使用して、(少なくとも)このaptitude
コマンドラインを実行する必要があります。
Sudo aptitude install dlocate iproute parprouted iptables uml-utilities bridge-utils net-tools
最後に、メインスクリプトを(通常のユーザーとして)起動できます。
#> create-qemu-bridged-tuntap.sh eth0
Set 'tap0' persistent and owned by uid 0
Enabling IP forward and setting up masquerade NAT on interface eth0
ip addr
を実行すると、br0
スクリプト内で指定されたIPアドレス192.168.1.1
を持つcreate-qemu-bridged-tuntap.sh
インターフェイスが表示されます。
#> ip addr
8: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 36:76:ee:d6:63:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 scope global br0
これは、guest
から見たHost address
です。逆に、ゲストはIPアドレスとして192.168.1.95
を持ちます(これもメインスクリプト内で簡単に変更できます)。
ここで、virt-manager
を使用して、物理インターフェイスとしてbr0
を使用するようにゲストnicをセットアップするだけです。
guest
内で、eth0
にIPアドレス192.168.1.95
を与えるだけで、すべて正常に動作するはずです。
Slackware13:~> ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:00:F7:6A:78
inet addr:192.168.1.95 Bcast:192.168.1.255 Mask:255.255.255.0