*solved* В vznetcfg при старте VE только один veth-интерфейс [message #33972] |
Sat, 22 November 2008 10:36 |
maxx
Messages: 13 Registered: November 2008 Location: Volgograd, Russia
|
Junior Member |
|
|
Есть потребность дать контейнеру несколько veth-интерфейсов. При старте включить некоторые из них в разные бриджи и через некоторые настроить маршрутизацию в подсети VE статическими маршрутами, чтобы инфа о них разошлась по сети с HN машины.
Поправил /etc/vz/vznet.conf:
EXTERNAL_SCRIPT=/etc/vz/conf/$VEID.vznet
Есть VE101.
Внутри файла /etc/vz/conf/101.vznet пытаюсь настраивать veth-интерфейсы контейнера, но получается только с одним (с наименьшим из номеров).
То есть, если есть veth101.0 veth101.1 veth101.2, поднять на стадии работы скрипта vznetcfg можно только veth101.0. Если нет veth101.0, то - veth101.1 и так далее.
Например, в файле /etc/vz/conf/101.vznet есть:
ifconfig veth101.0 0 up
ifconfig veth101.1 0 up
ifconfig veth101.2 0 up
На veth101.1 и veth101.2 ругаются как на несуществующие.
Вопрос с динамической маршрутизацией подсетей VE еще можно решить при загрузке VE, если маршруты делать не на интерфейс, а на ip внутри VE, но вот как разные veth включить в разные бриджи на HN?
[Updated on: Sat, 22 November 2008 13:10] Report message to a moderator
|
|
|
Re: В vznetcfg при старте VE только один veth-интерфейс [message #33974 is a reply to message #33972] |
Sat, 22 November 2008 13:01 |
maxx
Messages: 13 Registered: November 2008 Location: Volgograd, Russia
|
Junior Member |
|
|
В руководстве http://wiki.openvz.org/Virtual_Ethernet_device нашел примеры с бриджами.
vznetaddbr работает. Посмотрел этот скрипт, все, что он делает - это разбирает конфиг и выполняет те же команды, что и мой скрипт. Почему тогда мой не работает, а этот работает. ???
# cat /usr/sbin/vznetaddbr
#!/bin/bash
#
# Add virtual network interfaces (veth's) in a container to a bridge on CT0
CONFIGFILE=/etc/vz/conf/$VEID.conf
. $CONFIGFILE
NETIFLIST=$(echo $NETIF | sed 's/;/\n/g')
if [ ! -n "$NETIFLIST" ]; then
echo "According to $CONFIGFILE, CT$VEID has no veth interface configured."
exit 1
fi
IFACES=$(echo $NETIFLIST | sed 's/;/\n/g')
for tmp in $IFACES; do
CTIFNAME=
CTBRIDGE=
VZHOSTIF=
NETIF_OPTIONS=$(echo $tmp | sed 's/,/\n/g')
for str in $NETIF_OPTIONS; do
# getting 'ifname' parameter value
if [[ "$str" =~ ^ifname= ]]; then
# remove the parameter name from the string (along with '=')
CTIFNAME=${str#*=}
fi
if [[ "$str" =~ ^bridge= ]]; then
# remove the parameter name from the string (along with '=')
CTBRIDGE=${str#*=}
fi
# getting 'host_ifname' parameter value
if [[ "$str" =~ ^host_ifname= ]]; then
# remove the parameter name from the string (along with '=')
VZHOSTIF=${str#*=}
fi
done
if [ "$VZHOSTIF" != "$3" ]; then
continue
fi
if [ ! -n "$CTBRIDGE" ]; then
CTBRIDGE=vmbr0
fi
echo "Adding interface $VZHOSTIF to bridge $CTBRIDGE on CT0 for CT$VEID"
/sbin/ifconfig $VZHOSTIF 0
echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding
/usr/sbin/brctl addif $CTBRIDGE $VZHOSTIF
break
done
exit 0
Как видно, основная часть здесь, примерно, как у меня.
/sbin/ifconfig $VZHOSTIF 0
echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding
/usr/sbin/brctl addif $CTBRIDGE $VZHOSTIF
Я правда ручками пробую
/sbin/ifconfig veth$VEID.0 0
/sbin/ifconfig veth$VEID.1 0
На второй строке выдает ошибку.
Configure veth devices: veth101.0 veth101.1
SIOCSIFADDR: No such device
veth101.1: unknown interface: No such device
/usr/sbin/vznetcfg exited with error
Подставляю вместо своего скрипта vznetaddbr - работает.
Но, ...
Добавляю в начало vznetaddbr свои строки - опять выдает ошибку.
CONFIGFILE=/etc/vz/conf/$VEID.conf
. $CONFIGFILE
/sbin/ifconfig veth$VEID.0 0
/sbin/ifconfig veth$VEID.1 0
SIOCSIFADDR: No such device
veth101.1: unknown interface: No such device
Пробовал и так:
CONFIGFILE=/etc/vz/conf/$VEID.conf
. $CONFIGFILE
/sbin/ifconfig veth101.0 0
/sbin/ifconfig veth101.1 0
echo 1 > /proc/sys/net/ipv4/conf/veth101.1/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/veth101.1/forwarding
Снова ругается:
SIOCSIFADDR: No such device
veth101.1: unknown interface: No such device
/etc/vz/conf/101.vzbr: line 10: /proc/sys/net/ipv4/conf/veth101.1/proxy_arp: No such file or directory
/etc/vz/conf/101.vzbr: line 11: /proc/sys/net/ipv4/conf/veth101.1/forwarding: No such file or directory
Но дальше-то срабатывает.
|
|
|
Re: В vznetcfg при старте VE только один veth-интерфейс [message #33975 is a reply to message #33974] |
Sat, 22 November 2008 13:08 |
maxx
Messages: 13 Registered: November 2008 Location: Volgograd, Russia
|
Junior Member |
|
|
Добавил в конец своего скрипта
exit 0
и все заработало... Почти...
То есть контейнер поднимается, все интерфейсы есть, настроены, включены в нужные бриджи.
Просто, ошибки при старте VE не ушли.
В принципе, меня это устраивает, а с ошибками - наверное я что-то в bash не-допонимаю.
Лучше, конечно, юзать стандартный vznetaddbr, настраивать через vzctl, а маршрутизацию можно перенести в $VEID.mount.
Извините, что отнял время, если кто дочитал до конца.
|
|
|