LINUX.ORG.RU
ФорумAdmin

KVM: настроить сеть (мост?)


0

1

Здравствуйте.

Задача такая: настроить под Ubuntu 10.10 внутреннюю сеть из нескольких виртуальных машин (гипервизор --- KVM). Причём, они должны видеть друг друга, видимы host'ом и выходить в Интернет --- я так понимаю «usermode», который «из коробки» мне не подходит, нужен мост. Из внешней сети, выходит, видимы не должны быть, иначе есть вероятность возникновения конфликтов IP-адресов.

1. Пока не понимаю, как задаётся адрес, под которым host будет виден гостям.

2. В качестве шлюза, в настройках гостей надо прописывать свой статический IP или внутренний --- тогда какой? см. п.1.

3. Виртуальные машины устанавливал с помощью vmbuilder. Написал bash-сценарий create_rsoivm.sh:

#!/bin/bash

readonly vmbasename="rsoivm"
readonly logfile="log.txt"

read -p "Enter VMs' numbers [first count]: " first count

echo > $logfile
for (( i=first; i < first + count; ++i )); do
	echo -n "Creating VM '$vmbasename$i'... "
	
	vmbuilder kvm ubuntu \
		--overwrite --verbose \
		--config=$vmbasename.cfg \
		--firstboot=$PWD/firstboot.sh \
		--firstlogin=$PWD/firstlogin.sh \
		--destdir=$vmbasename$i \
		--ip=192.168.0.10$i \
		--hostname=$vmbasename$i \
		&>> $logfile

	if [ $? -eq 0 ]; then
		echo "[OK]"
	else
		echo "[Failed]"
		break
	fi
done

if [ $i -eq first + count ]; then
	echo "All VMs has been created successfully."
else
	echo "Faile to create VM '$vmbasename$i'."
fi

firstboot.sh:

# This script will run the first time the virtual machine boots
# It is ran as root.

# Install openssh-server
apt-get update
apt-get install -qqy --force-yes openssh-server

firstlogin.sh --- пуст.

rsoivm.cfg:

[DEFAULT]
part = vmbuilder.partition
user = ivirtual
name = I.Virtual
pass = letmein
arch = amd64
domain = icn.bmstu.ru
mask = 255.255.255.0
gw = 192.168.55.151
tmpfs = -
#tmpfs = suid,dev,size=2G ???
mem = 512
cpus = 1

[ubuntu]
suite = maverick
flavour = virtual
mirror = http://ru.archive.ubuntu.com/ubuntu
addpkg = openssh-server, unattended-upgrades, vim-nox, acpid
#components = main,universe,restricted,multiverse

[kvm]
libvirt = qemu:///system
bridge = br0
#virtio_net = true

/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.55.151
        netmask 255.255.255.0
        gateway 192.168.55.1
        bridge_ports eth0
        bridge_stp off
	bridge_maxwait 0
	bridge_fd 0

ifconfig:

br0       Link encap:Ethernet  HWaddr 00:90:f5:8c:4a:ac  
          inet addr:192.168.55.151  Bcast:192.168.55.255  Mask:255.255.255.0
          inet6 addr: fe80::290:f5ff:fe8c:4aac/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53316 errors:0 dropped:0 overruns:0 frame:0
          TX packets:132684 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:7655331 (7.6 MB)  TX bytes:45518674 (45.5 MB)

eth0      Link encap:Ethernet  HWaddr 00:90:f5:8c:4a:ac  
          inet6 addr: fe80::290:f5ff:fe8c:4aac/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:894951 errors:0 dropped:0 overruns:0 frame:0
          TX packets:663689 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:760742337 (760.7 MB)  TX bytes:231216188 (231.2 MB)
          Interrupt:46 Base address:0xe000 

