LINUX.ORG.RU

Проброс сетевой карты в KVM


0

1

Ув. знатоки железа и вирт. машин!!!
Помогите пожалуйста пробросить сетевую карту в KVM
Ubuntu 11.04 server 64
Ошибка при старте виртуалки следующая:
Error starting domain: operation failed: failed to retrieve chardev info in qemu with 'info chardev'

Traceback (most recent call last):
File «/usr/share/virt-manager/virtManager/asyncjob.py», line 45, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File «/usr/share/virt-manager/virtManager/engine.py», line 956, in asyncfunc
vm.startup()
File «/usr/share/virt-manager/virtManager/domain.py», line 1048, in startup
self._backend.create()
File «/usr/lib/python2.7/dist-packages/libvirt.py», line 330, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: operation failed: failed to retrieve chardev info in qemu with 'info chardev'

Подскажите плз!!!! Кто знает, где копать?

Ответ на: комментарий от Reset

<domain type='kvm'>
<name>gate</name>
<uuid>96884b9f-b513-43f6-546b-a5b9c6df38f1</uuid>
<memory>524288</memory>
<currentMemory>524288</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-0.14'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
<bootmenu enable='no'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/home/fradmin/vhost/gate.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/home/iso/ubuntu-10.10-server-i386.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x05' slot='0x04' function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</hostdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
</devices>
</domain>

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

Сети тут нет. Надо во-первых убедиться, что все файлы присутствуют, а потом удалять поочередно устройства. Меня, например смущает

<hostdev mode='subsystem' type='pci' managed='yes'>

Reset ★★★★★
()
Ответ на: комментарий от zfiodor

Убери эту строку из xml'ка. Описание формата тут http://libvirt.org/formatdomain.html

редактировать так

virsh -c qemu+ssh://твой-хост/system edit название-виртуальной-машины

сетевуха, которая смотрит во внешний мир делается так

    <interface type='bridge'>
      <mac address='52:51:00:87:99:80'/>
      <source bridge='br0'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

mac и модель выстави какие хочешь, сетевой интерфейс eth0 (или какой у тебя смотрит в сеть) перед этим надо сконвертировать в бридж.

Reset ★★★★★
()
Ответ на: комментарий от zfiodor

Или может как то (я пока не знаю как) сделать «прозрачный» бридж на эту сетевуху? просто с бриджем у меня проблем нет, но все дело в том что провайдер раздает инет по dhcp и в связи с этим у меня проблемы как построить такой бридж чтобы машина получала через него адрес от провайдера?

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

> перед этим надо сконвертировать в бридж

А как сконвертировать? Что прописать бриджу inet dhcp или manual или static? Да и остальные настройки тоже не помешали бы...

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

Если провайдер думает что у тебя только один комп и выдает по dhcp только один ip, то с бриджем ты обломаешься. Если он может выдать сколько угодно ip'шников, то работать всё будет из коробки.

Reset ★★★★★
()
Ответ на: комментарий от zfiodor

zfiodor> не так давно подружился с линуксом и с kvm

Ну а че тогда virt-manager не используешь?

sdio ★★★★★
()
Ответ на: комментарий от zfiodor

так

auto br0
iface br0 inet static
  address ip
  netmask mask
  gateway ip
  network ip
  bridge_ports eth1
  bridge_stp off
  bridge_maxwait 0
  bridge_fd 0

или так

auto br0
iface br0 inet dhcp
  bridge_ports eth1
  bridge_stp off
  bridge_maxwait 0
  bridge_fd 0

вместо eth1 подставь свой интерфейс

Reset ★★★★★
()
Ответ на: комментарий от Reset

> iface br0 inet dhcp
Так нельзя, потому что в таком случае ip получает сам бридж, а виртуальная машина которой я его отдал уже через него никакой ip получить не может т.к. провайдер выдает только один ip на одну сетевуху (по mac адресу)
Мне нужно настроить так, чтобы виртуальная машина проходя через бридж и мой ethX, сама получала от провайдера IP!
Можно ли так сделать???????????

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

Тогда тебе нужен NAT. Для NAT'а libvirt создает устройство virbr0 и сеть default-network.

Reset ★★★★★
()
Ответ на: комментарий от zfiodor

