Запараллеленная сеть KVM, не работающая

Я просто установил 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. Не будет работать даже после установки его вручную.

22
задан 14 September 2012 в 16:41

3 ответа

Предварительные выборы

Это после обработанного для меня для Ubuntu 12.04. Необходимо отключить брандмауэр компьютера, поскольку Вы тестируете это так, он не вмешается.

/etc/default/qemu-kvm файл должен быть как первоначально установлен.

Необходимо мост-utilsInstall bridge-utilsqemu-kvmInstall qemu-kvmlibvirt-мусорное-ведроInstall libvirt-binбудет установить и . Любые пользователи, использующие виртуальные машины, должны быть добавлены к libvirtd группе.

Больше, не кажется, существует любая потребность добавить возможность CAP_NET_ADMIN.

Настройка сети

Режимом стандартной сети является Непривилегированный режим, также названный SLIRP. Это использует предопределенный мост virbr0, который является NAT, направленным к гостевому компьютеру. Маршрутизация NAT использует ip_forwarding функцию и iptables ядра. Режим моста использует виртуальный мост в госте, с которым (непронумерованный) интерфейс Ethernet соединяется, и на котором у и хоста и гостя есть их сетевые интерфейсы.

Следующие схемы могут иметь более ясные значения:

Network diagrams

Вы видите, как Пользовательская сеть по умолчанию определяется с:

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-менеджером следующим образом:

enter image description here enter image description here enter image description here enter image description here enter image description here

Я смог перейти непосредственно к остальной части моей домашней сети и к Интернету от этого гостя. Я также смог к 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, был:

  1. Устанавливая virt-менеджера, мост-utils, qemu-kvm, и связанные пакеты
  2. Удостоверьтесь, что каждый пользователь, желающий использовать kvm, находится в libvirtd группе.
  3. Определение/etc/network/interfaces как выше (которые соответствуют заключенной в кавычки статье),
  4. Перезагрузка, Ethernet проверки включается, и беспроводная связь (если таковые имеются) выключена.
  5. Любое выполнение kvm против изображения непосредственно с, например. -device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0, или создайте виртуальную машину с virt-менеджером, указав сетевой мост br0 под панелью Step 4-> Advanced Options.

Никакие дальнейшие изменения не были необходимы к сетям, возможностям, шаблонам или конфигурациям.

Для представления сервиса в новом госте к Интернету, Вы должны:

  1. Подготовьте и настройте любой сервис брандмауэра, в котором Вы будете нуждаться.
  2. Или присвойте статический адрес в своей гостевой конфигурации или в Вашем сервисе DHCP.
  3. При использовании маршрутизатора 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.

22
ответ дан 16 November 2019 в 12:11

Если поведение, которое Вы видите, является хостом, может получить доступ к гостю, и гость может получить доступ к хосту, но гость не может получить доступ к другим машинам в сети или стихе визы..., вероятно, брандмауэр хоста блокирует доступ.

См.: 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
6
ответ дан 16 November 2019 в 12:11

Это эти два сценария, которые я использую для создания моста для 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 как физический интерфейс.

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
3
ответ дан 16 November 2019 в 12:11

Другие вопросы по тегам:

Похожие вопросы: