Нужно настроить vlan'ы как отдельные устройствоа

Доброго времени суток, дамы и господа.

Есть проблема.

Есть давно работающий сервачок под управлением 2.6.31-gentoo-r6 (с openrc 0.6.0-r1), в котором работа с vlan'ами настроена (мною же) так, как мне нужно:

более 100 vlan'ов "привязаны" на eth2, на каждый vlan сгенерирован файлик net.vlanXXXX в /etc/conf.d примерно такого вида:

master_vlan52="eth2"
config_vlan52="
  10.52.7.254/24 brd 10.52.7.255 label vlan52:5
  10.52.8.254/24 brd 10.52.8.255 label vlan52:6
"

в основном файлике /etc/conf.d/net все, что касается eth2, выглядит так:

config_eth2="null"
vlan_start_eth2="no"

В /etc/init.d для каждого vlan'а есть соответствующий net.vlanXXXX, и все работает так, как мне нужно.

vlan'ы периодически меняются (какие-то появляются, какие-то убираются), запуск и остановка каждого из vlan'ов никак не влияет на остальные vlan'ы на этой сетевой.

Благодаря тому, что все описание vlan'а содержится в фале /etc/conf.d/net.vlanXXXX, эти файлики легко генерить программно, и нет необходимости править "главный" файл /etc/conf.d/net

Теперь о грустном.

Хочу перенести эту систему на новый сервак под управлением 3.10.7-gentoo с openrc 0.11.8. Про то, что теперь работа с vlan'ами в gentoo реализована без vconfig - я в курсе. Но все мои попытки повторить работающую под gentoo схему в ответ на
/etc/init.d/net.vlanXXXX start
заканчиваются сообщением:

 *   ERROR: interface vlanXXXX does not exist
 *   Ensure that you have loaded the correct kernel module for your hardware
 * ERROR: net.vlanXXXX failed to start

При этом другие vlan'ы на другом интерфейсе, которые стартуют вместе с интерфейсом, прекрасно стартуют и работают.

Я понимаю, что я что-то делаю не так. И рано или поздно я найду работающие настройки vlan'ов. Но очень не хочется тратить время - наверняка ведь не я первый, кто пытается решить подобную задачу.

я прямо сегодня вланы не

я прямо сегодня вланы не настаивал, поэтому спрошу - в исходниках смотреть не пробовал ?

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

slepnoga написал(а): я прямо

slepnoga написал(а):
я прямо сегодня вланы не настаивал, поэтому спрошу - в исходниках смотреть не пробовал ?

Нет, до исходников еще не добрался.

До боли знакомо, но давно

До боли знакомо, но давно было. ЕМНИП это оно

# If you do the above then you may want to depend on eth0 like so
# rc_net_vlan1_need="net.eth0"
# NOTE: depend functions only work in /etc/conf.d/net
# and not in profile configs such as /etc/conf.d/net.foo

И это тоже сломали...

Да, это оно.

Но этого мало.