Мне нужно настроить так, чтобы виртуальная машина проходя через бридж и мой ethX, сама получала от провайдера IP!

Здравый смысл говорит, что нельзя. Но можно попробовать сделать iface br0 inet manual тогда ip'шника на бридже не будет.

Reset ★★★★★
()
Ответ на: комментарий от Reset

auto eth2
iface eth2 inet manual
   auto br2
   iface br2 inet manual
   bridge_ports eth2
   bridge_stp off
   bridge_fd 0
   bridge_maxwait 0
Делал, не работает...

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

libvirt уже настроил все правила iptables для default-network, тебе ничего делать не надо.

   <interface type='network'>
      <source network='default'/>
      <target dev='vnet7'/>
      <mac address="00:11:22:33:44:55"/>
    </interface>
Reset ★★★★★
()
Ответ на: комментарий от Reset

Собственно вопрос в чем....
На серваке 3 сетевухи. По двум заходит инет по 100мб на каждую.
На одной должны висеть сайты, а на другой офис. На офис с одной
сетевухи я инет раздал, а теперь мне нужно вторую сетевуху прикрутить
к сайтам и так чтобы они друг с дружкой не пересекались.
Вот собственно из-за этого и весь сыр бор.

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

Они и сейчас у меня висят в kvm-ах и прекрасно работают. Я через iptables все настроил. Но вторая карта появилась недавно и вследствии этого приказ по офису: Разделить - мухи отдельно, котлеты отдельно!

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

А как ты это предполагаешь делать на одном ip'шнике? Либо надо либо много ip'шников либо какой-то http-proxy ставить на хосте, который по vhost'ам будет перенаправлять запросы на разные виртуалки.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Бридж на внутреннюю карту, ну та, что смотрит в офис. А на него виртуалки. На основном хосте nginx а дольше apache...

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

просто я хотел отдать вторую карту как устройство pci на виртуальную машину, но как выяснил проц не поддерживает vt-d

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

Ога, если ты делал бридж на внутреннюю сетевуху, то соответственно у тебя были внутренние ip. Если у тебя всё и так работало, то мне не понятно что ты теперь хочешь. Завернуть трафик с виртуалок на другую сетевуху?

Reset ★★★★★
()
Ответ на: комментарий от Reset

Ну типа да, только чтобы и ответы от виртуалок тоже шли по другому каналу, т.е. чтобы виртуалки и офис вообще не пересекались.

zfiodor
() автор топика
Ответ на: комментарий от Reset

Та да, я уже так и думаю сделать. Со второй внешней карты перебрасывать на него входящий и исходящий трафик. А уже на этот бридж вешать виртуалки. Только наверное если понадобиться достучаться к ним по сети, придется вешать на них первый бридж, только в настройках этого интерфейса на виртуалках не прописывать шлюз. Ну чтобы они ходили в инет по своему каналу.
Эх, жаль нельзя реальную карту пробросить! Хотя, в принципе, и так должно быть неплохо...

zfiodor
() автор топика
Ответ на: комментарий от zfiodor

Почитай документацию, и все получится

Вот манул по бриджам:
http://xgu.ru/wiki/Linux_Bridge
Коротко: бридж - это коммутатор со всеми отсюда вытекающими. То есть:
Создаем свитч (виртуальный) brclt addbr virsw0
Подключаем к нему виртуальные интерфейсы, созданные qemu:
brctl addif virsw0 tap0
brctl addif virsw0 tap1
Все. Трафик ходит только внутри моста между виртуалками.
Теперь хотим, чтобы это все наружу ходило.
Переводим сетевуху компа в неразборчивый режим
ifconfig eth0 0.0.0.0
ifconfig eth0 up
Подключаем и ее
brctl addif virsw0 eth0
Теперь трафик от вирмашин ходит наружу через сетевую карту компа.
Заметь, IP-адресов задавать нигде не надо. Если нужен адрес - тогда
ifconfig virsw0 (а не eth0) 192.168.0.1
IP-адреса - это вообще дело десятое, ибо работают на 3 уровне модели OSI, а мост - на втором.

Можно пробросить и сетевую карту сервера как PCI-устройство.
Для этого нужно, чтобы чипсет материнки поддерживал IOMMU IO. Такую поддержку имеют только северные чипсеты

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.