Page 1 of 1
Статическое создание VLAN
Posted: 24 Oct 2014, 12:07
by dimka88
Не задалось у меня знакомство с vlan-mon (не собирался модуль на новом ядре) и пришлось создавать vlan вручную.
Решил выбрать метод создания vlan.
Первый вопрос назрел:"чем, ip из iprute2 или vconfig?";
Склонялся в сторону ip, но тесты убедили в сторону vconfig.
Сделал без циклов на bash 4 файла, для создания и удаления vlan утилитой ip и vconfig.
Пример test_ip.sh
Code: Select all
#!/bin/sh
ip link add link eth0 name eth0.101 type vlan id 101
ip link add link eth0 name eth0.102 type vlan id 102
...
ip link add link eth0 name eth0.601 type vlan id 601
ip показал такие результаты по созданию 500 vlan
Code: Select all
test ~ # time ./test_ip.sh
real 0m4.215s
user 0m0.046s
sys 0m0.600s
Пример test_vconfig.sh
Code: Select all
#!/bin/sh
vconfig add eth0 101
vconfig add eth0 102
...
vconfig add eth0 601
Результат vconfig
Code: Select all
test ~ # time ./test_vconfig.sh
real 0m0.290s
user 0m0.019s
sys 0m0.027s
Таблица для сравнения
Code: Select all
ip vconfig
real 0m4.215s real 0m0.290s
user 0m0.046s user 0m0.019s
sys 0m0.600s sys 0m0.027s
В удалении также vconfig опередил ip.
Далее думаю скрипты доработать и выложить, вдруг кому пригодится.
Re: Статическое создание VLAN
Posted: 24 Oct 2014, 12:32
by dimka88
VLANs для создания будут храниться в файле vlans, в этом файле будут поддерживаться комментарии к конкретным vlan, если таковые требуются, а также vlan с вложениями QinQ.
Пример файла vlans:
Code: Select all
#<vlan> or <vlan>:<start-end> or <vlan>:<start-end>,<start-end>,...
#Region 1
1001:101-126,201-224
1011:101-124,201-225,301-308
#Non QinQ
2401
#Region 2
2001:101-126,201-224
2002:101-124,301-308
Re: Статическое создание VLAN
Posted: 24 Oct 2014, 12:43
by dimka88
Реализация скрипта на bash с использование vconfig.
Code: Select all
#!/bin/bash
IFACE="eth0"; #set the interface name to add vlans
QINQMTU="1508"; #set MTU to QinQ VLAN, "IFACE" mtu must be >= "QINQMTU"
CLIENTMTU="1500"; #set MTU to Client VLAN
#Full path to file w/ vlans
#sintax "QinQVID:FIRSTClientVLAN-LASTClientVlan,FIRSTClientVLAN-LASTClientVlan"
#example "2002:101-127,201-224"
VLANSFILE="/home/scripts/vlans";
COMMENT="#";
index=0
while read line; do
VARRAY[$index]="$line"
index=$(($index+1))
done < $VLANSFILE
#read file w/ vlans into array
COUNTER=0;
while [ $COUNTER -lt ${#VARRAY[@]} ]
do
if [ "${VARRAY[0]}" != "${COMMENT}" ]
then
#split string by ':'
IFS=':' read -a array <<< "${VARRAY[$COUNTER]}";
#add QinQ vlan
vconfig add $IFACE ${array[0]};
#change MTU in QinQ VLAN
ifconfig $IFACE.${array[0]} up mtu $QINQMTU;
#parse client vlans
IFS="," read -a ClientVlansAray <<< "${array[1]}";
II=0;
while [ $II -lt ${#ClientVlansAray[@]} ]
do
IFS="-" read -a CurVlansArray <<< "${ClientVlansAray[$II]}";
VCounter=${CurVlansArray[0]};
while [ $VCounter -le ${CurVlansArray[1]} ]
do
#create client VLAN in QinQ VLAN
vconfig add $IFACE.${array[0]} $VCounter;
#change MTU in Client VLAN
ifconfig $IFACE.${array[0]}.$VCounter up mtu $CLIENTMTU;
let VCounter=VCounter+1;
done
let II=II+1;
done
fi
let COUNTER=COUNTER+1;
let "c = COUNTER % 5";
done
В скрипте задаются параметры:
IFACE="eth0"; #Интерфейс на котором будут создаваться vlans
QINQMTU="1508"; #MTU для vlans c двойным теом
CLIENTMTU="1500"; #MTU для конечных vlans
VLANSFILE="/home/scripts/vlans"; #Полный путь к файлу с vlans
Re: Статическое создание VLAN
Posted: 27 Aug 2021, 10:54
by eklmno
День добрый,
понимаю, что тема стара и многое могло измениться.
Столкнулся с такой особенностью, аксель не создает влан с двумя тегами и соответственно не создаются интерфейсы c qinq.
В одном конфиге хотел бы иметь возможность создавать вланы и интерфейсы для клиентов, использующих как один тег так и для клиентов, использующих 2 тега (qinq).
с настройками для одного тега вопросов нет, пишем несколько строк:
vlan-mon=re:eth3,1-100,1000-1099
interface=re:^eth3\.1[0-9][0-9],shared=1,mode=L2,start=dhcpv4,ifcfg=1,mtu=1500,relay=10.10.10.1,giaddr=a.b.c.d
interface=re:^eth3\.10[0-9][0-9],shared=1,mode=L2,start=dhcpv4,ifcfg=1,mtu=1500,relay=10.10.10.1,giaddr=a.b.c.d
а при добавлении настроек конфиг для обработки qinq возникает вопрос.
vlan-mon=re:eth3,1-100,1000-1099 # для абонентов использующих 1 тег
vlan-mon=re:eth3.123,1100-1199 # для абонентов использующих 2 тега
...
interface=re:^eth3\.1[0-9][0-9],shared=1,mode=L2,start=dhcpv4,ifcfg=1,mtu=1500,relay=10.10.10.1,giaddr=a.b.c.d
interface=re:^eth3\.10[0-9][0-9],shared=1,mode=L2,start=dhcpv4,ifcfg=1,mtu=1500,relay=10.10.10.1,giaddr=a.b.c.d
interface=re:^eth3.123\.11[0-9][0-9],shared=1,mode=L2,start=dhcpv4,ifcfg=1,mtu=1500,relay=10.10.10.1,giaddr=a.b.c.d
Если рассматривать исходное состояние, после загрузки системы, во время которой создается влан 123 (pre-up /sbin/ip link add link eth3 name eth3.123 type vlan id 123) , то вопросов нет. Аксель стартует при существующем влане и при подлете второго тега на интерфейсе eth3.123 создается нужный влан qinq и поднимается интерфейс.
Если при изменении конфига акселя делается reload, то изменения так же вступают в силу и всё работает как положено.
В том случае, если выполнить последовательно accel-ppp stop и accel-ppp start , то после команды stop интерфейсы и вланы будут остановлены и удалены. При команде start создаются вланы и поднимаются интерфейсы только на одном теге, например eth3.55 , а для двух тегов влан почему то акселем не создается (например eth3.123)
Ежели мы вручную создадим влан
ip link add link eth3 name eth3.123 type vlan id 123 и выполним accel-cmd reload , то при поступлении от клиента discover, использующего qinq, влан eth3.123.55 и интерфейс успешно создаются и поднимается.
Умеет ли аксель создавать вланы и интерфейсы с двойным тегом?
Re: Статическое создание VLAN
Posted: 04 Sep 2021, 16:44
by dimka88
Родительский интерфейс должен быть создан заблаговременно, что бы vlan-mon модуль смог создать vlan. Стоит отметить, что vlan-mon может создавать интерфейс только для одного тега
vlan-mon=re:eth3,1-100 или создать eth3.1-100 вручную а модулю указать vlan-mon=re:eth3\.100,1100-1199
Re: Статическое создание VLAN
Posted: 24 Sep 2021, 19:43
by eklmno
Спасибо!
Очень хорошо, понятно.
А то подбирать различные сценарии было тяжело.
Re: Статическое создание VLAN
Posted: 23 Oct 2021, 20:10
by pppoetest
dimka88 wrote: ↑24 Oct 2014, 12:07
Пример test_ip.sh
Code: Select all
#!/bin/sh
ip link add link eth0 name eth0.101 type vlan id 101
ip link add link eth0 name eth0.102 type vlan id 102
...
ip link add link eth0 name eth0.601 type vlan id 601
Извращенец
Code: Select all
#!/bin/sh
TMP_FILE="/tmp/vlans"
for i in {101..601}; do
echo "link add link eth0 name erh0.$i type vlan id $i >> $TMP_FILE
done
ip -force -batch $TMP_FILE
rm $TMP_FILE
Емнип, vconfig тянет за собой все эти ifup события, в отличие от...
Re: Статическое создание VLAN
Posted: 27 Oct 2021, 10:13
by dimka88
Дело было давно =)