суббота, 23 июля 2011 г.

kvm network

Перепост. Источник: http://forum.vingrad.ru/index.php?showtopic=248685&view=findpost&p=180624

# убираем ip адрес у интерфейса eth0
/sbin/ip addr flush eth0
# "Опускаем" eth0
/sbin/ip link set eth0 down
# Переименовываем reth0 (тут нам нужно знать MAC-адрес инрефейса)
/sbin/nameif reth0 00:11:22:33:44:55
# "Подымаем" reth0 (eth0 в девичестве)
/sbin/ip link set reth0 up
# Создаём мост с именем eth0
/usr/sbin/brctl addbr eth0
# "Подымаем" eth0
/sbin/ip link set eth0 up
# Добавляем к мосту интерфейс reth0
/usr/sbin/brctl addif eth0 reth0
# Назначаем IP для eth0, тут надо отметить, что в случае получения адреса по DHCP нужно будет
# убить dhcpcd (/usr/sbin/dhcpcd -k) перед тем как освободить адрес eth0, а потом снова запустить (/sbin/dhcpcd -n)
ifconfig eth0 192.168.0.3
# Так как DHCP я не использую, а default route погибает вместе с опусканием eth0, его нужно восстановить
route add -net default gw 192.168.0.1
# Создаём tap интерфейс
tunctl -u _имя_пользователя_из_под_которого_пускается_qemu_ -t qeth0
# "Подымаем" qeth0
# добавляем tap-интерфейс в мост
/usr/sbin/brctl addif eth0 qeth0
# Т.к. моя машина смотрит в несколько сетей, дефолтовое действие для цепочки FORWARD у меня DROP.
# Нужно добавить правило, которое выглядит слегка не логично :)
# Если у вас не разрешён форвардинг, надо его разрешить (echo 1 > /proc/sys/net/ipv4/ip_forward)
/sbin/iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT

Теперь из под пользователя запускаем qemu (или kvm, что конечно лучше ), опции по вкусу Без подсветки
1:
kvm -m 128 -hda gw.img -cdrom /mnt/frenzy-1.1-std-RU.iso -net nic,vlan=0,macaddr=52:54:00:12:34:57 -net tap,vlan=0,ifname=qeth0,script=no -monitor stdio -vnc localhost:0




Всё работает как часы, qemu/kvm даже получает адрес по DHCP

Несколько замечаний:

Зачем нужно переименовывать eth0? У меня eth0 не однократно фигурирует в правилах iptables, если у Вас нет такой проблемы можно дать мосту имя по умолчанию (br0) и не усложнять процедуру.

Если Вы хотите запустить несколько виртуальных машин, то вам понадобится отдельный интерфейс для каждой машины, либо (что ИМХО более разумный выход) воспользоваться программой vde_switch, но это уже другая история

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

Ну что ж, вроде я ничего не забыл. Желаю удачи

Комментариев нет:

Отправить комментарий