Этот механизм, который раньше нормально работал, они тоже сломали :(

vlan'ы создаются при старте базового интерфейса (в моем случае net1). Это значит, что для добавления нового vlan'а мне нужно остановить net1 (при этом перестанут работать все vlan'ы, которые были на net1), добавить в /etc/conf.d/net (именно в него, т.к. эти строки не воспринимаются в /etc/conf.d/net.vlanXXXX) две новые строки на новый vlan

vlanXXXX_name="vlanXXXX"
rc_net_vlanXXXX_need="net.net1"

(напомню, у меня более 100 vlan'ов на net1),
затем расширить список vlan'ов в строке

vlans_net1="XXX1 XXX2 ... XXXN"

(т.к. без этой строки vlan'ы на интерфейсе не создаются),
и только потом стартовать руками все 100+ vlan'ов, висящих на net1, т.к. при остановке net1 остановились и все vlan'ы.

Понимаю, что оффтопик, но у меня сложилось впечатление, что команда разработчиков gentoo поставила себе целью сломать всё, что только можно :(

>vlan'ы создаются при старте

>vlan'ы создаются при старте базового интерфейса (в моем случае net1).

Это по умолчанию. В отдельной конфигурации - они создаются отдельно.

vlans_lan0="1 2 3"
vlan_start_lan0="no"
config_lan0="null"

rc_net_vlan1_need="net.lan0"
vlan1_name="vlan1"
config_vlan1="172.30.x.x/24"

rc_net_vlan2_need="net.lan0"
vlan2_name="vlan2"
config_vlan2="91.x.x.x/30"

rc_net_vlan3_need="net.lan0"
vlan3_name="vlan3"
config_vlan3="172.30.x.x/24"

При добавлении нового vlan рестартить lan0 НЕ НУЖНО. Нужно дописать в конфиг всё необходимое, создать соответствующий симлинк на net.lo, прописать его в автозагрузку и запустить

OpenRC 0.11.8, если что

Судя по вашей конфигурации, у вас ОЧЕНЬ старый OpenRC. Советую почитать документацию как это делается в новом и проблем не будет.

Нейтральность - высшее достижение сознания!

Pinkbyte написал(а):>vlan'ы

Pinkbyte написал(а):
>vlan'ы создаются при старте базового интерфейса (в моем случае net1).

Это по умолчанию. В отдельной конфигурации - они создаются отдельно.

vlans_lan0="1 2 3"
vlan_start_lan0="no"
config_lan0="null"

rc_net_vlan1_need="net.lan0"
vlan1_name="vlan1"
config_vlan1="172.30.x.x/24"

rc_net_vlan2_need="net.lan0"
vlan2_name="vlan2"
config_vlan2="91.x.x.x/30"

rc_net_vlan3_need="net.lan0"
vlan3_name="vlan3"
config_vlan3="172.30.x.x/24"

При добавлении нового vlan рестартить lan0 НЕ НУЖНО. Нужно дописать в конфиг всё необходимое, создать соответствующий симлинк на net.lo, прописать его в автозагрузку и запустить

OpenRC 0.11.8, если что

Судя по вашей конфигурации, у вас ОЧЕНЬ старый OpenRC. Советую почитать документацию как это делается в новом и проблем не будет.

У меня в 1-м посте всё написано. На старом сервере - старый, еще не сломанный, openrc. На новом - именно 0.11.8. И работает именно так, как я описал - добавленный vlan при поднятом net1 не стартует.

Всё делаю так, как в вашем примере:

1-й вариант /etc/conf.d/net:

vlans_net1="51"
vlan_start_net1="no"
config_net1="null"

rc_net_vlan51_need="net.net1"

vlan51_name="vlan51"

Файл /etc/conf.d/net.vlan51

config_vlan51="
  10.51.10.253/24 brd 10.51.10.255
  10.51.11.253/24 brd 10.51.11.255 label vlan51:0
  10.51.12.253/24 brd 10.51.12.255 label vlan51:1
  10.51.0.253/24 brd 10.51.0.255 label vlan51:2
  100.51.201.253/24 brd 100.51.201.255 label vlan51:3
  10.51.201.253/24 brd 10.51.201.255 label vlan51:4
"

Стартуем vlan51

log ~ # /etc/init.d/net.vlan51 start
 * Caching service dependencies ... [ ok ]
 * Bringing up interface net1       [ ok ]
 *   Adding VLAN 51 to net1
 * Bringing up interface vlan51
 *   10.51.10.253/24 ...            [ ok ]
 *   10.51.11.253/24 ...            [ ok ]
 *   10.51.12.253/24 ...            [ ok ]
 *   10.51.0.253/24 ...             [ ok ]
 *   100.51.201.253/24 ...          [ ok ]
 *   10.51.201.253/24 ...           [ ok ]

Редактируем файл /etc/conf.d/net:

vlans_net1="51 52"
vlan_start_net1="no"
config_net1="null"

rc_net_vlan51_need="net.net1"
rc_net_vlan52_need="net.net1"

vlan51_name="vlan51"
vlan52_name="vlan52"

Файл /etc/conf.d/net.vlan52

config_vlan52="
  10.52.7.253/24 brd 10.52.7.255 label vlan52:5
  10.52.8.253/24 brd 10.52.8.255 label vlan52:6
"

Стартуем vlan52

log ~ # /etc/init.d/net.vlan52 start
 * Caching service dependencies ... [ ok ]
 * Bringing up interface vlan52
 *   ERROR: interface vlan52 does not exist
 *   Ensure that you have loaded the correct kernel module for your hardware
 * ERROR: net.vlan52 failed to start

На всякий случай попробовал содержимое файла /etc/init.d/net.vlan52 перенести в /etc/init.d/net - результат не изменился.

Если же положить интерфейс net1, а потом снова поднять

log ~ # /etc/init.d/net.net1 stop
 * Caching service dependencies ... [ ok ]
 * Bringing down interface vlan51
 * Bringing down interface net1
 *   Removing VLAN vlan51 from net1
 *   Bringing down interface vlan51
log ~ # /etc/init.d/net.net1 start
 * Bringing up interface net1       [ ok ]
 *   Adding VLAN 51 to net1
 *   Adding VLAN 52 to net1

то мы видим, что при поднятии net1 создаются все vlan'ы, перечисленные в vlans_net1=" ... " (если vlan в этом списке отсутствует - он не создается). Соответственно, при поднятии собственно vlan'а он не создается, т.к. должен был создаться при поднятии net1.

Вы хоть проверяли у себя тот пример, который привели?

А если

А если вместо

vlan51_name="vlan51"
vlan52_name="vlan52"

сделать так?

net1_vlan51_name="vlan51"
net1_vlan52_name="vlan52"

Хотя да. Рестарт net1 к сожалению нужен. Без рестарта не создается /sys/class/net/${vlanname}.

ls -1 /sys/class/net 
total 0
0 drwxr-xr-x  2 root root 0 окт.   6 13:14 .
0 drwxr-xr-x 46 root root 0 окт.   6 13:14 ..
0 lrwxrwxrwx  1 root root 0 окт.   6 17:59 beeline -> ../../devices/virtual/net/beeline
0 lrwxrwxrwx  1 root root 0 окт.   6 13:14 eth0 -> ../../devices/pci0000:00/0000:00:1c.5/0000:01:00.0/net/eth0
0 lrwxrwxrwx  1 root root 0 окт.   6 13:14 lo -> ../../devices/virtual/net/lo
0 lrwxrwxrwx  1 root root 0 окт.   6 17:59 tap1000 -> ../../devices/virtual/net/tap1000
0 lrwxrwxrwx  1 root root 0 окт.   6 17:58 test -> ../../devices/virtual/net/test

Отсюда и ошибка.


/etc/init.d/net.vlan52 -d start

все покажет.

Кстати, можно и без рестарта.

Кстати, можно и без рестарта. но предварительно из шелла надо

ip link add link eth0 name blala type vlan id 777

alexanderyt

alexanderyt написал(а):
Кстати, можно и без рестарта. но предварительно из шелла надо

ip link add link eth0 name blala type vlan id 777

Через ip я не проверял, проверил через vconfig - тоже работает.

Цитата:Вы хоть проверяли у

Цитата:
Вы хоть проверяли у себя тот пример, который привели?

Он работает у меня на продакшен-сервере. А вашу проблему я понял, решение простое - поставить iproute2(если он еще не стоит) и удалить vconfig - данная утилита устарела и больше не поддерживается. Если есть желание отправить багрепорт о том, что нет соответствующего предупреждения со стороны OpenRC об этом - будем только рады.

Нейтральность - высшее достижение сознания!

Pinkbyte

Pinkbyte написал(а):
Цитата:
Вы хоть проверяли у себя тот пример, который привели?

Он работает у меня на продакшен-сервере. А вашу проблему я понял, решение простое - поставить iproute2(если он еще не стоит) и удалить vconfig - данная утилита устарела и больше не поддерживается. Если есть желание отправить багрепорт о том, что нет соответствующего предупреждения со стороны OpenRC об этом - будем только рады.

iproute2 установлен, 1-й строкой /etc/conf.d/net стоит подключение модуля iproute2.

vconfig тоже установлен - по старой привычке.

Мою проблему вы не поняли. Интерфейсы vlanXXXX создаются только при старте "базового" интерфейса (да, можно "извернуться" и создать интерфейс "ручками" - но на кой хрен тогда все эти скрипты - давайте все ручками делать), при этом некоторые параметры интерфейса vlanXXXX не воспринимаются, если они прописаны в файле /etc/conf.d/netXXXX (хотя раньше это было основной "фишкой" gentoo - возможность выносить конфиги интерфейса net.foo в файл net.foo).

Я, конечно, могу снести vconfig - но я на 500% уверен, что это не исправит косяки последнего OpenRC.

И да - вы лукавите, что ваш пример работает. Он не работает: vlan'ы, которых не было при старте "базового" интерфейса, нужно создавать вручную.

Что касается баг-репортов - извините, но у меня на работе столько работы, что на баг-репорты просто нет времени. Если вам недостаточно информации, приведенной в моих постах, и для исправления косяка (а это явный косяк - вы поломали то, что раньше работало) нужен формальный баг-репорт - это очень плохо. Это негативный симптом.

Я не буду углубляться в философию - у меня был трудный день.

Но большинство проектов, в которых лень разработчиков начинает превалировать над нуждами потребителей, постепенно умирают.

Ничего личного.

IVB написал(а):Я не буду

IVB написал(а):
Я не буду углубляться в философию - у меня был трудный день.

Но большинство проектов, в которых лень разработчиков начинает превалировать над нуждами потребителей, постепенно умирают.

Ничего личного.

Хотелось бы заметить, что лень разработчиков Gentoo, как её назвали, определяется тем что им за рабьоту никто не платит - чистой воды сообщество. Так что, что кому надо тот то и поддерживает. И времени тоже ни у кого нету лишнего - если лень даже формальный баг-репорт написать, то как можно просить других людей что-то делать? Более того, не просить даже - а вопить и обвинять что кто-то что-то тебе сломал...

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

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".