LINUX.ORG.RU
ФорумAdmin

Debin squeeze - Как настроить сеть в kvm?


0

1

Приветствую глубокоуважаемый Олл.
В очередной раз с просьбой о помощи к здешней аудитории.

Есть ремотная машинка с Debian squeeze, надо настроить KVM.
С этой технологией пока не знаком. С трудом понимаю как там живет сеть.
Ставил по какому-то из мануалов зацепив br0 на eth0. br0 с реальным IP, есть еще br0:2 с адресом 192.168.0.254 и на VM есть связь с 192.168.0.254 но нет связи с внешним миром, потому как не смог добиться трансляции адресов br0:2<->br0.

Пытался решить сию проблему сделав другой сетевой интерфейс и привязав VM к нему, но что-то недопонимаю.

/etc/network/interfaces
-------------------------
[много скипнуто]
iface vde0 inet manual
vde2-switch -t vde0

iface vtap inet manual
vde2-switch -t vtap

iface br1 inet static
address 192.168.0.254
netmask 255.255.255.0
bridge_ports vde0 vtap
[много скипнуто]
---------------------------

/etc/libvirt/qemu/vm1.xml
---------------------------
<interface type='bridge'>
<mac address='52:54:00:0a:7a:6c'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/
</interface>
---------------------------
с <source bridge='br0'/> и br0:2=192.168.0.254 - Связь VM<->Реальная есть, но не научился запускать NAT.

если source bridge= 'br1' или 'vde0' или 'vtap' - связи с реальной машиной нет.

Не могу никак понять как это все организовано и как правильно реализовать в Debian.

