Я просто установил KVM на своем Сервере Ubuntu согласно этому руководству: https://help.ubuntu.com/community/KVM/Installation
Затем подготовленный запараллеленная сеть как показано в здесь: https://help.ubuntu.com/community/KVM/Networking
Затем я создал виртуальную машину с virt-менеджером. Я несколько раз пробовал, но гостю не удается соединиться с сетью! Какая-либо справка?
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:
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 к нему. Это не получило IP от DHCP. Не будет работать даже после установки его вручную.
Предварительные выборы
Это после обработанного для меня для Ubuntu 12.04. Необходимо отключить брандмауэр компьютера, поскольку Вы тестируете это так, он не вмешается.
/etc/default/qemu-kvm файл должен быть как первоначально установлен.
Необходимо мост-utilsqemu-kvmlibvirt-мусорное-ведробудет установить и . Любые пользователи, использующие виртуальные машины, должны быть добавлены к libvirtd группе.
Больше, не кажется, существует любая потребность добавить возможность CAP_NET_ADMIN.
Настройка сети
Режимом стандартной сети является Непривилегированный режим, также названный SLIRP. Это использует предопределенный мост virbr0, который является NAT, направленным к гостевому компьютеру. Маршрутизация NAT использует ip_forwarding функцию и iptables ядра. Режим моста использует виртуальный мост в госте, с которым (непронумерованный) интерфейс Ethernet соединяется, и на котором у и хоста и гостя есть их сетевые интерфейсы.
Следующие схемы могут иметь более ясные значения:
Вы видите, как Пользовательская сеть по умолчанию определяется с:
virsh net-dumpxml default
Я могу настроить режим моста со следующими подходами:
В/etc/network/interfaces (от образующей мост части сообщения Вы упоминаете в своем вопросе):
auto lo iface lo inet loopback #auto eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
Перезагрузка; и удостоверьтесь, что беспроводные сети не активны. Проверьте маршрут IP по умолчанию с ip route
. Это должно использовать интерфейс br0.
N.B. Если Ваш Ethernet не поднят трубку, когда это изменение внесено Вы, должны были включить Ваш кабель Ethernet и получение поставщика услуг, или начальная загрузка зависнет в течение двух минут, и у Вас не будет сетевых возможностей Поэтому, интерфейс eth0, путем нахождения в этом файле, должен подойти, прежде чем начальная загрузка может обычно продолжаться.
N.B. Обычно Вы не можете использовать беспроводную сеть вместо eth0 из-за их неспособности использовать несколько MAC-адресов (я вывожу, что им нужен второй для моста).
Как альтернатива можно отключить использование Ethernet и удостовериться, что это не имеет 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
Интерфейс vnet0 VM добавляется к мосту br0, потому что маршрут по умолчанию выше использования тот мост взаимодействует через интерфейс. Если бы это не был там интерфейс касания, то вместо этого был бы добавлен к интерфейсу virbr0. Так как это не подключено к Интернету, NAT использовался бы для соединения гостя с хостом и Интернетом в моих экспериментах. Можно направить vnet0 к конкретному мосту в/etc/default/qemu-kvm. Используя virt-менеджера ниже Вас может явно направить который мост соединиться с.
Из-за вышеупомянутых команд, данных qemu-kvm, и -netdev tap,id=tunnel,ifname=vnet0
параметр, vm виртуальная машина подключена к туннелю vnet0, и туннель подключен к br0 мосту.
Я могу теперь непосредственно ssh в этого гостя VM от другого компьютера в моей сети.
Мой хост ifconfig
(отметьте интерфейс vnet0, который появляется в моей сети, когда VM работает):
$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 packets:6526 errors:0 dropped:0 overruns:0 frame:0 TX packets:7543 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes: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 packets:7181 errors:0 dropped:0 overruns:0 frame:0 TX packets:7740 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2974585 (2.9 MB) TX bytes:1096580 (1.0 MB) Interrupt:43 Base address:0x6000 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:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns: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 packets:226 errors:0 dropped:0 overruns:0 frame:0 TX packets:429 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:26919 (26.9 KB) TX bytes:58929 (58.9 KB) virbr0 Link 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 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)
Моя конфигурация моста при выполнении VM:
$brctl show bridge name bridge id STP enabled interfaces br0 8000.001e338807e5 no eth0 vnet0 virbr0 8000.000000000000 yes
Обратите внимание, что и интерфейс vnet0 виртуальной машины и интерфейс eth0 подключены к br0 мосту.
И MAC в интерфейсе br0:
$brctl showmacs br0 port no mac addr is local? ageing timer 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 no 0.80 1 58:6d:8f:17:5b:c0 no 5.91 1 c8:aa:21:be:8d:16 no 167.69 2 ca:0c:73:c3:bc:45 yes 0.00
Обратите внимание, что интерфейс br0 подключает мой главный компьютер к тому же мосту, используемому гостем.
Можно проверить, что Вы соединяетесь мостом, а не NAT направляется к Вашей собственной сети при помощи traceroute 8.8.8.8
. Если первый узел является маршрутизатором Вашей сети, а не IP-адресом гостя, Ваша сеть должна работать правильно.
См. эту документацию.
virt-менеджер
Убедитесь, что Вы установили virt-manager
и hal
. hal
пакет является предложенной зависимостью для virt-manager
и используется для определения конфигурации сети системы при создании или редактировании гостей.
В то время как определение br0 образует мост как выше, я создал виртуальную машину с virt-менеджером следующим образом:
Я смог перейти непосредственно к остальной части моей домашней сети и к Интернету от этого гостя. Я также смог к ssh в него от другого (нехост, негость) компьютер Ubuntu в своей домашней сети.
Вот очень длинное kvm
команда выполняется virt-менеджером (для сравнения с 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>
Согласно этой ссылке, для производительности и надежности, может быть лучше установить модель сетевого устройства на virtio
, можно сделать, это в virt-средстве-просмотра путем нажатия меня нажимает на кнопку, идя в установку NIC, и устанавливая "Модель устройства" на virtio
. Вы могли также добавить это к XML выше путем добавления строки:
<model type='virtio'/>
Таким образом,
Все это взяло 12.04, был:
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, или создайте виртуальную машину с virt-менеджером, указав сетевой мост br0 под панелью Step 4-> Advanced Options.Никакие дальнейшие изменения не были необходимы к сетям, возможностям, шаблонам или конфигурациям.
Для представления сервиса в новом госте к Интернету, Вы должны:
Не забудьте тестировать и повторно включать сервис брандмауэра для Вашего главного компьютера. Этому, возможно, понадобится любая запись для передачи трафика гостю.
См. 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 / + ошибка/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
.
Во-первых, позвольте хосту стать маршрутизатором 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
необходимо видеть a 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
Это host address
как замечено guest
. С другой стороны гость будет иметь как IP-адрес 192.168.1.95
(снова, это может быть легко изменено в основном сценарии).
Теперь, использование virt-manager
, просто необходимо установить гостя nic для использования br0
как физический интерфейс.
В 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