Bozaro

Сеть в виртуальной машине на OpenVZ

by on Мар.15, 2009, under Ubuntu, Без рубрики

В догонку к посту Установка OpenVZ на Ubuntu Linux решил описать результаты копаний по поводу настройки сети в виртуальной машине OpenVZ.

Итого в vzctl можно добавить сетевой интерфейс следующими способами:

  1. vzctl set 101 –ipadd 192.168.0.1 –save
    Данный способ добавляет виртуальной машине интерфейс точка-тока с хост-машиной. В общем целом для простых случаев этого достаточно, но данный способ, к примеру, не позволяет работать с broadcast-ами (он не подходит, если на виртуальную машину нужно установить Samba или DHCP-cервер).
  2. vzctl set 101 –netdev_add eth0 –save
    Тут все тоже достаточно просто. Указанный сетевой интерфейс переносится в виртуальную машину. То есть он будет доступен только в указанной виртуальной машине (в хост-машине или нескольких виртуальных машинах его использовать нельзя).
    Так же данный способ не работает если попытаться перебросить в виртуальную машину VLAN-интерфейс.
  3. vzctl set 101 –netif_add eth0 –save
    vzctl set 101 –netif_add eth0,00:18:51:d8:04:98,veth101.0,00:18:51:0f:a6:ab
    Самое интересное – данный способ создает пару интерфейсов (один в виртуальной машине – eth0, и один в хост-машине – veth101.0), но аргумент для указания моста в версии 3.0.22 еще отсутствует.

Речь далее пойдет о 3-ем способе.

При старте интерфейса нужно принудительно добавить его в интерфес моста. Описание этого процесса было взято из статьи: OpenVZ on Ubuntu 8.10 с небольшими правками (мне надо было иметь возможность указать разные мосты для разных интерфейсов), но суть та же.

Разница в реализации следующая:

  1. Соответствие моста и интерфейса я задавал через переменную:
    VZBRIDGE="veth101.0,br0 veth101.1,br1"
  2. Скрипт /etc/vz/bin/vznetaddbr получился следующим:
    #!/bin/bash
    CONFIGFILE=/etc/vz/conf/${VEID}.conf
    . $CONFIGFILE
    for iter in $VZBRIDGE; do
        IFACE=${iter%,*}
        BRIDGE=${iter#*,}
        if [ "$IFACE" == "$3" ]; then
            echo Adding interface $IFACE to bridge $BRIDGE
            /sbin/ifconfig $IFACE up
            /usr/sbin/brctl addif $BRIDGE $IFACE
        fi
    done
:,

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...