Как я вижу: надо организовать какой-то виртуальный интерфейс с ip=192.168.0.254 и в конфигах VM указать что-то имеющее связь с этим интерфейсом (я считал что можно сделать виртуальный коммутатор vde2 и к нему все виртуалки привязать, но не вышло.

создал vtap и указал его в виртуалке, тоже не помогло.

В итоге создал бридж br1 указав vtap и vde0 интерфейсами и указав его (br1) в конфиге VM - но тоже не прокатило.

Ползаю по поисковикам не первый день, но из тем посвященных настройке сети в kvm так и не смог понять как это все организовано и найти правильное решение для Debian.

Может кто-то из здешних жильцов знает как правильно организовать сеть в kvm применительно к debian на хост машине? Сложность в том, что машинка ремотная и эксперименты весьма опасны потерей машинки.

★★★

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

а почему нельзя тупо включить форвардинг и маскарад на внешний интерфес?

Потому что если пришел пакет с br0:0 и должен уйти на br0 то маскарадинг не работает ибо для системы это один и тот-же интерфейс. Во всяком случае правило типа: /sbin/iptables -t nat -A POSTROUTING --out-interface br0 --jump SNAT --to-source XX.YY.YY.ZZ есть и это если ничего не путаю оно, и работает если пакет пришел с другого интерфейса а если пришел с br0:0 то не работает.

n0mad ★★★
() автор топика

Ставил по какому-то из мануалов зацепив br0 на eth0. br0 с реальным IP, есть еще br0:2 с адресом 192.168.0.254 и на VM есть связь с 192.168.0.254 но нет связи с внешним миром, потому как не смог добиться трансляции адресов br0:2<->br0.

Что за треш? Два ip из разных сетей одном интерфейсе?

Чтобы не пришлось гадать, посмотри

brctl show
ip a l
/sbin/iptables -t nat -A POSTROUTING --out-interface br0 --jump SNAT --to-source XX.YY.YY.ZZ

Возможно, имя интерфейса не то. Я бы вместо него явно указал сети, т.е. -s <моя сеть> ! -d <моя сеть>. Если -j LOG работает в -t nat, посмотри точное имя интерфейса

Лично я для KVM-виртуалок сделал отдельные мосты, может так тебе будет легче

iface vlan5 inet static
        address 192.168.5.1
        network 192.168.5.0
        netmask 255.255.255.0
        broadcast       192.168.5.255
        bridge_ports    none

и в настройках сетевого адаптера ВМ указываю мост vlan5

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


iface vlan5 inet static
address 192.168.5.1
network 192.168.5.0
netmask 255.255.255.0
broadcast 192.168.5.255
bridge_ports none


В моем варианте писал выше:
iface br1 inet static
address 192.168.0.254
netmask 255.255.255.0
bridge_ports vde0 vtap
То-же самое, но не пашет. Не пингуется из гостевой 192.168.0.1
192.168.0.254 Хотя в конфиге VM source bridge='br1'
может interface type и model type какие другие...
с ходу не знаю какие там могут быть значения, почему и зачем.

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

Ты сам понимаешь что хочешь получить? Зачем тебе два моста с адресами в одной сети?

Если тебе нужно поместить ВМ в ту же сеть, что и host ОС, добавляй адаптер гостя в br0 и исправляй правила маскарадинга. (см. man iptables на предмет цели LOG)

Если тебе нужна отдельная сеть - назначай br0 адрес из другой сети и включая форвардинг.

router ★★★★★
()

машина с debian

#cat /etc/libvirt/qemu/vm1.xml

<interface type='network'>
<mac address='52:54:00:e7:53:03'/>
<source network='vnet'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>


#cat /etc/libvirt/qemu/networks/vnet.xml
<network>
<name>vnet</name>
<uuid>b89c473d-244c-4764-34a2-4b71ee3729ce</uuid>
<forward mode='route'/>
<bridge name='virbr0' stp='on' delay='0' />
<mac address='52:54:00:9A:C3:A1'/>
<ip address='192.168.192.1' netmask='255.255.255.192'>
</ip>
</network>


#далее делаю snat для указанной подсети.
# iptables -t nat -nL POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all  — 192.168.192.0/26 0.0.0.0/0 to:192.168.0.25

truetrue
()
Ответ на: комментарий от router


Ты сам понимаешь что хочешь получить? Зачем тебе два моста с адресами в одной сети?


Откуда инфа про 2 моста в одной сети? Есть eth0 с реальным IP и все.... надо сделать мост в серым IP и все гостевые VM включить в него и тоже выдать серый ip. По мере выделения реальных ip можно гостей и к мосту br0 подключать, но пока нет рабочей конструкции реальных ip не будет.

Я это вижу в виде:
br-eth0 - мост с eth0
br-vm0 - виртуальный мост в который включать и все ВМ и в случае если позволяет тенология (надеюсь что vde2 умеет в этот мост включать и интерфейсы отдельно стоящих машин). В идеале бутерброд:

IP1,IP2,IP3,IP4,IP5,IPX<->Host0<->Virtual NET<->Host1,Host2,Host3,VM1,VM2,VMX

Host0 и хост для ВМ и маршрутизатор для реальных IP и в идеале маршрутизатор с DNAT чтобы скажем www на один хост, ftp на другой, voip на третий, samba на четвертый, и.т.д.

В варианте XEN и честных VLAN подобные вещи прокатывали, хочу все уложить в одну коробку а по мере потребности в производительности с этой коробки через маршрутизацию/DNAT разносить на отдельные хосты/ВМ.
Обратился к KVM потому как заявлено что это мейнстрим ядра. Можно конечно и через VirtualBOX это сделать но опять-же это сторонний продукт а я купился на то что KVM в ядре.

В идеале ышшо одного зайца хочу прибить. Сделать Хост с KVM а вот уже
в каждой ВМ попытаться поднять хосты XEN/VirtualBOX/OpenVZ. В итоге в какой-то мере получится «бутерброд» из этих технологий в каждый слой которого можно вносить свою ВМ. Уже по факту создания сего «бутерброда» будет полноценная инфа про бутербродоводство и будет что подсказать/рассказать другим страждущим, ведь будет рабочая модель, а вот насколько она реализуема покажет лишь практика.

На данный момент увы имею лишь ремотную машинку с Debian squeeze, поддержкой виртуализации и 2Г оперативки. Причем машинку надо запускать в дело, все тормозит моя неспособность создать полигон, ибо как только машинка станет продакшн - эксперименты должны быть свернуты и работать лишь то что к тому времени осознаю.


Если тебе нужно поместить ВМ в ту же сеть, что и host ОС, добавляй адаптер гостя в br0 и исправляй правила маскарадинга. (см. man iptables на предмет цели LOG)


Нужно, и даже почти работает но не хочу копать в этом направлении
потому как несколько ip сеток на одном адаптеле через alias - неверное решение. Надо несколько мостов, какие-то из реальных сетей, какие-то из серых и виртуальные хосты/адаптеры с других реальных хостов цеплять к этим мостам.


Если тебе нужна отдельная сеть - назначай br0 адрес из другой сети и включая форвардинг.



Свет клином сошелся на br0?
Хочу:
br-eth0
br-kvm0
br-vde2p0
br=vde2p1
....
Как-то так.

Одна из планируемых задач DNAT реальных IP в серые IP. т.е. стоит шлюз и все втекающее в него на основании IP/Port раскидывает по соответствующим хостам, как реальным так и по виртуальным. В связи с этим еще возникает вопрос существует-ли какая идеология создания виртуальных адаптеров с белыми ip точка входа в которые находится на маршрутизаторе. т.е. серая сетка (или белая), но определенные белые ip
маршрутизируются на определенные хосты. С поощью одного-лишь DNAT боюсь не совсем прокатит потому как пакет будет приходить на один ip а протокол внутри может нести информацию о другом ip типа DNAT на 1.2.3.4 кидается на 192.168.3.4 и он прекрасно получает пакет для 192.168.3.4 но содержимое может говорить что он для 1.2.3.4.

Судя по названию - vde2 как раз то что мне надо (Virtual Distributed Ethernet) но пока ышшо не вкурил тему.

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

Откуда инфа про 2 моста в одной сети? Есть eth0 с реальным IP и все

Значит, я тебя неправильно понял. Проехали :)

br-eth0 - мост с eth0

br-vm0 - виртуальный мост в который включать и все ВМ и в случае если позволяет тенология (надеюсь что vde2 умеет в этот мост включать и интерфейсы отдельно стоящих машин).

Да, прекрасно. Я так и делаю, хотя и без vde

потому как несколько ip сеток на одном адаптеле через alias - неверное решение.

полностью согласен, и уже говорил об этом

Итак, поехали.

1) мосты можно наштамповать через virt-manager, можно запускать его на отдельной машине. Да, хотим новую сеть. Нет, фильтровть ничего не нужно

2) можно задать мосты через /etc/network/interfaces:

auto br0
iface br0 inet static
    <настройки какие-то>

auto vlan5
iface vlan5 inet static
    <настройки какие-то>

Главное - не забыть разрешить форвардинг, иначе никакой трафик между мостами не пойдёт:

echo 1 > /proc/sys/net/ipv4/ip_forward

3) да, можно и через vde. С kvm так не делал, для qemu можно сделать так:

auto tap0
iface tap0 inet static
        address 192.168.0.1
        network 192.168.0.0
        netmask 255.255.255.0
        vde2_switch     -

Пользователя, от которого ты будешь запускать виртуалки, добавить в группу vde2-net

Вместо qemu-system-x86_64, например, запускать

vdeq qemu-system-x86_64 -net nic,vlan=1 -net vde,vlan=1,sock=/var/run/vde2/tap0.ctrl[c/ode]
router ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.