OpenVZ Forum


Home » International » Russian » *solved* В vznetcfg при старте VE только один veth-интерфейс
*solved* В vznetcfg при старте VE только один veth-интерфейс [message #33972] Sat, 22 November 2008 10:36 Go to next message
maxx is currently offline  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 Go to previous messageGo to next message
maxx is currently offline  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 Go to previous message
maxx is currently offline  maxx
Messages: 13
Registered: November 2008
Location: Volgograd, Russia
Junior Member
Добавил в конец своего скрипта
exit 0
и все заработало... Почти...

То есть контейнер поднимается, все интерфейсы есть, настроены, включены в нужные бриджи.

Просто, ошибки при старте VE не ушли.

В принципе, меня это устраивает, а с ошибками - наверное я что-то в bash не-допонимаю.

Лучше, конечно, юзать стандартный vznetaddbr, настраивать через vzctl, а маршрутизацию можно перенести в $VEID.mount.

Извините, что отнял время, если кто дочитал до конца. Embarassed
Previous Topic: self-patched rhel kernel.
Next Topic: Вопрос насчет utimes: synch sys_utimensat syscall with the upstream
Goto Forum:
  


Current Time: Sun Apr 28 18:36:30 GMT 2024

Total time taken to generate the page: 0.02898 seconds