Имеется две FreeBSD 9.3 установленые на виртуалке VMware, на одной надо сделать тестовый маршрутизатор, который будет принмать пакеты из второй FreeBSD через Vlan'ы (нужно создать порядка 100 vlan'ов) и тут же создать 2 Vlan'а которые будут идти к второй (в обратную сторону) FreeBSD. Тестить трафик буду с помощью утилиты iperf, которая есть в портах FreeBSD.
С FreeBSD только знакомлюсь, поэтому могу с чем то тупить, заранее спасибо за любую помощь или совет.
вот файл rc.conf на маршрутизатореhostname="hostname_freeBSD"
ifconfig_em0="inet 192.168.174.130 netmask 255.255.255.0"
ifconfig_em0_ipv6="inet6 accept_rtadv"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"default_router="192.168.174.2"
sshd_enable="YES"
gateway_enable="YES"
cloned_interfaces="vlan101 vlan102 vlan103"
ifconfig_vlan101="inet 192.168.1.101 netmask 255.255.255.248 vlan 101 vlandev em0 mtu 1500"
ifconfig_vlan102="inet 192.168.2.102 netmask 255.255.255.248 vlan 102 vlandev em0 mtu 1500"
ifconfig_vlan103="inet 192.168.3.103 netmask 255.255.255.248 vlan 103 vlandev em0 mtu 1500"
ifconfig_em0="up mtu 1504"
но после создания вланов пропадает ip адрес физ. сети em0И еще, не нашел точного мануала по соединению вланов между портами freebsd, если кто знает где есть такой, или может обяснить как это сделать, буду премного благодарен
> ifconfig_em0="inet 192.168.174.130 netmask 255.255.255.0"Строчка ниже перекрывает предыдущую. Уберите её вообще.
> ifconfig_em0="up mtu 1504"
> но после создания вланов пропадает ip адрес физ. сети em0
так подойдет?hostname="hostname_freeBSD"
ifconfig_em0="up inet 192.168.174.130 netmask 255.255.255.0 mtu 1504"
ifconfig_em0_ipv6="inet6 accept_rtadv"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"default_router="192.168.174.2"
sshd_enable="YES"
gateway_enable="YES"
cloned_interfaces="vlan101 vlan102 vlan103"
ifconfig_vlan101="inet 192.168.1.101 netmask 255.255.255.248 vlan 101 vlandev em0 mtu 1500"
ifconfig_vlan102="inet 192.168.2.102 netmask 255.255.255.248 vlan 102 vlandev em0 mtu 1500"
ifconfig_vlan103="inet 192.168.3.103 netmask 255.255.255.248 vlan 103 vlandev em0 mtu 1500"
добавил еще вот такие строки:router_flags="-q"
router="/sbin/routed"
router_enable="YES"
defaultrouter="192.168.174.2"
> добавил еще вот такие строки:
> router_flags="-q"
> router="/sbin/routed"
> router_enable="YES"Это убрать нафиг и читать хендбук.
наконецто все настроил, вЛаны отлично работают, вот rc.conf одной из машин:hostname="test_freeBSD"
ifconfig_em0="inet 192.168.174.130 netmask 255.255.255.0 mtu 1504 "
ifconfig_em0_ipv6="inet6 accept_rtadv"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
sshd_enable="YES"
gateway_enable="YES"
cloned_interfaces="vlan101 vlan102 vlan103"
ifconfig_vlan101="inet 192.168.1.1 netmask 255.255.255.0 vlan 101 vlandev em0 mtu 1500"
ifconfig_vlan102="inet 192.168.2.1 netmask 255.255.255.0 vlan 102 vlandev em0 mtu 1500"
ifconfig_vlan103="inet 192.168.3.1 netmask 255.255.255.0 vlan 103 vlandev em0 mtu 1500"
Но теперь нужно протестить, утилиткой iperf, все три vlan'а одновременно.
Как я думаю решить поставленную задачу: создать скрипт, который будет запускать три iperf одновременно для каждого vlan'а и выводить на экран их усредненную смугу пропускания (bandwich) , но я не особо знаком с shell командами, может кто то топомочь, хотя бы примерно как это должно выглядеть
>[оверквотинг удален]
> cloned_interfaces="vlan101 vlan102 vlan103"
> ifconfig_vlan101="inet 192.168.1.1 netmask 255.255.255.0 vlan 101 vlandev em0 mtu 1500"
> ifconfig_vlan102="inet 192.168.2.1 netmask 255.255.255.0 vlan 102 vlandev em0 mtu 1500"
> ifconfig_vlan103="inet 192.168.3.1 netmask 255.255.255.0 vlan 103 vlandev em0 mtu 1500"
> Но теперь нужно протестить, утилиткой iperf, все три vlan'а одновременно.
> Как я думаю решить поставленную задачу: создать скрипт, который будет запускать три
> iperf одновременно для каждого vlan'а и выводить на экран их усредненную
> смугу пропускания (bandwich) , но я не особо знаком с shell
> командами, может кто то топомочь, хотя бы примерно как это должно
> выглядетьalt+f2, f3 и т.д. ?
> alt+f2, f3 и т.д. ?Нет, я не думаю, что так подойдет
В итоге вот rc.conf:hostname="hostname_freeBSD"
ifconfig_em0="inet 192.168.174.130 netmask 255.255.255.0 "
ifconfig_em0_ipv6="inet6 accept_rtadv"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"router_flags="-q"
router="/sbin/routed"
router_enable="YES"
default_router="192.168.174.2"
sshd_enable="YES"
gateway_enable="YES"
cloned_interfaces="vlan101 vlan102 vlan103"
ifconfig_vlan101="inet 192.168.1.101 netmask 255.255.255.248 vlan 101 vlandev em0 mtu 1500"
ifconfig_vlan102="inet 192.168.2.102 netmask 255.255.255.248 vlan 102 vlandev em0 mtu 1500"
ifconfig_vlan103="inet 192.168.3.103 netmask 255.255.255.248 vlan 103 vlandev em0 mtu 1500"
Вопрос: как теперь со второй freeBSD подключится к этим трем вланам? Нужно ли там в rc.conf создавать аналогичные вЛаны для этого?
https://www.freebsd.org/doc/handbook/
наконецто все настроил, вЛаны отлично работают, вот rc.conf одной из машин:hostname="test_freeBSD"
ifconfig_em0="inet 192.168.174.130 netmask 255.255.255.0 mtu 1504 "
ifconfig_em0_ipv6="inet6 accept_rtadv"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
sshd_enable="YES"
gateway_enable="YES"
cloned_interfaces="vlan101 vlan102 vlan103"
ifconfig_vlan101="inet 192.168.1.1 netmask 255.255.255.0 vlan 101 vlandev em0 mtu 1500"
ifconfig_vlan102="inet 192.168.2.1 netmask 255.255.255.0 vlan 102 vlandev em0 mtu 1500"
ifconfig_vlan103="inet 192.168.3.1 netmask 255.255.255.0 vlan 103 vlandev em0 mtu 1500"
Но теперь нужно протестить, утилиткой iperf, все три vlan'а одновременно.
Как я думаю решить поставленную задачу: создать скрипт, который будет запускать три iperf одновременно для каждого vlan'а и выводить на экран их усредненную смугу пропускания (bandwich) , но я не особо знаком с shell командами, может кто то топомочь, хотя бы примерно как это должно выглядеть
> ifconfig_em0="inet 192.168.174.130 netmask 255.255.255.0 mtu 1504 "
> ifconfig_vlan101="inet 192.168.1.1 netmask 255.255.255.0 vlan 101 vlandev em0 mtu 1500"
> ifconfig_vlan102="inet 192.168.2.1 netmask 255.255.255.0 vlan 102 vlandev em0 mtu 1500"
> ifconfig_vlan103="inet 192.168.3.1 netmask 255.255.255.0 vlan 103 vlandev em0 mtu 1500"Уберите все MTU, они там не нужны.
> Но теперь нужно протестить, утилиткой iperf, все три vlan'а одновременно.
> Как я думаю решить поставленную задачу: создать скрипт, который будет запускать три
> iperf одновременно для каждого vlan'а и выводить на экран их усредненную
> смугу пропускания (bandwich) , но я не особо знаком с shell
> командами, может кто то топомочь, хотя бы примерно как это должно
> выглядетьУ Вас суммарная скорость работы этих трёх виланов будет такая же, как и при работе одного обычного интерфейса. В пределах ошибки измерений. Другими словами - не занимайтесь ерундой.
> У Вас суммарная скорость работы этих трёх виланов будет такая же, как
> и при работе одного обычного интерфейса. В пределах ошибки измерений. Другими
> словами - не занимайтесь ерундой.В том и вся соль, что б показать то, что скорость пирмерно ровна. Я ведь не только для троих хочу сделать, а и для 10, 50, 100 вланов
>> У Вас суммарная скорость работы этих трёх виланов будет такая же, как
>> и при работе одного обычного интерфейса. В пределах ошибки измерений. Другими
>> словами - не занимайтесь ерундой.
> В том и вся соль, что б показать то, что скорость пирмерно
> ровна. Я ведь не только для троих хочу сделать, а и
> для 10, 50, 100 влановВам тонко намекнули, что больше пропускной способности интерфейса не прыгнешь, хоть там 100 хоть 1000 если порт 10Gbps то vlan1+vlan2+...+vlan1000=10Gbps
> Вам тонко намекнули, что больше пропускной способности интерфейса не прыгнешь, хоть там
> 100 хоть 1000 если порт 10Gbps то vlan1+vlan2+...+vlan1000=10GbpsНу а если вам конкретно по каждому vlan нужно, то в любом случае через некоторые может быть в дальнейшем больше обмена данными будет, по некоторым меньше, соответственно и в сетевой очереди будет разное время прохождения
>> Вам тонко намекнули, что больше пропускной способности интерфейса не прыгнешь, хоть там
>> 100 хоть 1000 если порт 10Gbps то vlan1+vlan2+...+vlan1000=10Gbps
> Ну а если вам конкретно по каждому vlan нужно, то в любом
> случае через некоторые может быть в дальнейшем больше обмена данными будет,
> по некоторым меньше, соответственно и в сетевой очереди будет разное время
> прохожденияЯ понимаю, просто мне как раз таки и надо это показать с помощью iperf , но у нее нету таких опций всилу их ненужности. Вот поетому и надо создать скрипт, который будет циклом запускать iperf для нужного количества vlan'ов и выводить просумированные результаты iperf'а.
> Я понимаю, просто мне как раз таки и надо это показать с
> помощью iperfОпять таки - не занимайтесь мазохизмом. Виланы отличаются лишь VID в заголовке пакетов. При их обработке в ОС нет каких либо вычислений, которые могут заметно влиять на производительность. Пропускная способность будет определяться сетевой картой и процессором. В зависимости от конкретного железа - в разных пропорциях. Просто протестируйте пропускную способность карты на разном размере пакетов и поймёте, что с неё можно вытянуть.
вот написал что то, но не работает для вланов только для физ сети em0
Еще не знаю как изменить паремтр(наверное еще одну переменную x надо) чтоб в команде iperf -c 192.168.x+1.0 для вланов в будующем
#!/bin/shi=0
while [ $i -lt 3 ]
do
i=`echo $i+1|/usr/local/bin/iperf -c 192.168.174.129`
done
echo $i
надо что то типо:#!/bin/sh
i=0
while [ $i -le 3 ]
do
i=`echo $i+1|/usr/local/bin/iperf -c 192.168.$i+1.2`
done
echo $i
но оно не работает...
Итого, все работает хорошо, кроме что разве вывода результатов у файл (у stat.txt записывается только результат для последнего vlan'a, а если не в файле, а в командной строке, то видны отчеты всех, которые обработал цикл). Перепробовал все, что знал... Может кто то знает как с ним справится, буду очень признателен
#!/bin/shi=1
while [ $i -le $1 ]
do
c=$i
/usr/local/bin/iperf -c 192.168.$c.2 -t 5 -y C > stat.txt
echo $c
i=`expr $i + 1`
done
/usr/local/bin/iperf -c 192.168.$c.2 -t 5 -y C >> stat.txt
> /usr/local/bin/iperf -c 192.168.$c.2 -t 5 -y C >> stat.txtСпасибо большое!!!
Теперь мучаюсь с строками... Как извлечь из файла stat.txt скорость(три первых цифры последнего значения, после комы в каждой строке) и записать в новый файл (est.txt)
Пытался с помощью cut сделать, но не получилось, может grep удобней будет?
Вот stat.txt20150611123252,192.168.1.1,50771,192.168.1.2,5001,3,0.0-5.0,138018816,220638944
20150611123257,192.168.2.1,44982,192.168.2.2,5001,3,0.0-5.0,147849216,236358927
20150611123302,192.168.3.1,14413,192.168.3.2,5001,3,0.0-5.0,136183808,217441076А так должен выглядеть est.txt
VLAN101 220
VLAN102 236
VLAN103 217
получилось вот так, только не получается выделить еще первые 3 байта, вместо всех 9#!/bin/sh
FILENAME=/usr/home/main/stat.txt
x=101
for user in $(cut -d, -f9 $FILENAME)
do
echo VLAN$x $user >> /usr/home/main/est.txt
x=`expr $x + 1`
done
Наконец то все работает так, как я и хотел, но есть еще одна мелочь, как в shell сделать график зависимости номера vlan'a от смуги пропускания (которые беру из файла est.txt, сейчас там только 3 vlana, но будет около 100)
est.txt :VLAN101 212
VLAN102 202
VLAN103 203вот скрипт, который реализует предыдущие мои вопросы:
#!/bin/shcp /dev/null stat.txt
cp /dev/null est.txt
i=1
while [ $i -le $1 ]
do
c=$i
/usr/local/bin/iperf -c 192.168.$c.2 -t 5 -y C >> stat.txt
echo $c
i=`expr $i + 1`
doneFILENAME=/usr/home/main/stat.txt
x=101
for y in $(cut -b 71-73 $FILENAME)
do
echo VLAN$x $y >> /usr/home/main/est.txt
x=`expr $x + 1`
done
И да, еще такой вопрос, когда я запускал цыклом iperf, я нагружал 101 vlan, потом 102 и тд, а как можно одновременно нагрузить 101,102,103 vlan'ы и тд ?
сделал так, чтоб одновременно vlan'ы тестились, так теперь не переносится данные у файл est.txt, в чем ошибка?#!/bin/sh
cp /dev/null stat.txt
cp /dev/null est.txt
i=1
while [ $i -le $1 ]
do
c=$i
/usr/local/bin/iperf -c 192.168.$c.2 -t 5 -y C >> stat.txt &
echo $c
i=`expr $i + 1`
doneFILENAME=/usr/home/main/stat.txt
x=101
for y in $(cut -b 71-73 $FILENAME)
do
echo VLAN$x $y >> /usr/home/main/est.txt
x=`expr $x + 1`
done
похоу, надо задержать выполнение второго цикла на 5 секунд, каким способои можно это сделать?
Ребята, как в shell сделать график ?
> Ребята, как в shell сделать график ?rrd? или надо прям в консолях?
>> Ребята, как в shell сделать график ?
> rrd? или надо прям в консолях?Спасибо Вам, но я уже отказался о данной идеи
Подскажите, пожалуйста, мои ошибки в структурировании и тд.#!/bin/sh
touch stat.txt
touch est.txtn=101
a=1
while [ $a -le $1 ]
do
n=`expr $a + 100`
/sbin/ifconfig vlan$n create && ifconfig vlan$n inet 192.168.$a.1 netmask 255.255.255.0 vlan $n vlandev em0
a=`expr $a + 1`
donei=1
while [ $i -le $1 ]
do
c=$i
/usr/local/bin/iperf -c 192.168.$c.3 -t 10 -y C >> stat.txt &
i=`expr $i + 1`
donesleep 15
FILENAME=/usr/home/main/stat.txt
for y in $(cut -d, -f 9 $FILENAME)
do
echo $y >> /usr/home/main/est.txt &
done
n=101
a=1
while [ $a -le $1 ]
do
n=`expr $a + 100`
/sbin/ifconfig vlan$n destroy
a=`expr $a + 1`
donen=0
while read line
do
let "n=$n+"$line""
clear
done < est.txt
let "m=$n/1000000"
rm stat.txt
rm est.txt
И да, как мне сделать, чтоб етим скриптом я мог вызывать исполнения другого скрипта на другой машине.
Например, ip первой машины 192.168.174.130 , другой - 192.168.174.131Вот код скрипта, который надо выполнить на второй машине (параметр $1 нужно взять из скрипта на первой машине)
#!/bin/sh
n=101
a=1
while [ $a -le $1 ]
do
n=`expr $a + 100`
/sbin/ifconfig vlan$n create && ifconfig vlan$n inet 192.168.$a.3 netmask 255.255.255.0 vlan $n vlandev em0
a=`expr $a + 1`
done
sleep 40
n=101
a=1
while [ $a -le $1 ]
do
n=`expr $a + 100`
/sbin/ifconfig vlan$n destroy && ifconfig vlan$n inet 192.168.$a.3 netmask 255.255.255.0 vlan $n vlandev em0
a=`expr $a + 1`
done
>[оверквотинг удален]
> sleep 40
> n=101
> a=1
> while [ $a -le $1 ]
> do
> n=`expr $a + 100`
> /sbin/ifconfig vlan$n destroy && ifconfig vlan$n inet 192.168.$a.3 netmask 255.255.255.0
> vlan $n vlandev em0
> a=`expr $a + 1`
> doneВы, простите, чего в итоге добиться хотите?
> И да, как мне сделать, чтоб етим скриптом я мог вызывать исполнения другого скрипта на другой машине. Например, ip первой машины 192.168.174.130 , другой - 192.168.174.131а в чем собственно проблема
ssh user@192.168.174.131 'command1; command2'
чтобы не запрашивало пароль - настроить аутентификацию по ключам