OpenVZ. Настройка veth-интерфейсов

Подготовка хоста OpenVZ

Вначале необходимо создать сетевой мост(Bridge).

Когда мост будет готов, можно приступать к настройке veth-интерфеса. Предполагается, что имя моста заданно br0.

Создаем контейнер

# vzctl create 101 —ostemplate ubuntu-13.10-x86_64

Добавляем сетевой контроллер eth

# vzctl set 101 —netif_add eth0,,veth101.0, —save

Здесь, eth0 это имя устройства в контейнере а между следующими за ним запятыми можно указать MAC-адресс. В этом случае он будет сгенерирован автоматически. Далее, veth101.0 это имя виртуального сетевого контроллера в хост-системе, MAC-адрес которого указывается при необходимости через запятую.

После выполнения этой команды, в конфигурационном файле /etc/vz/conf/101.conf можно увидеть следующую строку;

NETIF=»ifname=eth0,mac=00:18:51:84:0C:C0,host_ifname=veth101.0,host_mac=00:18:51:84:0C:C0″

Интерфейс veth101.0 будет автоматически создаваться при каждом запуске контейнера.

Навастриваем контейнер изнутри

Теперь необходимо настроить контейнер а точнее его новый интерфейс стандартным способом. У меня в контейнере ubuntu по этому файл /etc/network/interfaces будет выглядеть следующим образом;

auto lo
iface lo inet loopback
address 127.0.0.1

auto eth0iface eth0 inet static
address 10.200.77.48
netmask 255.255.255.0
gateway 10.200.77.1

Меняем параметры ядра

Теперь нужно настроить хост. Для этого необходимо изменить несколько параметров ядра и добавить новый маршрут;

# ifconfig veth101.0 0
# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding
# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp
# echo 1 > /proc/sys/net/ipv4/conf/br0/forwarding
# echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
# ip route add 10.200.77.48 dev veth101.0

Так как виртуальный контроллер veth101.0 удаляется из системы при остановке контейнера, то и параметры указанные выше сбрасываются.

По этой причине необходимо выполнять приведенные выше команды сразу после старта контейнера. Единственное адекватное и по настоящему простое решения которое я нашел, это прописывать эти строки в файле vim /etc/vz/vznet.conf. Можно так же создать отдельный скрипт для каждого контейнера и прописать его в этом файле. Скрипты или команды прописанные в этом файле выполняются сразу за командой vzctl start.

Все. Теперь контейнер будет доступен из локальной сети по указанному ip-адрессу. Сам он так же сможет обращаться к ресурсам сети.