lo        Link encap:Локальная петля (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:6946 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6946 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:990901 (990.9 KB)  TX bytes:990901 (990.9 KB)

virbr1    Link encap:Ethernet  HWaddr 96:ae:c5:c7:9d:a3  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::94ae:c5ff:fec7:9da3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:8940 (8.9 KB)

vnet0     Link encap:Ethernet  HWaddr fe:54:00:49:53:39  
          inet6 addr: fe80::fc54:ff:fe49:5339/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:104215 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:1882 (1.8 KB)  TX bytes:12638839 (12.6 MB)

vnet1     Link encap:Ethernet  HWaddr fe:54:00:16:8b:0f  
          inet6 addr: fe80::fc54:ff:fe16:8b0f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8428 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:2638 (2.6 KB)  TX bytes:1232011 (1.2 MB)

wlan0     Link encap:Ethernet  HWaddr 00:21:5d:91:9d:22  
          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:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Через virt-viewer подсоединиться к виртуальным машинам получается. Вот /etc/network/interfaces одной из них:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.0.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.55.151
        dns-nameservers 192.168.55.151
        dns-search icn.bmstu.ru

При перезагрузке сети на виртуальной машине

sudo /etc/init.d/networking restart
пишет: Failed to bring up eth0

В какой-то момент стал грешить на сетевые настройки в virsh. sudo cat default.xml: <network> <name>default</name> <bridge name=«virbr%d» /> <forward/> <ip address=«192.168.122.1» netmask=«255.255.255.0»> <dhcp> <range start=«192.168.122.2» end=«192.168.122.254» /> </dhcp> </ip> </network> Попробовал настроить свою. sudo cat rsoinet.xml:

<network>
  <name>rsoinet</name>
  <bridge name="virbr1" stp="off" />
  <domain name="icn.bmstu.ru" />
  <forward dev="eth0" mode="route" />
  <ip address="192.168.0.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.0.2" end="192.168.0.254" />
    </dhcp>
  </ip>
</network>
Когда указывал, <bridge name=«br0» ...>, virsh жаловался при попытке создать такую сеть, что «файл существует».

Может мне надо интерефейсы vnetX добавлять brctl'ом? Или в /etc/network/interfaces прописывать «bridge_ports vnet.*»?

ping'и от VM к host'у и между VM'ами не проходят.

man interfaces, brigde-utils-interfaces, brctl читал. На форумах много всего перечитал. Ubuntu Community --- тоже. В общем, уже третий день бьюсь --- сеть не заводится. Уже отчаялся сам разобраться. У кого есть опыт --- помогите.

Я так понимаю если из внешней сети виртуалки не должны быть видимы, и должны быть видимы хостовой машиной, то можно не париться с бриджами. все будет работать из коробки по крайней мере в Fedora так.

При установке создается бридж на внутреннюю подсеть в вашем случае virbr1. Всем виртуалкам раздаются IP во внутренней подсети с указанием шлюза - ip адрес virbr1.

Должно все работать.

linuxman1982
()

в кратце это должно быть так:

1. Делаешь мост 2. Включаешь форвард (1 > ip_forward) 3. Всем виртуалкам добавляешь сетевуху (бридж) 4. IP делаешь из той же сети что и бридж (можно алиасы на бридже поднять, если не хочешь чтоб в основную сеть вылазили) ... 5. PROFIT

outsider ★★
()

Поставь libvirt и сходу получишь нужную тебе конфигурацию. Там есть default сеть с NAT'ом, где адреса раздаются динамически. Имя нужного тебе бриджа virbr0, дальше только в конфиг виртуалки добавить этот бридж и все.

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

virbr1 --- это мост собственно созданной сети. По умолчанию был virbr0. Выше я приводил настройки libvirt-сети default (я извиняюсь, за их нечитаемость: на месте открывающего тега кода, поставил закрывающий, в 2 часа-то ночи :), --- а изменить сообщение сейчас не могу, похоже, на LOR'е стоит ограничение по времени). Хотя тогда лучше приведу ещё раз: [code] <network> <name>default</name> <bridge name=«virbr%d» /> <forward/> <ip address=«192.168.122.1» netmask=«255.255.255.0»> <dhcp> <range start=«192.168.122.2» end=«192.168.122.254» /> </dhcp> </ip> </network> [/code] Сейчас запустил её и тогда [code] $ ifconfig virbr0 virbr0 Link encap:Ethernet HWaddr 52:58:18:d8:79:3d inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 inet6 addr: fe80::5058:18ff:fed8:793d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:468 (468.0 B) [/code]

Т.е. по вашему нужно удалить из /etc/network/interfaces br0 и в настройках ВМ указывать bridge=virbr0 и gw=его ip. Дальше DHCP разберётся.

Сейчас занят работой. Попробую --- отпишусь.

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

Похоже, [b]linuxman1982[/b] так и предлагает. Спасибо и вам.

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

linuxman1982, BigAlex, спасибо! Вы мне помогли. outsider, вам тоже спасибо за ответ.

Host и гости друг друга ping'уют. С host'а Интернет виден, с гостей --- нет. Тут уже squid в дело, наверное, пойдёт, но я вроде что-то «слышал», что именно ping'оваться и не должно. Поправьте, если что.

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

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

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

Squid на хосте настроил. Гостям proxy прописал. Через ssh с гостя по Интернету под w3m полазил --- забавно :). Ping'и до ya.ru не доходят. Ну да ладно пока... Спасибо в любом случае.

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