Где указывать IP адреса при создании виртуальной машины KVM через libvirt?
Здравствуйте!
Имеется проблема, необходимо создать VPS при этом назначить ему нужные IP адреса. Подскажите, как это вообще происходит..? Допустим я заказал у дата-центра 10 айпи для своей ноды(Тут сразу вопрос, смогут ли 10 айпи идти на 1 сетевую карту?).. И я хочу создать 5 виртуальных машин по 2 айпи...
Походу они как-то выделают на 1 сетевую карту сервера сразу 10 ипов через DHCP.. Допустим, на сервере у etc0 будет 10 ип. Что дальше? Насколько я понял, то примерно такое:
1. Нужно создать мост(bridge)? По 1 штуке для каждой ВМ. br0,br1...br4.
2. Создать 5 сетей(network) n0..n3..n4.
3. Каждой вм назначить свою сеть(потому, что не должно быть связей между ВМ, то есть 1 вм может пинговать только другие свои айпи, а не чужих вм).
Но вопрос остается, где указать список IP?(
Если можно, киньте пошаговую инструкцию в формате *команда* *что она дает*, т.к. реально хочу понять как все работает)
Заранее спасибо за ответы!
*ап*: Забыл еще сказать, что айпи для каждой вм должны быть фиксированные.. То есть при перезагрузке ноды с вдсами, айпи у вдс должны быть те, что назначили изначально именно этой вдс.
Пума Тайланд: в этом случае вдс должны через мост общатся с роутером/шлюзом хостера напрямую? Будут ли они сами нужные ипы получать(без доп.настройки гостей)?
###########modules
$m 8021q;
поддержка влан если присутствуют
$m bonding miimon=100 mode=1;
поддержка балансировки если таковая присутствует
mode; посмотреть в интернете, число зависит от применяемой технологии на подключаемых портах коммутатора
Вот в этом месте внимание: без включения в мост виртуальных интерфейсов работать не будет.
т.е пока исходный интерфейс или интерфейсы не будет назначены в квм, форвардинг не работает
Для каждой машины не нужно создавать бридж. Достаточно одного. Вот так примерно выглядит подключение через бридж на железке с двумя виртуальными интерфейсами:
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXX no eno1
vnet0
vnet1
Если будет один бридж для нескольких ВМ, то не смогут ли вм перехватить трафик других вм в этом бридже? Или, сможет ли одна вм отобрать айпи у другой вм?: Зачем бридж вообще нужен, что он дает?)
если виртуальные интерфейсы будут в одном бридже... можно сделать что угодно
На Ваш вопрос: бридж для проброса(коммутации) виртуальной сетевой карты, на физический интерфейс один бридж -- ограничение в ведре линукса,
в Вашем случае нужно(наверное) воспользоваться вилан
на вилан в ведре ограничений нет(вроде 4к)
похоже мы вообще говорим о разных вещах
почитайте течнет(Майкрософт) Azure? или VmWare Virtulization Desktop? или Xen? или самопальный продакшн на линуксе?
я не вижу связи вопроса с технологией
адрес назначается операционной системой гостевой машины; мак назначается гипервизором;
привязка мака и адреса это из другой области
можно поиздеваться следующим образом(если имеется доступ к гипервизору)
каждый гостевой хост забиндить на внешний ip и натить под ним внутреннюю сеть гостевого хоста
на каждом гостевом хосте своя сеть
так пойдёт?))
Ref: Суть: Я покупаю новый сервер(ноду) для размещения клиентских ВДС серверов на ней. Виртуализация KVM. Управляю через LIBVIRT.
Сейчас я примерно допер следующее: В панели управления дата центра будет примерно такая картина: Таблица IP адресов вида IP адрес, MAC адрес, на который этот айпи ориентирован.
ТУТ еще вопрос: 1 MAC адрес может быть прикручен только к 1 IP? Или можно двум и более айпи назначить 1 мак адрес? Можно ли вообще будет менять MAC самому или это ДЦ решает?
На ноде(хосте) я создаю мост br0 к eth0. Каждой вдс я создаю виртуальный сетевой интерфейс, которому назначаю этот бридж и MAC адрес.
Таким образом получается, что когда вирт.машина будет запущена она залезет в сеть через бридж br0, далее через eth0 она с этим МАКОМ достучится до роутера в ДЦ, который на основании ее МАКА выдаст ей нужный айпи(Просьба поправить, если не так вдуплился).
То есть, чтобы добавить к 1 вдс несколько айпи нужно создать несколько виртуальных сетевых карт(интерфейсов) к этой ВДС, которым указать МАКИ, которые соответствуют айпи, которые выдает ДЦ.
Так? Плиз, поправьте если я туплю..
Ref: Походу я еще понял, зачем нужен бридж к физическому интерфейсу.. Типа если будут поизводится удаленные работы над нодой, то бридж можно переконфигурировать при этом eth0 трогать не будут и на хосте не пропадет инет от неверной настройки. Так?
На ноде(хосте) я создаю мост br0 к eth0.
;;так точно
Каждой вдс я создаю виртуальный сетевой интерфейс, которому назначаю этот бридж и MAC адрес.
;;оговорка: не бридж в вдс, а винет-интерфейс в бридж или балансер, мак адрес виртуальному интерфейсу назначается любой, как там с изменением мака и айпи у бриджа хз спросите у провайдера
видимо я понял где у Вас затык ...
для того чтобы передать траффик из виртуальной машины наружу нужен бридж в том плане что
гостевая система не может пересылать пакеты напрямую в сетевую карту гипервизора(т.е. или физически карту ей отдайте, или используйте её как роутер для виртуальной сетевушки), потому что у карты есть свой адрес и мак(естетственно если в арп таблице один мак и много айпи, то как разобрать к какой гостевой системе направляется данный пакет), для этого и используется бридж он в неразборчивом состоянии форвардит пакеты.
если вспомните модуль виртуалбокса то там используется тот же бриджинг, только настраивается без участия пользователя
1 MAC адрес может быть прикручен только к 1 IP?
вообще нет
Или можно двум и более айпи назначить 1 мак адрес?
если посмотреть со стороны общепринятой модели осиай, то звучит несколько по другому: можно назначить на один мак сколько угодно адресов(если память и скорострельность позволят)/ одному айпи несколько маков назначить нельзя
Можно ли вообще будет менять MAC самому или это ДЦ решает?
спросите у провайдера ДЦ
То есть, чтобы добавить к 1 вдс несколько айпи нужно создать несколько виртуальных сетевых карт(интерфейсов) к этой ВДС, которым указать МАКИ, которые соответствуют айпи, которые выдает ДЦ.
Так? Плиз, поправьте если я туплю..
по моему Вам надо почитать для начала свитчинг и роутинг от циско(в сети кучами валяется)
и про ту самую осиай(OSI) не забудьте...
создаёте кучу вирт-интерфесйов суёте в один бридж
интерфейсы раздаёте гостевым системам
ВСЁ
Ref: можно ваш контакт плиз(skype/icq/email что-нить)?
Для ВДС я пишу нечто типа такого:
< interface type = ' bridge ' >
< mac address = ' XX:XX:XX:XX:XX:XX ' / >
< source bridge = 'br*цифра* ' / >
< / interface >
Это винет-интерфейс в бридж, верно?
Потом у хостера мне нужно просто изменить привязку IP адреса к МАКУ вдски - XX:XX:XX:XX:XX:XX и сетевуха(xml обьявления выше) в ВДС сама подхватит нужный ип? Или все таки все айпи должны быть закручены на МАК адрес к eth0/br0, а потом на хосте как-то их распределяют?
Ref: Можете уточнить, что вы имеете ввиду под "винет-интерфейс" - vnet(virtual network)? То есть для каждой вдс создавать свою виртуальную сеть через бридж?
Просто вы 1 раз пишете "винет-интерфейс" а второй раз "вирт-интерфейсов"
Синапс Вы извините, но я не настолько крут чтобы создавать виртуалки из иксмл файлов.
Обычно я настраиваю сеть руками(пример выше)
А машинки тупо делаю вирт-менеджером(virt-manager)
То есть на сколько я понял, я должен раздавать вдсам локальные айпи из того, что выдаст мне ДЦ? А потом, на уровне выше(роутеры или че там у них) они будут преобразованны в публиные IP? Как быть если айпи отсыпают поштучно?* Я Реально не знаю как это происходит*
То есть получается, в DHCP созданной в libvirt сети,где таблица айпи адресов вида MAC=>IP я должен назначать вдс локальный айпи, который потом будет каким-то средством интерпретирован в белый айпи(вне моего сервера) ?
Влад Животнев: Я читал, но все равно не понятно, в статье написали "2) целиком подсети 198.51.100.0/28 и 198.51.100.96/28" - ведь эти айпи локальные. И там производят модификацию вдсок, а мне нужно, чтобы они сами получали айпи адреса(т.е. ничего руками в них не редактировать).
Влад Животнев: Вот теперь мне все ясно, спасибо большое!
Кстати, я так понял, что айпи для ВДС по маку выдавать могут 2 вещи: роутер дата центра и сам хост(нода). В случае, если айпи для ВДС выдает роутер ДЦ, то писать мак вдски нужно соответственно в нем. А если хост, то нужно в роутере указать все айпи на мак адрес eth0(или br0?) ноды, и потом уже на ноде самому при помощи DHCP(или статикой внутри ВДС) выдавать айпи. Так же?
Точно можно указать в DHCP серваке на 1 мак адрес 2 и более айпи адресов?
synapse_people: в бридже машины с роутером обращаются напрямую (ну при условии, что маршрут через него, а не через IP на бридже, как для собственной подсети в статье). Так что тогда мак виртуалке нужно задавать тот, который выдан в virtual mac хостером (и в dhcp его тоже прописывать).
2 адреса по dhcp выдать на одну сетевую карту виртуалки, емнип, нельзя. Да и если адрес выдадите - маршрутизацию руками настраивать всё равно придется.
Влад Животнев: Вот в virt-manager меня конкретно сбивает Виртуальные сети, все примеры показывают, что там внутри айпи локальные. Вот даже ваш cogumbreiro.blogspot.ru/2013/11/setting-up-fixed-s... , вот указывают , что у вирт.сетевого интерфейса с МАК 00:00:00:00:00:00 будет 192.168.122.2 айпи. Или тут тоже можно указать публичные адреса??
Влад Животнев: как можно по максимому автоматизировать выдачу айпи адресов?) Как вообще выдают 2 адреса на 1 виртуальную машину другие? 2-а сетевых интерфейса создают и каждому по маку выдают нужные айпи?
synapse_people: если хост настроен по моему мануалу - можно использовать белые адреса.
> Как вообще выдают 2 адреса на 1 виртуальную машину другие
"Другие" не используют dhcp, конфигурация сети прописывается внутри гостевой системы. Второй адрес люди тоже сами настраивают внутри машины так, как им это удобно.
Влад Животнев: А можете еще подсказать, https://libvirt.org/firewall.html мне команда virsh nwfilter-list выдает много стандартных фильтров, их надо как-то применять к каждой вдс или они глобально на всех работают?
Сорри, имел ввиду, чтобы виртуальные машины не знали о существовании других машин на физическом сервере... Хотя это не основная проблема, но будет хорошо, если не будут знать о других..
Создаёте один мост, в который добавляете реальную сетевую карту сервера и свои виртуалки. IP назнаете там где они нужны. Нужен в виртуалке - в самой виртуалке и назначаете. Не забудьте что-нибудь оставить для связи с хостовой системой.
Виртуалки будут думать, что они находятся в одном L2 сегменте. Может, вся стойка к нему же подключена.
Melkij: Ок, погуглю. А как бы вы делали, с учетом того, что виртуальные машины это клиентские вдс'ы и нужно обеспечить максимальную степень защиты ноды+самих вдс и изоляцию их друг от друга?
А если без модификаций внутри вм, как назначать ип?