vurd Опубликовано 15 ноября, 2013 · Жалоба Введение Есть задача автоматизировать проброс вланов по сети состоящей из длинков и цисок на L2. Понятно, что можно использовать GVRP и VTP, но делать этого не хочется по причинам длинков, сами понимаете, в один прекрасный момент это может всё развалится из-за специфики оборудования. Оборудование - от 3526 до 3200-X без веб-смартов и обрезков. Каталисты - 29xx, 3750. Что уже есть 1. Полная карта по которой нужно построить цепочку вланов, акцесом на конце, транком на начале. 2. Возможность управления вланами на длинках через snmp, создать удалить, добавить порты. Без проблем, всё работает годами через Q-BRIDGE MIB. 3. Возможность управлять цисками через VTP-что-то-там-MIB (пример ниже) Сам вопрос Не могу найти mib и вообще факт присутствия нужного функционала для назначения портов в VLAN режиме TRUNK. Access - без проблем. Сделать switchport trunk allowed all можно, но не хочется, люблю порядок. Понятно, что можно написать телнет клиент на каком-нибудь экспекте, но хочется именно snmp. Может быть кто-нибудь делал подобную вещь? Я уже нарыл по этому вопросу следующее СОЗДАНИЕ ВЛАНА (vlan=6) #Режим редактирования и копирование таблицы влан snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 integer 2 1.3.6.1.4.1.9.9.46.1.4.1.1.3.1 s "vurd" #Создание влан snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.2.1.11.1.6 i 4 1.3.6.1.4.1.9.9.46.1.4.2.1.3.1.6 i 1 1.3.6.1.4.1.9.9.46.1.4.2.1.4.1.6 s "vlan6" 1.3.6.1.4.1.9.9.46.1.4.2.1.6.1.6 x 000186A6 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 3 #Применение таблицы snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 4 УНИЧТОЖЕНИЕ ВЛАНА (vlan=6) #Режим редактирования и копирование таблицы влан snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 integer 2 1.3.6.1.4.1.9.9.46.1.4.1.1.3.1 s "vurd" #Удаление влан snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.2.1.11.1.6 i 6 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 3 #Применение таблицы snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.46.1.4.1.1.1.1 i 4 ДОБАВЛЕНИЕ ACCESS-ПОРТА В ВЛАН (vlan=6, port=10(ifIndex)) #Добавить порт в влан snmpset -v2c -c JJhjfeur2 quince 1.3.6.1.4.1.9.9.68.1.2.2.1.2.10 i 6 1.3.6.1.4.1.9.9.68.1.2.2.1.2.{ifIndex} i {vlan} Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
darkagent Опубликовано 15 ноября, 2013 · Жалоба по длинку: ftp://ftp.dlink.pl/_KnowledgeBase/Switch_doc_en_How-to-use-SNMP-to-check-VLAN-Static-and-Current-Tables-on-DES-3028_20100203.pdf там в конце есть The Example of creating a VLAN и The Example of adding a tag port in VLAN Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vurd Опубликовано 15 ноября, 2013 · Жалоба По длинку без проблем ( см. "что уже есть", пункт 2;) ). Вопрос именно по цискам и именно по транковым портам. Есть вон какой-то http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=1.3.6.1.4.1.9.9.46.1.6.1.1.4 , объект read-create. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
darkagent Опубликовано 15 ноября, 2013 · Жалоба по цискам есть ман: http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c6035.shtml http://dragon.east.isi.edu/twiki/bin/view/DRAGON/CiscoCatalystSNMPandCLI где-то еще попадались готовые куски перла для полного управления вланами на cisco ios, если найду подкину. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vurd Опубликовано 15 ноября, 2013 · Жалоба О! Первый мануал в переводе на наш язык и с исправлениями всех ошибок, которые там встретились, я приложил выше :) А вот второй я уже не видел. Беглый просмотр говорит мне о том, что это именно то, что я искал. Спасибо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
mixerinc Опубликовано 15 ноября, 2013 · Жалоба .1.3.6.1.4.1.9.9.46.1.6.1.1.4 .iso.org.dod.internet.private.enterprises.cisco.ciscoMgmt.ciscoVtpMIB.vtpMIBObjects.vlanTrunkPorts.vlanTrunkPortTable.vlanTrunkPortEntry.vlanTrunkPortVlansEnabled A string of octets containing one bit per VLAN in the management domain on this trunk port. The first octet corresponds to VLANs with VlanIndex values of 0 through 7; the second octet to VLANs 8 through 15;etc. The most significant bit of each octet corresponds to the lowest value VlanIndex in that octet. If the bit corresponding to a VLAN is set to '1', then the local system is enabled for sending and receiving frames on that VLAN;if the bit is set to '0', then the system is disabled from sending and receiving frames on that VLAN. allowed vlan на tunk'e , не оно? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
neperpbl3 Опубликовано 20 марта, 2023 (изменено) · Жалоба Автоматическая работа с vlans Инструменты 1. Получение инфы о существующем vlan и поиск устройств 2. Быстрое создание vlan 3. Быстрое удаление vlan со всех коммутаторов Получение актуальных данных vlan Задача: Получить информацию о действительном использовании VID Запуск ./check_vlan.sh ./check_vlan.sh ./check_vlan.sh <VID> debug Процеcc I. Ввод данных пользователя II. Анализ VID и Vlan name на существование, поиск дубликатов в конфигурациях всех коммутаторов сети III. Поиск MAC адресов на основных коммутаторах в распр через SNMP запрос к каждому кольцевому коммутатору Быстрое создание vlan Основная задача: быстрое создание vlan только коммутаторов Второстепенные задачи: 1. Актуализировать пропуски 2. Переименовать уже созданный ранее vlan Процеcc I. Ввод данных пользователя II. Анализ VID и Vlan name на существование, поиск дубликатов имени III. Создание vlan (автоматическое) IV. Сохранение конфигураций Запуск ./start-add-vlan.sh ./start-add-vlan.sh ./start-add-vlan.sh <VID> <name> Если обе точки находятся в пределах местонахождения , то достаточно указать зону «1». Если есть хотя бы одна точка находится в зоне 2, то нужно указывать «1,2». В стандартных случаях зона 2 не используется отдельно без зоны 3оны 1. И в таком случае будет выдано предупреждающее сообщение: Вы выбрали "зона 2" без . зона 1 Не сделали ли вы ошибку? Правильные примеры: Ошибочные примеры***: 2 (отсутствует зона 1) 3 (отсутствует зона 1,2) *- пример не будет ошибкой если вы выполняете узкую задачу, например на одном коммутаторе зоны 2 отсутствует нужный vlan. После завершения создания vlan пропишите vlan вручную на конечных коммутаторах. Быстрое удаление vlan со всех коммутаторов Задача: быстрое удаление vlan со всех коммутаторов. Запуск ./start-delete-vlan.sh ./start-delete-vlan.sh ./start-delete-vlan.sh <VID> Процеcc I. Ввод данных пользователя II. Поиск коммутаторов с нужным VID III. Удаление vlan (полуавтоматическое с «предохранителем») IV. Сохранение конфигураций Если Mac адресов много, то vlan удалить нельзя Дополнительно Ручное скачивание конфигов ./download_configs.sh Сохранить все конфиги ./autosave-conf-all-switches.sh Список оборудования cat "/all_devices" Цитата #|#|PERVAYA_ZONA 1|2|192.168.0.123|47,48|snmp_community 1|3|192.168.0.105|106,107|snmp_community 1|2|192.168.0.125|47,48|snmp_community 1|3|192.168.0.92|106,107|snmp_community 1|3|192.168.0.34|107,108|snmp_community #|#|VTORAYA_ZONA 2|2|192.168.0.123|46|snmp_community 2|2|192.168.0.6|47,48|snmp_community 2|3|192.168.0.8|107,108|snmp_community 2|3|192.168.0.121|105,107|snmp_community 2|3|192.168.0.105|108|snmp_community #|#|TRETYA_ZONA 3|3|192.168.0.85|107|snmp_community 3|3|192.168.0.140|107,108|snmp_community 3|3|192.168.0.138|107,108|snmp_community 3|3|192.168.0.1252|108,107|snmp_community 3|3|192.168.0.1251|108,107|snmp_community 3|3|192.168.0.121|108|snmp_community #|#|CHETVERTAYA_ZONA 4|2|192.168.0.125|44|snmp_community 4|3|192.168.0.74|57,60|snmp_community 4|0|192.168.0.78|26,25|d_link_snmp_community 4|0|192.168.0.76|26,28|d_link_snmp_community 4|2|192.168.0.123|29|snmp_community Основные срипты autosave-conf-all-switches.sh check_settings.sh check_vlan.sh download_configs.sh start-add-vlan.sh start-delete-vlan.sh Вспомогательные срипты Директория sub-scripts add_vlan-Cisco-Nexus.sh add_vlan-D-link.sh add_vlan-Eltex.sh del_vlan-Cisco-Nexus.sh del_vlan-D-link.sh del_vlan-Eltex.sh wr_mem-Cisco-Nexus.sh autosave-conf-all-switches.sh Цитата #!/bin/bash folder_cfg="/srv/tftp" ### Сохранение конфигураций коммутаторов Eltex ### list_eltex=$(cat /config_eltex) while read ip do comm=snmp_community sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( snmpset -t 10 -r 0 -v2c -c $comm $ip 1.3.6.1.4.1.89.87.2.1.3.1 i 1 1.3.6.1.4.1.89.87.2.1.7.1 i 2 1.3.6.1.4.1.89.87.2.1.8.1 i 1 1.3.6.1.4.1.89.87.2.1.12.1 i 3 1.3.6.1.4.1.89.87.2.1.17.1 i 4 ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi done <<< "$list_eltex" ### Сохранение конфигураций коммутаторов D-link ### list_dlink_all=$(cat /config_des3200C1 /config_des /config_dgs1100-06ME) while read ip do sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g') ip_4oct=`echo $ip | awk -F '.' '{print $4}'` echo;echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( snmpset -t 10 -r 0 -v2c -c snmp_community"$ip_4oct" $ip 1.3.6.1.4.1.171.12.1.2.18.4.0 i 4 ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi done <<< "$list_dlink_all" check_settings.sh Цитата #!/bin/bash IFS='' DEVICES="/all_devices" list_eltex=$(cat /config_eltex) list_dlink_all=$(cat /config_des /config_des3200C1 /config_dgs1100-06ME) list_cisco=$(cat /config_cisco) #list_alldevices=$(cat /config_*) folder_cfg="/srv/tftp" #dir_eltex="/srv/tftp/Eltex" #dir_dlink="/srv/tftp/DES" #dir_cisco="/srv/tftp/cisco" #dir_des2="/configs/DES/" #dir_des="/configs/DES/*" #list_des_3200C1=$(cat /config_des3200C1) #list_des_3200=$(grep -a "DES-3200-[[:digit:]]\{2\} Configuration" /configs/DES/* | cut -d '/' -f6 | cut -d ':' -f1) #list_dgs_1100_06=$(grep -a "DGS-1100-06/ME Gigabit" /configs/DES/*) #list_dgs_1100_06_1=$(echo $list_dgs_1100_06 | cut -d '/' -f6 | cut -d ':' -f1) #list_des_3526_draft=$(grep -a "DES-3526 Configuration" /configs/DES/*) #list_des_3526=$(echo $list_des_3526_draft | cut -d '/' -f6 | cut -d ':' -f1) #list_des_3016=$(grep -a "DES-3016 Configuration" /configs/DES/*) case "$1" in --help) echo "use $0 VlanID debug";exit ;; -h) echo "use $0 VlanID debug";exit ;; *) ;; esac /usr/bin/renice -n 20 -p $$ > /dev/null cd /usr/libexec/vlans vlanid=$1 vlanname=$2 #Цвета для дебага deb_c1="\e[35m" deb_c2="\e[0m" echo -e "Проверка vlan\e[0m" if [ "x$1" = "x" ]; then echo -e "\033[44;7mВведите Vlan ID\e[0m"; read -p "Vlan ID: " vlanid fi if [ "x$2" = "xdebug" ]; then debug=1 else debug=0 fi #read -p "Включить режим debug? y/n: " dbg #case "$dbg" in # y) debug=1 ;; # *) debug=0 ;; #esac #D-link и Cisco Nexus не разрешает испотзование пробелов, однако Элтекс разрешают пробелы и нужно их заменить на _ # из-за этого в дальнейшем придется проверять vlan`ы 2 раза: с пробелами и с "_" vlanname_orig=$vlanname vlanname=`echo $vlanname | sed 's/ /_/g'` ### Функция поиска vlan ### search_vid(){ if ( echo $list_vlan_final | grep -w $vlanid &>/dev/null ) then echo -e "\033[33m\nVlan ID $vlanid создан на $postfix $sw_name $ip \e[0m" /// $vlanname_current; vlanid_error=true if [ $debug == "1" ] then echo -e "${deb_c1}==DEBUG== Найден VID \c"; echo -e "`echo $list_vlan_final | grep -w $vlanid`${deb_c2}" fi fi } ### Функция очистки переменных ### clear_var(){ unset postfix unset sw_name unset list_vlan unset list_vlan_final unset vlanname_current unset vlanname_current_short } ### Индикатор выполнения ### progress_bar(){ if [ $debug == "0" ]; then echo -e "\033[36m.\e[0m\c"; fi } ################### ### Cisco Nexus ### ################### while read ip || [ -n "$ip" ] do if (grep -i "hostname Nexus" "$folder_cfg"/cisco/"$ip".conf &>/dev/null) then list_cisco_nexus=$(echo -e "$list_cisco_nexus\n$ip") fi done <<< "$list_cisco" list_cisco_nexus=$(echo $list_cisco_nexus | sed '/^$/d') while read ip || [ -n "$ip" ] do postfix=CiscoNexus; sw_name=`grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'` list_vlan=`grep -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | sed 's/vlan //'` list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/\n/,/g') list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" } NR > 1 { print "\n" } NF > 1 { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next } { print $1 }'` vlanname_current=`grep -wEA1 "^vlan $vlanid" "$folder_cfg"/cisco/"$ip".conf | sed ':a;N;$!ba;s/\n//g'` vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'` #list_vlanname_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname_orig" | sed 's/ name //'` #list_vlanname_debug_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` #list_vlanname=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname" | sed 's/ name //'` #list_vlanname_debug=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short") search_vid clear_var progress_bar done <<< "$list_cisco_nexus" ############# ### Eltex ### ############# while read ip || [ -n "$ip" ] do postfix=Eltex; sw_name=`grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'` list_vlan=`sed -n '/^vlan database$/,/^exit$/p' "$folder_cfg"/Eltex/"$ip".conf | sed -e'/database/'d -e'/exit/'d | sed 's/ vlan //'` list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/ \n/,/g') list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" } NR > 1 { print "\n" } NF > 1 { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next } { print $1 }'` vlanname_current=`grep -wA1 "interface vlan $vlanid" "$folder_cfg"/Eltex/"$ip".conf | sed ':a;N;$!ba;s/\n//g'` vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'` #list_vlanname_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -w name | sed 's/ name //' | sed 's/"//g'` #list_vlanname_debug_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` #list_vlanname=$list_vlanname_o #list_vlanname_debug=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short") search_vid clear_var progress_bar done <<< "$list_eltex" ############## ### D-link ### ############## while read ip || [ -n "$ip" ] do postfix=Dlink; sw_name=`grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g'` list_vlan_final=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 5` vlanname_current=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -w "tag $vlanid"` vlanname_current_short=`echo $vlanname_current | awk -F ' ' '{print $3}'` #list_vlanname=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 3` #list_vlanname_debug=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -wi $vlanname` if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short") search_vid clear_var progress_bar done <<< "$list_dlink_all" echo echo Обнаружены следующие имена: echo $list_all_curvlanname | sed 's/ $//g' | sort -u | sed '/^$/d' download_configs.sh Цитата #!/bin/bash case "$1" in --help) echo "use $0 debug";exit ;; -h) echo "use $0 debug";exit ;; *) ;; esac if [ "x$1" = "xdebug" ] then debug=1 else debug=0 fi print_message(){ echo echo "Выгрузка Элтекс завершена. Через 3 сек. начнется выгрузка конфигуаций D-link. Нажмите Ctrl+C для отмены" echo "К сожалению, конфигуации коммутаторов Cisco Nexus не выгружаются по данному запросу :-(" echo sleep 3 } error="" #read -p "Выводить подробности? y/n: " debug case "$debug" in 1) echo Началась выгрузка конфигураций Элтекс... /eltex-uploader.pl | grep STRING print_message /des-uploader.pl | grep STRING ;; 0) echo Началась выгрузка конфигураций Элтекс... echo "Для вывода более детальной информации используйте $0 debug" /eltex-uploader.pl > /dev/null print_message /des-uploader.pl > /dev/null ;; esac start-add-vlan.sh Цитата #!/bin/bash DEVICES="/all_devices" debug=0 deb_o="&>/dev/null" folder_cfg="/srv/tftp" case "$1" in --help) echo "use $0 VlanID debug";exit ;; -h) echo "use $0 VlanID debug";exit ;; *) ;; esac /usr/bin/renice -n 20 -p $$ > /dev/null cd /usr/libexec/vlans vlanid=$1 vlanname=$2 #Цвета для дебага deb_c1="\e[35m" deb_c2="\e[0m" stop(){ read -p "Нажмите enter для продолжения..." s } echo -e "Быстрое создание vlan. \e[4mhttp://1.2.3.4/mstpring.html\e[0m" if [ "x$1" = "x" ]; then echo -e "\033[44;7mВведите Vlan ID <vlanid 2-3967,4048-4094>\e[0m"; read -p "Vlan ID: " vlanid fi if [ "x$2" = "x" ]; then echo echo "Далее нужно создать описание vlan'a" echo echo -e "\033[44;7mВведите название vlan'a\e[0m"; read -p "Vlan name: " vlanname fi #D-link и Cisco Nexus не разрешает испотзование пробелов, однако Элтекс разрешают пробелы и нужно их заменить на _ # из-за этого в дальнейшем придется проверять vlan`ы 2 раза: с пробелами и с "_" vlanname_orig=$vlanname vlanname=`echo $vlanname | sed -e 's/ /_/g' -e 's/"//g'` vlanname_wc=`echo $vlanname | wc -m` #Проверка на количество символов 32 if [ $vlanname_wc -gt "33" ]; then echo "Максимальное количество символов в наименовании vlan не должно превышать 32. Рекомендуем уменьшить длину имени...";exit fi echo echo -e "\033[45;7mВы выбрали Vlan ID=$vlanid, имя=$vlanname\e[0m"; echo;echo -e "Проводится анализ на наличие Vlan ID $vlanid коммутаторов в кольце MSTP" ############################################### ########### ПРОВЕРКА VLAN НА НАЛИЧИЕ ########## ############################################### #IFS=' ' while read LINE || [ -n "$LINE" ] do arr=(`echo $LINE | sed "s/ /_/g" | sed "s/|/ /g"`); zone_switch=${arr[0]}; type=${arr[1]}; ip=${arr[2]}; portlist=${arr[3]};#portlist=(`echo ${arr[3]} | sed "s/,/ /g"`); portcount=`echo ${arr[3]} | awk -F ',' '{print NF}'`; comm=${arr[4]}; #в начале каждого цикла стираются значения переменных предыдущего коммутатора unset sw_name unset list_vlan_final unset list_vlanname unset list_vlanname_debug unset list_vlanname_invert #значение оригинального наименования vlan без замены пробелов на знак "_" #У D-link и Cisco Nexus нельзя использовать проблелы, поэтому данное поле отсутствует unset list_vlanname_o unset list_vlanname_debug_o #Пропускать проверенные коммутаторы. Дебаг включается только вручную в самом скрипте. if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== check_vid_all=$check_vid_all ${deb_c2}"; fi if ( echo $check_vid_all | grep $ip &>/dev/null ); then if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== IP $ip уже был проверен ранее, пропускаем ...${deb_c2}"; fi continue fi echo -e "\033[36m.\e[0m\c" IFS='' #Для дальнейшей обработки разделитель должен быть переводом строки if [ $type == "0" ]; then postfix=Dlink; sw_name=`grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g'` list_vlan_final=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 5` #_vlanname_current=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -w "tag $vlanid"` list_vlanname=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 3` list_vlanname_debug=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -wi $vlanname` elif [ $type == "1" ]; then postfix=Cisco; elif [ $type == "2" ]; then postfix=CiscoNexus; sw_name=`grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'` list_vlan=`grep -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | sed 's/vlan //'` list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/\n/,/g') list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" } NR > 1 { print "\n" } NF > 1 { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next } { print $1 }'` #_vlanname_current=`grep -wEA1 "^vlan $vlanid" "$folder_cfg"/cisco/"$ip".conf | sed ':a;N;$!ba;s/\n//g'` list_vlanname_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wi "name $vlanname_orig" | sed 's/ name //'` list_vlanname_debug_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wiB1 "name $vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` list_vlanname=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wi "name $vlanname" | sed 's/ name //'` list_vlanname_debug=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -wiB1 "name $vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` elif [ $type == "3" ]; then postfix=Eltex; sw_name=`grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'` list_vlan=`sed -n '/^vlan database$/,/^exit$/p' "$folder_cfg"/Eltex/"$ip".conf | sed -e'/database/'d -e'/exit/'d | sed 's/ vlan //'` list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/ \n/,/g') #if [ $ip == 1.2.3.140 ]; then echo DEBUG list_vlan $list_vlan; fi list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" } NR > 1 { print "\n" } NF > 1 { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next } { print $1 }'` #_vlanname_current=`grep -wA1 "interface vlan $vlanid" "$folder_cfg"/Eltex/"$ip".conf | sed ':a;N;$!ba;s/\n//g'` list_vlanname_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -w name | sed 's/ name //' | sed 's/"//g'` list_vlanname_debug_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` list_vlanname=$list_vlanname_o list_vlanname_debug=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` list_vlanname_invert=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -vw "interface vlan $vlanid" | grep -A1 'interface vlan' | grep -w name | sed 's/ name //'` #Проверка, чтобы имя vlan не использовалось для другого vid. #У Элтекс с этим есть баг, который может удалить существующий vlan #На остальных вендорах vlan создастся, только ему не назначится имя. Это не критично. if ( echo $list_vlanname_invert | grep -iw "$vlanname" &>/dev/null ) then echo -e "\033[31mИмя $vlanname уже используется ДЛЯ ДРУГОГО VLAN на $postfix $sw_name $ip \e[0m /// $list_vlanname_debug"; vlanname_fatal_error=true fi if [ "$vlanname" != "$vlanname_orig" ] then if ( echo $list_vlanname_invert | grep -iw "$vlanname_orig" &>/dev/null ) then echo -e "\033[31mИмя $vlanname_orig уже используется ДЛЯ ДРУГОГО VLAN на $postfix $sw_name $ip \e[0m /_/ $list_vlanname_debug_o"; vlanname_fatal_error=true fi fi #echo $ip list_vlanname_invert $list_vlanname_invert fi #Проверяем выбранный vid и vlanname на наличие в конфигах if ( echo $list_vlan_final | grep -w $vlanid &>/dev/null ) then echo -e "\033[33mVlan ID $vlanid уже создан на $postfix $sw_name $ip \e[0m"; vlanid_error=true fi if ( echo $list_vlanname | grep -iwE "^$vlanname" &>/dev/null ) then echo -e "\033[33mИмя $vlanname уже используется на $postfix $sw_name $ip \e[0m /// $list_vlanname_debug"; vlanname_error=true fi if [ "$vlanname" != "$vlanname_orig" ] then if ( echo $list_vlanname_o | grep -iwE "^$vlanname_orig" &>/dev/null ) then echo -e "\033[33mИмя $vlanname_orig уже используется на $postfix $sw_name $ip \e[0m /_/ $list_vlanname_debug_o"; vlanname_error=true fi fi check_vid_all="$check_vid_all $ip" IFS=' ' #После окончания обработки возвращаем разделитель в режим по-умолчанию - в виде пробела. Иначе массив не будет обрабатываться done < $DEVICES if [ -n "$vlanid_error" ]; then echo;echo -e "\033[43m\033[30mВнимание! Данный vlan найден в текущих настройках!\e[0m"; fi if [ -n "$vlanname_error" ]; then echo;echo -e "\033[43m\033[30mОшибка! Данное имя уже занято!\e[0m"; fi if [ -n "$vlanname_fatal_error" ]; then echo;echo -e "\033[41m\033[30mСерьезная ошибка! Данное имя уже используется для другого VID. На Элтекс VLAN не создастся. Подробная информация в документации. Исправьте ошибку и запустите скрипт повторно. До свидания.\e[0m"; exit; fi if [[ -n "$vlanid_error" || -n "$vlanname_error" ]]; then echo; echo "Найдены ошибки. Рекомендуется выйти и разобраться в причинах дубликатов VID $vlanid $vlanname. Будете ли продолжать?" read -p "Продолжить? y/n: " stage1 case "$stage1" in y) true ;; n) echo "До свидания.";exit ;; *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;; esac fi echo echo -e "Откройте ссылку, чтобы ознакомится с примером зон \e[4mhttp://1.2.3.4\e[0m и выберите нужные зоны" echo "Перечислите через запятую нужные зоны." echo "1) Зона 1" echo "2) Зона 2" echo "3) Зона 3" echo "4) Зона 4" echo "5) Зона 5" echo "Для отладки напишите debug, для подробного вывода напишите verbose" echo echo -e "\033[36mПримеры:\e[0m" echo -e "\033[36m1 (прокладка только в пределах Зона 1) \e[0m" echo -e "\033[36m1,4,debug (прокладка по зонам c выводом отладочной информации) \e[0m" echo -e "\033[36m1,2,5 (прокладка только в пределах Зона 1,2,5) \e[0m" echo read -p ": " zones echo "Вы желаете создать VID $vlanid \"$vlanname\" на коммутаторах:" zones2=`echo $zones | tr ',' '\n'` #echo ==zones== $zones while read zone ; do if [[ "$zone" == "debug" ]]; then echo -e "${deb_c1}Вы выбрали режим отладки${deb_c2}"; debug=1; deb_o=""; fi if [[ "$zone" == "verbose" ]]; then echo -e "${deb_c1}Вы выбрали подробный режим [пока не работает]${deb_c2}"; debug=1; deb_o=""; fi if [[ "$zone" == "1" ]]; then echo "Зона 1"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "2" ]]; then echo "Зона 2"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "3" ]]; then echo "Зона 3"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "4" ]]; then echo "Зона 4"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "5" ]]; then echo "Зона 5"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "6" ]]; then echo "Зона 6"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "7" ]]; then echo "Зона 7"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "9" ]]; then echo "Зона 9"; zoneall="$zoneall $zone"; fi if [[ "$zone" == "0" ]]; then echo "Демо-версия"; zoneall="$zoneall $zone"; fi done <<< "$zones2" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== zoneall=\"$zoneall\"${deb_c2}"; fi if ( echo $zoneall | grep -w 2 &>/dev/null ) then if ( ! echo $zoneall | grep -w 1 &>/dev/null ) then echo -e "\033[41m\033[30mВы выбрали \"Зона 2\" Зона 1. Не сделали ли вы ошибку? \e[0m"; echo При выборе зоны \"левый берег/кал.\" нужно также выбирать опорные узлы. fi fi read -p "Все верно? y/n: " stage2 case "$stage2" in y) true ;; n) echo "До свидания.";exit ;; *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;; esac #Заменяем разделитель пробел на перевод строки и удаляем пустую строку zoneall=`echo $zoneall | tr ' ' '\n' | sed '/^$/d'` #stop #stop ############################################################ ########### СОЗДАНИЕ VLAN НА НУЖНЫХ КОММУТАТОРАХ ########### ############################################################ #cat $DEVICES | sed -e '$a\#|#|Add_last_string_for_check_alt_port' | while read LINE || [ -n "$LINE" ] do arr=(`echo $LINE | sed "s/ /_/g" | sed "s/|/ /g"`); zone_switch=${arr[0]}; type=${arr[1]}; ip=${arr[2]}; portlist=${arr[3]};#portlist=(`echo ${arr[3]} | sed "s/,/ /g"`); portcount=`echo ${arr[3]} | awk -F ',' '{print NF}'`; comm=${arr[4]}; unset sw_name #Проверка указанных пользователем зон на соответствие while read chk_z ; do if [[ "$chk_z" == "$zone_switch" ]]; then echo;echo;echo ================================================================================;echo if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Выбранная зона $chk_z найдена в строчке \"$LINE${deb_c2}\""; fi if [ $type == "0" ]; then postfix=Dlink; #read -p "Нажмите enter для продолжения..." s sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g') echo -e "\033[36mПодключение к $postfix $sw_name $ip \e[0m" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/add_vlan-D-link.sh debug_expect $ip $vlanid $vlanname $portlist${deb_c2}"; fi if ( ./sub-scripts/add_vlan-D-link.sh debug_expect $ip $vlanid $vlanname $portlist ) then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m" else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m"; fi elif [ $type == "1" ]; then postfix=Cisco; elif [ $type == "2" ]; then postfix=CiscoNexus; #read -p "Нажмите enter для продолжения..." s ###почему-то не отображает sw_name для CiscoNexus. Поразбираться позже. sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') echo -e "\033[36mПодключение к $postfix $sw_name $ip \e[0m" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/add_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid $vlanname${deb_c2}"; fi if ( ./sub-scripts/add_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid $vlanname ) then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m" else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m"; fi elif [ $type == "3" ]; then postfix=Eltex; #read -p "Нажмите enter для продолжения..." s sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') portlist2=$(echo -e "$portlist" | sed 's/,/ /g') echo -e "\033[36mПодключение к $postfix $sw_name $ip \e[0m" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/add_vlan-Eltex.sh debug_expect $ip $vlanid $vlanname \"$portlist2\"${deb_c2}"; fi if ( ./sub-scripts/add_vlan-Eltex.sh debug_expect $ip $vlanid $vlanname "$portlist2" ) then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m" else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m"; fi fi fi done <<< "$zoneall" done < $DEVICES echo;echo;echo echo -e "\033[45;7mВсе vlan's созданы. Внимательно ознакомтесь с выводом всех комутаторов и убедитесь в отсутствии ошибок\e[0m"; sleep 2;echo echo -e "Ваш выброр: Vlan ID=$vlanid, имя=$vlanname зоны=\033[44;7m$zones\e[0m"; echo -e "Быстрая команда\033[44;7m$0 $vlanid $vlanname\e[0m"; sleep 2;echo read -p "Сохраняем конфигурации коммутаторов? y/n: " stage3 case "$stage3" in y) true ;; n) echo "До свидания.";exit ;; *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;; esac ############################################### ########### СОХРАНЕНИЕ КОНФИГУРАЦИЙ ########### ############################################### while read LINE || [ -n "$LINE" ] do arr=(`echo $LINE | sed "s/ /_/g" | sed "s/|/ /g"`); zone_switch=${arr[0]}; type=${arr[1]}; ip=${arr[2]}; portlist=${arr[3]};#portlist=(`echo ${arr[3]} | sed "s/,/ /g"`); portcount=`echo ${arr[3]} | awk -F ',' '{print NF}'`; comm=${arr[4]}; unset sw_name #Проверка указанных пользователем зон на соответствие while read chk_z ; do if [[ "$chk_z" == "$zone_switch" ]]; then if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Выбранная зона $chk_z найдена в строчке \"$LINE${deb_c2}\""; fi #Пропускать проверенные коммутаторы. if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== ip_save_all=$ip_save_all ${deb_c2}"; fi if ( echo $ip_save_all | grep $ip &>/dev/null ); then if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== IP $ip уже был сохранен ранее, пропускаем ...${deb_c2}"; fi continue fi if [ $type == "0" ]; then postfix=Dlink; sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g') ip_4oct=`echo $ip | awk -F '.' '{print $4}'` echo;echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( snmpset -t 10 -r 0 -v2c -c snmp_community"$ip_4oct" $ip 1.3.6.1.4.1.171.12.1.2.18.4.0 i 4 ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi elif [ $type == "1" ]; then postfix=Cisco; elif [ $type == "2" ]; then postfix=CiscoNexus; sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip${deb_c2}"; fi echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi elif [ $type == "3" ]; then postfix=Eltex; sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( snmpset -t 10 -r 0 -v2c -c $comm $ip 1.3.6.1.4.1.89.87.2.1.3.1 i 1 1.3.6.1.4.1.89.87.2.1.7.1 i 2 1.3.6.1.4.1.89.87.2.1.8.1 i 1 1.3.6.1.4.1.89.87.2.1.12.1 i 3 1.3.6.1.4.1.89.87.2.1.17.1 i 4 ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi fi ip_save_all="$ip_save_all $ip" fi done <<< "$zoneall" done < $DEVICES echo -e "\e[0m"; #Сброс форматирования start-delete-vlan.sh Цитата #!/bin/bash IFS='' debug=0 list_eltex=$(cat /config_eltex) list_dlink_all=$(cat /config_des /config_des3200C1 /config_dgs1100-06ME) list_cisco=$(cat /config_cisco) folder_cfg="/srv/tftp" case "$1" in --help) echo "use $0 VlanID debug";exit ;; -h) echo "use $0 VlanID debug";exit ;; *) ;; esac /usr/bin/renice -n 20 -p $$ > /dev/null cd /usr/libexec/vlans vlanid=$1 #vlanname=$2 if [ "x$2" = "xdebug" ] then debug=1 else debug=0 fi #Цвета для дебага deb_c1="\e[35m" deb_c2="\e[0m" echo -e "Быстрое удаление vlan со всех коммутаторов\e[0m" #удаление временных файлов /usr/bin/find /tmp/manual-delete-vlan* -mmin +60 -delete 2>/dev/null echo -e "\033[44;7mВыгрузить актуальные конфигурации коммутаторов?\e[0m"; read -p "Выгрузить? y/n: " DL_conf case "$DL_conf" in y) echo -e "\033[36m"; ./download_configs.sh; echo -e "[0m" ;; #n) echo "До свидания.";exit ;; *) echo ;; esac if [ "x$1" = "x" ]; then echo -e "\033[44;7mВведите Vlan ID\e[0m"; read -p "Vlan ID: " vlanid fi if [[ "$vlanid" == 55 || "$vlanid" == 7 ]];then echo "Извините, удаление Vlan ID $vlanid запрещено. До свидания.";exit fi #D-link и Cisco Nexus не разрешает испотзование пробелов, однако Элтекс разрешают пробелы и нужно их заменить на _ # из-за этого в дальнейшем придется проверять vlan`ы 2 раза: с пробелами и с "_" #vlanname_orig=$vlanname #vlanname=`echo $vlanname | sed 's/ /_/g'` ### Функция поиска vlan ### search_vid(){ if ( echo $list_vlan_final | grep -w $vlanid &>/dev/null ) then echo -e "\033[33m\nVlan ID $vlanid присутствует на $postfix $sw_name $ip \e[0m" /// $vlanname_current; vlanid_error=true if [ $debug == "1" ] then echo -e "${deb_c1}==DEBUG== Найден VID \c"; echo -e "`echo $list_vlan_final | grep -w $vlanid`${deb_c2}" fi if [[ "$postfix" == "CiscoNexus" ]]; then list_CiscoNexus=`echo -e "$list_CiscoNexus\n$ip"`; fi if [[ "$postfix" == "Eltex" ]]; then list_Eltex=`echo -e "$list_Eltex\n$ip"`; fi if [[ "$postfix" == "Dlink" ]]; then list_Dlink=`echo -e "$list_Dlink\n$ip"`; fi # vender=postfix # list_vender=list_${!vender} # list_vender=list_${!vender} # list_vender=$(echo -e "$list_vender\n$ip") # echo list_vender $list_vender fi } ### Функция очистки переменных ### clear_var(){ unset postfix unset sw_name unset list_vlan unset list_vlan_final unset vlanname_current unset vlanname_current_short } ### Индикатор выполнения ### progress_bar(){ if [ $debug == "0" ]; then echo -e "\033[36m.\e[0m\c"; fi } test(){ echo FUNCTIONNNNNNNNNNNNNNNNNNNNNNNNNNNNNN bash -lc "./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid" } ########################################## ### Обработка коммутаторов Cisco Nexus ### ########################################## while read ip || [ -n "$ip" ] do if (grep -i "hostname MSTP-Nexus" "$folder_cfg"/cisco/"$ip".conf &>/dev/null) then list_cisco_nexus=$(echo -e "$list_cisco_nexus\n$ip") fi done <<< "$list_cisco" list_cisco_nexus=$(echo $list_cisco_nexus | sed '/^$/d') while read ip || [ -n "$ip" ] do postfix=CiscoNexus; sw_name=`grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'` list_vlan=`grep -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | sed 's/vlan //'` list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/\n/,/g') list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" } NR > 1 { print "\n" } NF > 1 { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next } { print $1 }'` vlanname_current=`grep -wEA1 "^vlan $vlanid" "$folder_cfg"/cisco/"$ip".conf | sed ':a;N;$!ba;s/\n//g'` vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'` #list_vlanname_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname_orig" | sed 's/ name //'` #list_vlanname_debug_o=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` #list_vlanname=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -i "name $vlanname" | sed 's/ name //'` #list_vlanname_debug=`grep -A1 -E '^vlan [0-9]+.*$' "$folder_cfg"/cisco/"$ip".conf | grep -iB1 "name $vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short") search_vid clear_var progress_bar done <<< "$list_cisco_nexus" #################################### ### Обработка коммутаторов Eltex ### #################################### while read ip || [ -n "$ip" ] do postfix=Eltex; sw_name=`grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g'` list_vlan=`sed -n '/^vlan database$/,/^exit$/p' "$folder_cfg"/Eltex/"$ip".conf | sed -e'/database/'d -e'/exit/'d | sed 's/ vlan //'` list_vlan=$(echo $list_vlan | sed ':a;N;$!ba;s/ \n/,/g') list_vlan_final=`echo $list_vlan | awk 'BEGIN { RS=","; FS="-"; ORS="" } NR > 1 { print "\n" } NF > 1 { for (i=$1; i<$2; ++i) { print i "\n" } print $2; next } { print $1 }'` vlanname_current=`grep -wA1 "interface vlan $vlanid" "$folder_cfg"/Eltex/"$ip".conf | sed ':a;N;$!ba;s/\n//g'` vlanname_current_short=`echo $vlanname_current | awk -F 'name ' '{print $2}'` #list_vlanname_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -w name | sed 's/ name //' | sed 's/"//g'` #list_vlanname_debug_o=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname_orig" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` #list_vlanname=$list_vlanname_o #list_vlanname_debug=`grep -A1 'interface vlan' "$folder_cfg"/Eltex/"$ip".conf | grep -B1 -w name | grep -B1 -wi "$vlanname" | sed ':a;N;$!ba;s/\n/ \/\/\//g'` if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short") search_vid clear_var progress_bar done <<< "$list_eltex" ##################################### ### Обработка коммутаторов D-link ### ##################################### while read ip || [ -n "$ip" ] do postfix=Dlink; sw_name=`grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g'` list_vlan_final=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 5` vlanname_current=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -w "tag $vlanid"` vlanname_current_short=`echo $vlanname_current | awk -F ' ' '{print $3}'` #list_vlanname=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | cut -d ' ' -f 3` #list_vlanname_debug=`grep -aw "create vlan" "$folder_cfg"/DES/"$ip".conf | grep -wi $vlanname` if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== Проверка $postfix $sw_name $ip ${deb_c2}"; fi list_all_curvlanname=$(echo -e "$list_all_curvlanname\n$vlanname_current_short") search_vid clear_var progress_bar done <<< "$list_dlink_all" echo;echo echo У данного VLAN найдены следующие имена: echo $list_all_curvlanname | sed 's/ $//g' | sort -u | sed '/^$/d' #удаляем пустые строки. list_CiscoNexus=$(echo $list_CiscoNexus | sed '/^$/d');list_Eltex=$(echo $list_Eltex | sed '/^$/d');list_Dlink=$(echo $list_Dlink | sed '/^$/d') if [ $debug == "1" ]; then echo -e "${deb_c1}" echo echo Список list_CiscoNexus echo $list_CiscoNexus echo echo Список list_Eltex echo $list_Eltex echo echo Список list_Dlink echo $list_Dlink echo echo -e "${deb_c2}" fi echo echo -e "\033[43m\033[30mПриступить к удалению VLAN?\e[0m" read -p "y/n: " stage2 case "$stage2" in y) true ;; n) echo "До свидания.";exit ;; *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;; esac ############################################################ ########### УДАЛЕНИЕ VLAN НА КОММУТАТОРАХ ################## ############################################################ #bash -lic "./sub-scripts/del_vlan-Eltex.sh debug_expect 1.2.3.103 200" #exit SUB_SCRIPT="/tmp/manual-delete-vlan$$.sh" echo "#!/bin/bash" > $SUB_SCRIPT echo >> $SUB_SCRIPT echo "cd /usr/libexec/vlans" >> $SUB_SCRIPT chmod +x $SUB_SCRIPT ### Обработка коммутаторов Cisco Nexus ### if [[ -n "$list_CiscoNexus" ]]; then while read ip do if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== echo CiscoNexus $ip ${deb_c2}"; fi sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') # echo -e "\033[36mПодключение к CiscoNexus $sw_name $ip \e[0m" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/del_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid${deb_c2}"; fi # if ( ./sub-scripts/del_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid ) # then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m" # else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m"; # fi echo "./sub-scripts/del_vlan-Cisco-Nexus.sh debug_expect $ip $vlanid" >> $SUB_SCRIPT done <<< "$list_CiscoNexus" fi ### Обработка коммутаторов Eltex ### if [[ -n "$list_Eltex" ]]; then while read ip do if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== echo Eltex $ip ${deb_c2}"; fi sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') # echo -e "\033[36mПодключение к Eltex $sw_name $ip \e[0m" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid${deb_c2}"; fi # if ( ./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid ) # then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m" # else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m"; # fi echo "./sub-scripts/del_vlan-Eltex.sh debug_expect $ip $vlanid" >> $SUB_SCRIPT done <<< "$list_Eltex" fi ### Обработка коммутаторов D-link ### if [[ -n "$list_Dlink" ]]; then while read ip do if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== echo Dlink $ip ${deb_c2}"; fi sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g') # echo -e "\033[36mПодключение к Dlink $sw_name $ip \e[0m" if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/del_vlan-D-link.sh debug_expect $ip $vlanid${deb_c2}"; fi # if ( ./sub-scripts/del_vlan-D-link.sh debug_expect $ip $vlanid ) # then echo -e "\033[42m\033[30mКоманды для $sw_name введены\e[0m" # else echo -e "\033[41m\033[30mВо время работы с коммутатором $ip $sw_name случился сбой\e[0m"; # fi echo "./sub-scripts/del_vlan-D-link.sh debug_expect $ip $vlanid" >> $SUB_SCRIPT done <<< "$list_Dlink" fi #Запуск дочерних скриптов по удалению vlan $SUB_SCRIPT rm $SUB_SCRIPT read -p "Сохраняем конфигурации коммутаторов? y/n: " saving case "$saving" in y) true ;; n) echo "До свидания.";exit ;; *) echo "Извините, нужно ввести \"y\" или \"n\".";exit ;; esac ### Сохранение конфигураций коммутаторов Cisco Nexus ### #if [[ -n "$list_CiscoNexus" ]]; then #while read ip #do #echo Saving CiscoNexus $ip # sw_name=$(grep hostname "$folder_cfg"/cisco/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') # if [ $debug == "1" ]; then echo -e "${deb_c1}==DEBUG== EXECUTE ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip${deb_c2}"; fi # echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" # if ( ./sub-scripts/wr_mem-Cisco-Nexus.sh debug_expect $ip ) # then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" # else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; # fi #done <<< "$list_CiscoNexus" #fi ### Сохранение конфигураций коммутаторов Eltex ### if [[ -n "$list_Eltex" ]]; then while read ip do echo Saving Eltex $ip comm=snmp_community sw_name=$(grep hostname "$folder_cfg"/Eltex/"$ip".conf | sed -e 's/hostname //' -e 's/"//g') echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( snmpset -t 10 -r 0 -v2c -c $comm $ip 1.3.6.1.4.1.89.87.2.1.3.1 i 1 1.3.6.1.4.1.89.87.2.1.7.1 i 2 1.3.6.1.4.1.89.87.2.1.8.1 i 1 1.3.6.1.4.1.89.87.2.1.12.1 i 3 1.3.6.1.4.1.89.87.2.1.17.1 i 4 ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi done <<< "$list_Eltex" fi ### Сохранение конфигураций коммутаторов D-link ### if [[ -n "$list_Dlink" ]]; then while read ip do echo Saving Dlink $ip sw_name=$(grep -a command_prompt "$folder_cfg"/DES/"$ip".conf | sed -e 's/config command_prompt //' -e 's/"//g' -e 's/\r//g') ip_4oct=`echo $ip | awk -F '.' '{print $4}'` echo;echo -e "\033[36m\nСохраняем конфигурацию $postfix $sw_name $ip";echo -e "\e[34m" if ( snmpset -t 10 -r 0 -v2c -c snmp_community"$ip_4oct" $ip 1.3.6.1.4.1.171.12.1.2.18.4.0 i 4 ) then echo -e "\033[42m\033[30mКонфигурация $postfix $sw_name $ip сохранена\e[0m" else echo -e "\033[41m\033[30mОШИБКА!!! Конфигурация $postfix $sw_name $ip не сохранена\e[0m"; fi done <<< "$list_Dlink" fi ##Добавить удаление на коммутатор DGS-1100-06/ME sub-scripts/add_vlan-Cisco-Nexus.sh Цитата #!/usr/bin/expect -f #Enable debug mode exp_internal 0 if {[llength $argv] < 4} { puts "Usage: add_vlan-Cisco-Nexus.sh debug host vlanid vlanname"; puts "Example: add_vlan-Cisco-Nexus.sh debug 1.2.3.0 200 test" exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set vlanid [lindex $argv 2] set vlanname [lindex $argv 3] set user "autologin" set password "password" spawn ssh $user@$host log_user $l_u log_user 0 set timeout 3 expect { "Are you sure you want to continue connecting (yes/no)" { send "yes\n" exp_continue } "Password" { send "$password\n" log_user $l_u # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn ssh $user@$host expect { "Are you sure you want to continue connecting (yes/no)" { send "yes\n" exp_continue } "Password*" { send "$password\n" log_user $l_u # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером log_user 0 expect "#" {send "\n"} #Далее ожидания команд 1 сек достаточно log_user $l_u set timeout 1 expect "#" {send "configure terminal\n"} expect "(config)#" {send "vlan $vlanid\n"} expect "(config-vlan)#" {send "name $vlanname\n"} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "show vlan id $vlanid\n"} expect "#" {send "exit\nexit\n"} expect eof exit 0 sub-scripts/add_vlan-D-link.sh Цитата #!/usr/bin/expect -f #Enable debug mode exp_internal 0 if {[llength $argv] < 5} { puts "Usage: ./add_vlan-D-link.sh debug host vlanid \"vlanname\" \"interfaces\""; puts "Example: ./add_vlan-D-link.sh debug 1.6.3.0 200 test 7,8,9,10" exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set vlanid [lindex $argv 2] set vlanname [lindex $argv 3] set ports [lindex $argv 4] set user "autologin" set password "password" set attempt "1" spawn telnet $host log_user $l_u set timeout 3 expect { "Username:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn telnet $host expect { "Username:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #Проблема с авторизацией "authentication" приходит с задержкой #Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией set timeout 5 expect { "user#" {send "enable admin\n\n"} "authentication" { send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n" exit 10 interact } } #Далее ожидания команд 1 сек достаточно set timeout 1 #При оспользовании команды "create vlan $vlanname tag $vlanid\n" при существующем vlan команда будет отменена #нужно отслеживать дубликат имени. Безопаснее двумя командами создавать VID, а затем добавлять имя. expect "admin#" {send "create vlan vlanid $vlanid\n"} #Если попало в настройки vlan, то все ок. Иначе выйти с ошибкой #expect { ###Если имя уже существует, то vlan не создатся ####VLAN 556: Name new 555 is already used. # "The VLAN already exists" { # send_user "!_!_!_!!!NAME USED EROOR!!!_!_!_!\n" # exit 11 # } # "admin#" {send "\n\n"} #} expect "admin#" {send "config vlan vlanid $vlanid name $vlanname\n"} expect "admin#" {send "config vlan vlanid $vlanid add tagged $ports\n"} expect "admin#" {send "show vlan vlanid $vlanid\n"} #expect "#" {send "exit\nexit\n"} expect "#" {send "logout\n"} expect eof exit 0 sub-scripts/add_vlan-Eltex.sh Цитата #!/usr/bin/expect -f #Enable debug mode exp_internal 0 if {[llength $argv] < 5} { puts "Usage: add_vlan-Eltex.sh debug host vlanid \"vlanname\" \"interfaces\""; puts "Example: add_vlan-Eltex.sh debug 1.2.3.0 200 \"test\" \"106 107\"" exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set vlanid [lindex $argv 2] set vlanname [lindex $argv 3] set interfaces_array [lindex $argv 4] set user "autologin" set password "password" spawn telnet $host log_user $l_u set timeout 1 expect { "User Name:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn telnet $host expect { "User Name:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером #Проблема с авторизацией "authentication failed" приходит с задержкой #Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией log_user 0 set timeout 5 expect { ">" {send "enable\n\n"} "authentication failed" { send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n" exit 10 interact } } #Далее ожидания команд 1 сек достаточно log_user $l_u set timeout 1 expect "#" {send "\n"} expect "#" {send "configure terminal\n"} expect "config" {send "vlan database\n"} expect "config-vlan" {send "vlan $vlanid name $vlanname\n"} #На элтексе если имя дублируется в другом VLAN, то vlan не создается #Важно это отслеживать и выходить с ошибкой expect { #В секции прерывания скрипта при появлении ошибки при создании vlan. Важно выходить с кодом отличным от нуля, т.к. родительский скрипт считывает код ошибки ###Если имя уже существует, то vlan не создатся и скрипт прерывается #Example VLAN 556: Name new 555 is already used. "is already used" { send_user "!_!_!_!!!NAME USED EROOR!!!_!_!_!\n" exit 11 } ###Если проблема при создании vlan, то vlan не создатся и скрипт прерывается #наример номер vlan из выхода из диапазона или название имни превышающее 32 символа #Example % bad parameter value "bad parameter value" { send_user "!_!_!_!!!BAD PARAMETER ERROR!!!_!_!_!\n" exit 12 } # Данная значение нужно для того, чтобы ускорить выполнение, если нет ошиок # Однако по неясной причине "bad parameter value" отображается с некоторой задержкой # для правильного считывания ошибок нижняя строчка закомментирована. При безошибочном выполнении ожидается таймат 1 сек. # "config-vlan" {send "\n\n"} } expect "config-vlan" {send "\n\n"} #Проверка массива foreach int_index $interfaces_array { #send_user "DEBUG Massiv $int_index \n" if { $int_index eq 49 } { set int "gi1/0/1" } if { $int_index eq 50 } { set int "gi1/0/2" } if { $int_index eq 51 } { set int "gi1/0/3" } if { $int_index eq 52 } { set int "gi1/0/4" } if { $int_index eq 53 } { set int "gi1/0/5" } if { $int_index eq 54 } { set int "gi1/0/6" } if { $int_index eq 55 } { set int "gi1/0/7" } if { $int_index eq 56 } { set int "gi1/0/8" } if { $int_index eq 57 } { set int "gi1/0/9" } if { $int_index eq 58 } { set int "gi1/0/10" } if { $int_index eq 59 } { set int "gi1/0/11" } if { $int_index eq 60 } { set int "gi1/0/12" } if { $int_index eq 61 } { set int "gi1/0/13" } if { $int_index eq 62 } { set int "gi1/0/14" } if { $int_index eq 63 } { set int "gi1/0/15" } if { $int_index eq 64 } { set int "gi1/0/16" } if { $int_index eq 65 } { set int "gi1/0/17" } if { $int_index eq 66 } { set int "gi1/0/18" } if { $int_index eq 67 } { set int "gi1/0/19" } if { $int_index eq 68 } { set int "gi1/0/20" } if { $int_index eq 69 } { set int "gi1/0/21" } if { $int_index eq 70 } { set int "gi1/0/22" } if { $int_index eq 71 } { set int "gi1/0/23" } if { $int_index eq 72 } { set int "gi1/0/24" } if { $int_index eq 105 } { set int "te1/0/1" } if { $int_index eq 106 } { set int "te1/0/2" } if { $int_index eq 107 } { set int "te1/0/3" } if { $int_index eq 108 } { set int "te1/0/4" } #expect "#" {send "configure terminal\n"} expect "config" {send "interface $int\n"} expect "config-if" {send "switchport trunk allowed vlan add $vlanid\n"} #send_user "DEBUG Massiv $int_index $int \n" } #expect "#" {send "exit\nexit\n"} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "show vlan tag $vlanid\n"} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "exit\nexit\n"} expect eof exit 0 sub-scripts/del_vlan-Cisco-Nexus.sh Цитата #!/usr/bin/expect -f #Enable debug mode exp_internal 0 if {[llength $argv] < 3} { puts "Usage: del_vlan-Cisco-Nexus.sh debug host vlanid"; puts "Example: del_vlan-Cisco-Nexus.sh debug 1.2.3.0 200" exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set vlanid [lindex $argv 2] set user "autologin" set password "password" spawn ssh $user@$host log_user $l_u log_user 0 set timeout 3 expect { "Are you sure you want to continue connecting (yes/no)" { send "yes\n" exp_continue } "Password" { send "$password\n" log_user $l_u # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn ssh $user@$host expect { "Are you sure you want to continue connecting (yes/no)" { send "yes\n" exp_continue } "Password*" { send "$password\n" log_user $l_u # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером log_user 0 expect "#" {send "\n"} #Далее ожидания команд 1 сек достаточно log_user $l_u set timeout 1 expect "#" {send "show vlan id $vlanid\n"};sleep 1 expect "#" {send "show mac address-table vlan $vlanid\n"};sleep 1 #Если в список MAC адресов настолько большой, что предлагается постраничный вывод списка, то для безопасности срипт завершает работу и прерывается с ошибкой #Возможно это рабочий vlan и произошла какая-то ошибка #Для удаления vlan не должно быть много MAC адресов expect { "More" { puts "\n\n!_!_!_!!!Dangerous!!! Script exiting... there are a lot of mac addresses. For what reason are there many mac addresses?!!!_!_!_!\n"; exit 1 } "a8:f9:4b" { puts "\n!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!\n" } } expect "#" {send "configure terminal\n"} send_user "\n---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---\n\nWHEN FINISHED, TYPE \"!!!\" FOR RETURN\n\n" expect "(config)#" {send "no vlan $vlanid==="; interact -o "!!!" return}; send "\n" expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "show vlan id $vlanid\n"} expect "#" {send "exit\nexit\n"} ############ ### Сделать проверку неуспешного удаления vlan ############ expect eof exit 0 sub-scripts/del_vlan-D-link.sh Цитата #!/usr/bin/expect -f #Enable debug mode exp_internal 0 if {[llength $argv] < 3} { puts "Usage: ./del_vlan-D-link.sh debug host vlanid"; puts "Example: ./del_vlan-D-link.sh debug 172.16.0.0 200"; exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set vlanid [lindex $argv 2] set vlanname [lindex $argv 3] set ports [lindex $argv 4] set user "autologin" set password "password" set attempt "1" spawn telnet $host log_user $l_u set timeout 3 expect { "Username:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn telnet $host expect { "Username:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #Проблема с авторизацией "authentication" приходит с задержкой #Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией set timeout 5 expect { "user#" {send "enable admin\n\n"} "authentication" { send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n" exit 10 interact } } #Далее ожидания команд 1 сек достаточно set timeout 1 expect "admin#" {send "show vlan vlanid $vlanid\n"} expect "admin#" {send "show fdb vlanid $vlanid\n"} # Для исправления вводятся пробелы. Может есть другой способ исправить? ############ ### D-link выводит с задержкой сообщения. ### Перевод строки не помогает. ### Как это исправить? ############ expect "*" {send "\n"} expect "*" {send "\n"} expect "*" {send "\n"} send_user "\n---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---\n\nWHEN FINISHED, TYPE \"!!!\" FOR RETURN\n\n" send_user "Backspace - CTRL+H\n\n" expect "admin#" {send "delete vlan vlanid $vlanid==="; interact -o "!!!" return}; send "\n" expect "admin#" {send "show vlan vlanid $vlanid\n"} expect "admin#" {send "logout\n"} ############ ### Сделать проверку неуспешного удаления vlan ############ expect eof exit 0 sub-scripts/del_vlan-Eltex.sh Цитата #!/usr/bin/expect -f #Enable debug mode exp_internal 0 if {[llength $argv] < 3} { puts "Usage: del_vlan-Eltex.sh debug host vlanid"; puts "Example: del_vlan-Eltex.sh debug 1.2.3.0 200" exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set vlanid [lindex $argv 2] set user "autologin" set password "password" spawn telnet $host log_user $l_u set timeout 3 expect { "User Name:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn telnet $host expect { "User Name:" { send "$user\n" exp_continue } "Password*" { send "$password\n" # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером #Проблема с авторизацией "authentication failed" приходит с задержкой #Увеличиваем таймаут, чтобы не пропустить важную ошибку с авторизацией log_user 0 set timeout 5 expect { ">" {send "enable\n\n"} "authentication failed" { send_user "!_!_!_!!!INVALID LOGIN/PASSWORD!!!_!_!_!\n" exit 10 interact } } #Далее ожидания команд 1 сек достаточно log_user $l_u set timeout 1 expect "#" {send "show vlan tag $vlanid\n"};sleep 1 expect "#" {send "show mac address-table vlan $vlanid\n"};sleep 1 #Если в список MAC адресов настолько большой, что предлагается постраничный вывод списка, то для безопасности срипт завершает работу и прерывается с ошибкой #Возможно это рабочий vlan и произошла какая-то ошибка #Для удаления vlan не должно быть много MAC адресов expect { "More" { puts "\n\n!_!_!_!!!Dangerous!!! Script exiting... there are a lot of mac addresses. For what reason are there many mac addresses?!!!_!_!_!\n"; exit 1 } "a8:f9:4b" { puts "\n!_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_!\n" } } expect "#" {send "configure terminal\n"} send_user "\n---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===---\n\nWHEN FINISHED, TYPE \"!!!\" FOR RETURN\n\n" expect "config" {send "no vlan $vlanid==="; interact -o "!!!" return}; send "\n" #expect "config" {send "no vlan $vlanid==="; interact} expect "#" {send "\u001A"} expect "#" {send "\u001A"} expect "#" {send "show vlan tag $vlanid\n"} expect "#" {send "exit\nexit\n"} ############ ### Надо ли сделать проверку неуспешного удаления vlan ??? ### Надо ли сделать проверку отсутствия vlan ??? ############ #expect "config" {interact +++ return} #expect "config" {send "vlan database\n"} #expect "config-vlan" {send "vlan $vlanid name $vlanname\n"} #На элтексе если имя дублируется в другом VLAN, то vlan не создается #Важно это отслеживать и выходить с ошибкой #expect { ###Если имя уже существует, то vlan не создатся #Example VLAN 556: Name new 555 is already used. # "is already used" { # send_user "!_!_!_!!!NAME USED EROOR!!!_!_!_!\n" # exit 11 # } # "config-vlan" {send "\n\n"} #} #expect "#" {send "exit\nexit\n"} expect eof exit 0 sub-scripts/wr_mem-Cisco-Nexus.sh Цитата #!/usr/bin/expect -f exp_internal 0 if {[llength $argv] < 2} { puts "Usage: add_vlan-Cisco-Nexus.sh debug host"; puts "Example: add_vlan-Cisco-Nexus.sh debug 1.2.3.0" exit 1; } set l_u "1" set debug [lindex $argv 0] set host [lindex $argv 1] set user "autologin" set password "password" spawn ssh $user@$host log_user $l_u log_user 0 set timeout 3 expect { "Are you sure you want to continue connecting (yes/no)" { send "yes\n" exp_continue } "Password" { send "$password\n" log_user $l_u # exp_continue } timeout { puts "Timed out...Attempt 2" set timeout 6 spawn ssh $user@$host expect { "Are you sure you want to continue connecting (yes/no)" { send "yes\n" exp_continue } "Password*" { send "$password\n" log_user $l_u # exp_continue } timeout { puts "!_!_!_!!!Timed out!!!_!_!_!"; exit 1 } } } } #выключаем на время вывод терминала, чтобы не заграмождать экран приветствия баннером log_user 0 expect "#" {send "\n"} #Далее ожидания команд 5 сек достаточно log_user $l_u expect "#" {send "copy running-config startup-config\n"} set timeout 7 expect "Copy complete" {send "\n"} expect "#" {send "exit\n"} expect eof exit 0 Технические аспекты Элтекс MES Цитата Тема: [](Ethernet Switches MES23xx) Запрос с сайта Контактное лицо: Ответственный сотрудник: Комментарий: Обсудили вопрос по телефону. Вариантов автоматизации настроек vlan всего 3: 1. snmp 2. gvrp 3. при помощи скриптов В документе «MES_configuration_and_monitoring_via_SNMP_4.0.16.5.pdf» есть возможность создавать vlanы по snmp запросу. Способ основывается на низкоуровневом формате битовых масок. Каждый snmp запрос распространяется на свою группу vlan 1-1024. Всего 4 группы. Запрос должен учитывать уже созданные vlan’ы. При ошибке в маске можно случайно удалить действующие vlan’ы. Способ очень сложный и опасный, т.к. можно задеть остальные vlan’ы. С помощью snmp запроса нельзя присваивать имя для vlan. В будущую версию документации внесём пометку о том,что при добавлении нового vlan к уже имеющимся во vlan database нужно учитывать их битовую маску - конечный результат требуется вводить в виде битовой маски, состоящей из результата выполнения дизъюнкции (логическое "или") битовых масок. » Snmp (не подходит, метод Элтекс с битовыми масками сложен и опасный, т.к. возможно удаление других vlan). В документе «MES_configuration_and_monitoring_via_SNMP_4.0.16.5.pdf» есть возможность создавать vlanы по snmp запросу. Способ основывается на низкоуровневом формате битовых масок. Каждый snmp запрос распространяется на свою группу vlan 1-1024. Всего 4 группы. Запрос должен учитывать уже созданные vlan’ы. При ошибке в маске можно случайно удалить действующие vlan’ы. Способ очень сложный и опасный, т.к. можно задеть остальные vlan’ы. С помощью snmp запроса нельзя присваивать имя для vlan. Gvrp (не подходит, сложная топология сети и разношерстное оборудование (Cisco, D-link) . Ранее уже был отрицательный опыт построения GVRP на D-link, реализованной на D-link. От этой технологии отказались в пользу статических VLAN из-за нестабильной работы GVRP при перестроении колец.) при помощи скриптов (Единственно возможный вариант) Выбран способ автоматизации telnet при помощи утилиты expect. Баг на MES если имя дублируется. Обнаружен баг в создании vlan, если имя дублируется. В таком случае vlan удаляется. Цитата Здравствуйте, уважаемые разработчики. Если во время создания vlan случайно указать имя (vlanname) vlan другого уже созданного vlan, то а) если создаваемый vlan отсутствует, то он не создастся (на самом деле он создастся и удалится) б) но если он существует (без имени или с другим именем), то он полностью УДАЛИТСЯ!!!!!!!! Команда "no vlan <2-4094>" при этом не вводилась. У нас на оборудовании много неподписанных vlan. Если во время актуализации при указании имени я случайно укажу имя другого существующего vlan, то мой vlan без имени полностью удалиться. name 4#sh vlan ... 444 test_vlan4 te1/0/1-4 S 555 test_vlan5 te1/0/1-4 S ... S name 4#conf t name 4(config)#vlan database name 4(config-vlan)#vlan 555 name test_vlan4 VLAN 555: Name test_vlan4 is already used. ##########VLAN 555 уничтожился глобально и исчез со всех портов!!!!!!!!!!!!!!!!!!!!!######### name 4(config-vlan)#do sh vlan tag 555 ПУСТО!!!!!!!!!!!!!!!!! name 4#sh system System Description: MES2324 AC 28-port 1G/10G Managed Switch name 4#sh version Active-image: flash://system/images/mes3300-4016-R2.ros Version: 4.0.16 Commit: 30fac121 Build: 2 (master) MD5 Digest: f85bf8ad2b9e899cf2988752fa1feca9 Date: 13-Apr-2021 Time: 11:42:37 D-link У D-link есть удобный способ по SNMP Цитата snmpset -v2c -c ReadWriteSwitch148 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1.1.500 s new_vlan .1.3.6.1.2.1.17.7.1.4.3.1.2.500 x 00C0000000000000 .1.3.6.1.2.1.17.7.1.4.3.1.5.500 i 4;echo $? snmpset -v2c -c ReadWriteSwitch148 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1.1.500 s newvlan .1.3.6.1.2.1.17.7.1.4.3.1.2.500 x fffffff000000000 .1.3.6.1.2.1.17.7.1.4.3.1.4.500 x 0000000000000000 .1.3.6.1.2.1.17.7.1.4.3.1.5.500 i 4 snmpwalk -v2c -c energy -On 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1 denis@ubuntu:~$ snmpwalk -v2c -c energy -On 172.16.0.148 .1.3.6.1.2.1.17.7.1.4.3.1 | grep 2088 .1.3.6.1.2.1.17.7.1.4.3.1.1.2088 = STRING: "Televizornaya1_1" .1.3.6.1.2.1.17.7.1.4.3.1.2.2088 = Hex-STRING: C1 C0 00 00 00 00 00 00 .1.3.6.1.2.1.17.7.1.4.3.1.3.2088 = Hex-STRING: 00 00 00 00 00 00 00 00 .1.3.6.1.2.1.17.7.1.4.3.1.4.2088 = Hex-STRING: C0 00 00 00 00 00 00 00 .1.3.6.1.2.1.17.7.1.4.3.1.5.2088 = INTEGER: 1 C1 C0 11000001 11000000 3.1.2.VID - tag 3.1.3.VID - fob (запрещенный) 3.1.4.VID - unt 3.1.5.VID - задача Указание только 3.1.2.VID создает по-умолчанию тегированный порт. Если дополнительно указать 3.1.4.VID, то перечисленные порт(ы) станут нетегируемыми задача: 1 изменение 4 создание 6 удаление D-link Создание VLAN по SNMP D-link Чтение информации о VLAN по SNMP D-link Сохранение конфигурации коммутаторов по SNMP Все очень удобно и работает прекрасно пока новый vlan отсутствует на оборудовании. Однако, если же на каком-то коммутаторе vlan уже существует, то возникает проблема. Очень сложно автоматизировать процесс добавления магистральных портов. Требуется предварительный анализ текущих настроек, чтобы не удалить другие порты. Из-за сложности автоматизации этого процесса способ «snmp» не рассматривается. Выбран способ автоматизации telnet при помощи утилиты expect. Cisco Nexus Пока не найден OID How To Add, Modify, and Remove VLANs on a Catalyst Using SNMP Ссылки Ultimate Guide to VLAN Configuration and Management + Best Tools VLAN Configuration and Troubleshooting [MES] SNMP. Как на коммутаторе MES добавить порты в VLAN? SNMP mes 2324f и VLAN SNMP OID Vlan Управление vlan на cisco через snmp D-link Создание у управление VLAN по SNMP Как управлять вланами по snmp на свичах доступа ? DES-1210-28/ME - Проблемма с созданием VLAN'а через SNMP Управление vlan на cisco через snmp Изменено 27 марта, 2023 пользователем neperpbl3 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
VolanD666 Опубликовано 20 марта, 2023 · Жалоба Зачем это все если есть ансибл? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
neperpbl3 Опубликовано 21 марта, 2023 (изменено) · Жалоба Результат вывода ./check_settings.sh Цитата ./check_settings.sh 3456 Проверка vlan Vlan ID 3456 создан на CiscoNexus Nexus-Switch_name 192.168.0.4 /// vlan 3456 name NAMEEEE . Vlan ID 3456 создан на CiscoNexus Nexus-Switch_name 192.168.0.5 /// vlan 3456 name NAMEEEE . Vlan ID 3456 создан на CiscoNexus Nexus-Switch_name 192.168.0.6 /// vlan 3456 name NAMEEEE ........ Vlan ID 3456 создан на Eltex Switch_name 192.168.0.64 /// interface vlan 3456 name NAMEEEE ..... Vlan ID 3456 создан на Eltex Switch_name 192.168.0.73 /// interface vlan 3456 name NAMEEEE ... Vlan ID 3456 создан на Eltex Switch_name 192.168.0.8 /// interface vlan 3456 name NAMEEEE . Vlan ID 3456 создан на Eltex Switch_name 192.168.0.81 /// interface vlan 3456 name NAMEEEE ... Vlan ID 3456 создан на Eltex Switch_name 192.168.0.85 /// interface vlan 3456 name NAMEEEE .. Vlan ID 3456 создан на Eltex Switch_name 192.168.0.87 /// interface vlan 3456 name NAMEEEE ... Vlan ID 3456 создан на Eltex Switch_name 192.168.0.92 /// interface vlan 3456 name NAMEEEE . Vlan ID 3456 создан на Eltex Switch_name 192.168.0.94 /// interface vlan 3456 name NAMEEEE ................................................................................................... Обнаружены следующие имена: NAMEEEE Цитата ./check_settings.sh 2345 .......... Vlan ID 2345 создан на Eltex Switch_name 192.168.0.104 /// interface vlan 2345 name NAMEEEE22 .............................................................................................. Vlan ID 2345 создан на Eltex Switch_name 192.168.0.94 /// interface vlan 2345 name NAMEEEE22 ................................................................................................... Обнаружены следующие имена: NAMEEEE22 Результат вывода ./sstart-add-vlan.sh Цитата ./start-add-vlan.sh 555 Быстрое создание vlan Далее нужно создать описание vlan'a Укажите кратко все точки включения и индивидуальные особенности. Не указывайте Vlan ID. Максимально 32 символа. Введите название vlan'a Vlan name: testing Вы выбрали Vlan ID=555, имя=testing Проводится анализ на наличие Vlan ID 555 коммутаторов ................................................... Перечислите через запятую нужные зоны. 1) Зона 1 2) Зона 2 3) Зона 3 Для отладки напишите debug, для подробного вывода напишите verbose Примеры: 1 (Зона 1) 1,2 (Зона 1,2) : 1 Вы желаете создать VID 555 "testing" на коммутаторах: Зона 1 Все верно? y/n: y ================================================================================ Подключение к CiscoNexus Nexus-hostname 192.168.0.88 spawn ssh autologin@192.168.0.88 Nexus-hostname# configure terminal Enter configuration commands, one per line. End with CNTL/Z. Nexus-hostname(config)# vlan 555 Nexus-hostname(config-vlan)# name testing Nexus-hostname(config-vlan)# Nexus-hostname# Nexus-hostname# show vlan id 555 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 555 testing active Po1, Eth1/1, Eth1/2, Eth1/11 Eth1/44, Eth1/45, Eth1/46 Eth1/47, Eth1/48 VLAN Type Vlan-mode ---- ----- ---------- 555 enet CE Remote SPAN VLAN ---------------- Disabled Primary Secondary Type Ports ------- --------- --------------- ------------------------------------------- Nexus-hostname# exit Connection to 192.168.0.88 closed. Команды для Nexus-hostname введены ================================================================================ Подключение к Eltex hostname 192.168.0.105 spawn telnet 192.168.0.105 Trying 192.168.0.105... Connected to 192.168.0.105. Escape character is '^]'. User Name:autologin Password:enable hostname#21-Mar-2023 17:10:26 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.105, none ACCEPTED. hostname#configure terminal hostname(config)#vlan database hostname(config-vlan)#vlan 555 name testing hostname(config-vlan)# hostname(config-vlan)#interface te1/0/2 hostname(config-if)#switchport trunk allowed vlan add 555 hostname(config-if)#21-Mar-2023 17:10:28 %LINK-I-Up: Vlan 555 interface te1/0/3 hostname(config-if)#switchport trunk allowed vlan add 555 hostname(config-if)# hostname# hostname# hostname# hostname# hostname# hostname#eConnection closed by foreign host. Команды для hostname введены ================================================================================ Подключение к CiscoNexus Nexus-hostname 192.168.0.5 spawn ssh autologin@192.168.0.5 Nexus-hostname# configure terminal Enter configuration commands, one per line. End with CNTL/Z. Nexus-hostname(config)# vlan 555 Nexus-hostname(config-vlan)# name testing Nexus-hostname(config-vlan)# Nexus-hostname# Nexus-hostname# show vlan id 555 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 555 testing active Eth1/1, Eth1/39, Eth1/42 Eth1/43, Eth1/46, Eth1/47 Eth1/48 VLAN Type Vlan-mode ---- ----- ---------- 555 enet CE Remote SPAN VLAN ---------------- Disabled Primary Secondary Type Ports ------- --------- --------------- ------------------------------------------- Nexus-hostname# exit Connection to 192.168.0.5 closed. Команды для Nexus-hostname введены ================================================================================ Подключение к Eltex hostname 192.168.0.9 spawn telnet 192.168.0.9 Trying 192.168.0.9... Connected to 192.168.0.9. Escape character is '^]'. User Name:aTimed out...Attempt 2 spawn telnet 192.168.0.9 Trying 192.168.0.9... Connected to 192.168.0.9. Escape character is '^]'. User Name:autologin Password:enable hostname#21-Mar-2023 17:10:05 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.9, none ACCEPTED. hostname#configure terminal hostname(config)#vlan database hostname(config-vlan)#vlan 555 name testing hostname(config-vlan)# hostname(config-vlan)#interface te1/0/2 hostname(config-if)#switchport trunk allowed vlan add 555 hostname(config-if)#21-Mar-2023 17:10:06 %LINK-I-Up: Vlan 555 interface te1/0/3 hostname(config-if)#switchport trunk allowed vlan add 555 hostname(config-if)# hostname# hostname# hostname# hostname#show vlan tag 555 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 555 testing te1/0/2-3 S hostname# hostname# hostname#eConnection closed by foreign host. Команды для hostname введены ================================================================================ Подключение к Eltex hostname 192.168.0.34 spawn telnet 192.168.0.34 Trying 192.168.0.34... Connected to 192.168.0.34. Escape character is '^]'. User Name:autologin Password:enable hostname#21-Mar-2023 17:09:01 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.34, none ACCEPTED. hostname#configure terminal hostname(config)#vlan database hostname(config-vlan)#vlan 555 name testing hostname(config-vlan)# hostname(config-vlan)#interface te1/0/3 hostname(config-if)#switchport trunk allowed vlan add 555 hostname(config-if)#21-Mar-2023 17:09:03 %LINK-I-Up: Vlan 555 interface te1/0/4 hostname(config-if)#switchport trunk allowed vlan add 555 hostname(config-if)# hostname# hostname# hostname# hostname#show vlan tag 555 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 555 testing te1/0/3-4 S hostname# hostname# hostname# hostname#eConnection closed by foreign host. Команды для hostname введены Все vlan's созданы. Внимательно ознакомтесь с выводом всех комутаторов и убедитесь в отсутствии ошибок Ваш выброр: Vlan ID=555, имя=testing зоны=1 Быстрая команда./start-add-vlan.sh 555 testing Сохраняем конфигурации коммутаторов? y/n: y Сохраняем конфигурацию CiscoNexus Nexus-hostname 192.168.0.88 spawn ssh autologin@192.168.0.88 Nexus-hostname# copy running-config startup-config [########################################] 100% Copy complete, now saving to disk (please wait)... Copy complete. Nexus-hostname# Nexus-hostname# exit Connection to 192.168.0.88 closed. Конфигурация CiscoNexus Nexus-hostname 192.168.0.88 сохранена Сохраняем конфигурацию Eltex hostname 192.168.0.105 iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2 iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3 iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4 Конфигурация Eltex hostname 192.168.0.105 сохранена Сохраняем конфигурацию CiscoNexus Nexus-hostname 192.168.0.5 spawn ssh autologin@192.168.0.5 Nexus-hostname# copy running-config startup-config [########################################] 100% Copy complete, now saving to disk (please wait)... Copy complete. Nexus-hostname# Nexus-hostname# exit Connection to 192.168.0.5 closed. Конфигурация CiscoNexus Nexus-hostname 192.168.0.5 сохранена Сохраняем конфигурацию Eltex hostname 192.168.0.9 iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2 iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3 iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4 Конфигурация Eltex hostname 192.168.0.9 сохранена Сохраняем конфигурацию Eltex hostname 192.168.0.34 iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2 iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3 iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4 Конфигурация Eltex hostname 192.168.0.34 сохранена root@nagios:/usr/libexec/vlans# Результат вывода ./start-delete-vlan.sh Цитата ./start-delete-vlan.sh 3456 Быстрое удаление vlan со всех коммутаторов Выгрузить актуальные конфигурации коммутаторов? Выгрузить? y/n: n ........ Vlan ID 3456 создан на Eltex switch_name 192.168.0.104 /// interface vlan 3456 name NAMEE . Vlan ID 3456 создан на Eltex switch_name 192.168.0.105 /// ........ Vlan ID 3456 создан на Eltex switch_name 192.168.0.120 /// interface vlan 3456 name NAMEE . Vlan ID 3456 создан на Eltex switch_name 192.168.0.121 /// interface vlan 3456 name NAMEE ........................... Vlan ID 3456 создан на Eltex switch_name 192.168.0.178 /// interface vlan 3456 name NAMEE ................ Vlan ID 3456 создан на Eltex switch_name 192.168.0.31 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 создан на Eltex switch_name 192.168.0.34 /// interface vlan 3456 name NAMEE ......... Vlan ID 3456 создан на Eltex switch_name 192.168.0.47 /// interface vlan 3456 name NAMEE .. Vlan ID 3456 создан на Eltex switch_name 192.168.0.49 /// interface vlan 3456 name NAMEE ......... Vlan ID 3456 создан на Eltex switch_name 192.168.0.64 /// interface vlan 3456 name NAMEE ..... Vlan ID 3456 создан на Eltex switch_name 192.168.0.73 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 создан на Eltex switch_name 192.168.0.8 /// interface vlan 3456 name NAMEE . Vlan ID 3456 создан на Eltex switch_name 192.168.0.81 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 создан на Eltex switch_name 192.168.0.85 /// interface vlan 3456 name NAMEE .. Vlan ID 3456 создан на Eltex switch_name 192.168.0.87 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 создан на Eltex switch_name /// interface vlan 3456 name NAMEE . Vlan ID 3456 создан на Eltex switch_name 192.168.0.94 /// interface vlan 3456 name NAMEE ................................................................................................... Обнаружены следующие имена: NAMEE ./check_settings.sh 2345 Проверка vlan .......... Vlan ID 2345 создан на Eltex switch_name 192.168.0.104 /// interface vlan 2345 name NAMEE .............................................................................................. Vlan ID 2345 создан на Eltex switch_name 192.168.0.94 /// interface vlan 2345 name NAMEE ................................................................................................... Обнаружены следующие имена: NAMEE ^C ^C ^C ^C ^C ^C ^C ^C ./start-delete-vlan.sh 3456 Быстрое удаление vlan со всех коммутаторов Выгрузить актуальные конфигурации коммутаторов? Выгрузить? y/n: n Vlan ID 3456 присутствует на CiscoNexus Nexus-name 192.168.0.4 /// vlan 3456 name NAMEE . Vlan ID 3456 присутствует на CiscoNexus Nexus-name 192.168.0.5 /// vlan 3456 name NAMEE . Vlan ID 3456 присутствует на CiscoNexus Nexus-name 192.168.0.6 /// vlan 3456 name NAMEE ........ Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.104 /// interface vlan 3456 name NAMEE . Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.105 /// ........ Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.120 /// interface vlan 3456 name NAMEE . Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.121 /// interface vlan 3456 name NAMEE ........................... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.178 /// interface vlan 3456 name NAMEE ................ Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.31 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.34 /// interface vlan 3456 name NAMEE ......... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.47 /// interface vlan 3456 name NAMEE .. Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.49 /// interface vlan 3456 name NAMEE ......... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.64 /// interface vlan 3456 name NAMEE ..... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.73 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.8 /// interface vlan 3456 name NAMEE . Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.81 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.85 /// interface vlan 3456 name NAMEE .. Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.87 /// interface vlan 3456 name NAMEE ... Vlan ID 3456 присутствует на Eltex switch_name /// interface vlan 3456 name NAMEE . Vlan ID 3456 присутствует на Eltex switch_name 192.168.0.94 /// interface vlan 3456 name NAMEE ................................................................................................... У данного VLAN найдены следующие имена: NAMEE Приступить к удалению VLAN? y/n: y spawn ssh autologin@192.168.0.4 Nexus-name# show vlan id 3456 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 3456 NAMEE active Po1, Eth1/1, Eth1/2, Eth1/11 Eth1/44, Eth1/45, Eth1/46 Eth1/47, Eth1/48 VLAN Type Vlan-mode ---- ----- ---------- 3456 enet CE Remote SPAN VLAN ---------------- Disabled Primary Secondary Type Ports ------- --------- --------------- ------------------------------------------- Nexus-name# show mac address-table vlan 3456 Legend: * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC age - seconds since last seen,+ - primary entry using vPC Peer-Link, (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan VLAN MAC Address Type age Secure NTFY Ports ---------+-----------------+--------+---------+------+----+------------------ * 3456 00a6.caea.ebff dynamic 0 F F Eth1/48 Nexus-name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal Enter configuration commands, one per line. End with CNTL/Z. Nexus-name(config)# no vlan 3456 Nexus-name(config)# Nexus-name(config)# Nexus-name# Nexus-name# show vlan id 3456 VLAN 3456 not found in current VLAN database Nexus-name# exit Connection to 192.168.0.4 closed. spawn ssh autologin@192.168.0.5 Nexus-name# show vlan id 3456 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 3456 NAMEE active Eth1/1, Eth1/39, Eth1/42 Eth1/43, Eth1/45, Eth1/46 Eth1/47, Eth1/48 VLAN Type Vlan-mode ---- ----- ---------- 3456 enet CE Remote SPAN VLAN ---------------- Disabled Primary Secondary Type Ports ------- --------- --------------- ------------------------------------------- Nexus-name# show mac address-table vlan 3456 Legend: * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC age - seconds since last seen,+ - primary entry using vPC Peer-Link, (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan VLAN MAC Address Type age Secure NTFY Ports ---------+-----------------+--------+---------+------+----+------------------ * 3456 00a6.caea.ebff dynamic 0 F F Eth1/1 Nexus-name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal Enter configuration commands, one per line. End with CNTL/Z. Nexus-name(config)# no vlan 3456 Nexus-name(config)# Nexus-name(config)# Nexus-name# Nexus-name# show vlan id 3456 VLAN 3456 not found in current VLAN database Nexus-name# exit Connection to 192.168.0.5 closed. spawn ssh autologin@192.168.0.6 Nexus-name# show vlan id 3456 VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 3456 NAMEE active Eth1/1, Eth1/44, Eth1/46 Eth1/47, Eth1/48 VLAN Type Vlan-mode ---- ----- ---------- 3456 enet CE Remote SPAN VLAN ---------------- Disabled Primary Secondary Type Ports ------- --------- --------------- ------------------------------------------- Nexus-name# show mac address-table vlan 3456 Legend: * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC age - seconds since last seen,+ - primary entry using vPC Peer-Link, (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan VLAN MAC Address Type age Secure NTFY Ports ---------+-----------------+--------+---------+------+----+------------------ * 3456 00a6.caea.ebff dynamic 0 F F Eth1/48 Nexus-name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal Enter configuration commands, one per line. End with CNTL/Z. Nexus-name(config)# no vlan 3456 Nexus-name(config)# Nexus-name(config)# Nexus-name# Nexus-name# show vlan id 3456 VLAN 3456 not found in current VLAN database Nexus-name# exit Connection to 192.168.0.6 closed. spawn telnet 192.168.0.104 Trying 192.168.0.104... Connected to 192.168.0.104. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:01:33 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.104, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 name gi1/0/9,gi1/0/24, S name te1/0/4 switch_name#show mac address-table vlan 3456 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff gi1/0/9 dynamic switch_name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456 switch_name(config)#21-Mar-2023 13:01:40 %LINK-W-Down: Vlan 3456 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#spawn telnet 192.168.0.105 Trying 192.168.0.105... Connected to 192.168.0.105. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:04:34 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.105, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 - te1/0/2-4 S switch_name#show mac address-table vlan 3456 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff te1/0/2 dynamic switch_name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456 switch_name(config)# switch_name# switch_name#show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#spawn telnet 192.168.0.120 Trying 192.168.0.120... Connected to 192.168.0.120. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:05:41 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.120, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 name gi1/0/24,te1/0/4 S name switch_name#show mac address-table vlan 3456 Flags: I - Internal usage VLAN Aging time is 300 sec Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff te1/0/4 dynamic switch_name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#eConnection closed by foreign host. spawn telnet 192.168.0.121 Trying 192.168.0.121... Connected to 192.168.0.121. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:06:37 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.121, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 name te1/0/1-3 S name switch_name#show mac address-table vlan 3456 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff te1/0/1 dynamic 3456 e4:5a:d4:7a:cf:5c te1/0/1 dynamic switch_name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#eConnection closed by foreign host. spawn telnet 192.168.0.178 Trying 192.168.0.178... Connected to 192.168.0.178. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:06:54 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.178, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 name te1/0/1-4 S name switch_name#show mac address-table vlan 3456 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff te1/0/4 dynamic 3456 a8:f9:4b:30:bd:9a te1/0/4 dynamic 3456 a8:f9:4b:30:e6:dc te1/0/4 dynamic 3456 e4:5a:d4:7a:cf:5c te1/0/4 dynamic switch_name# !_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_! ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#spawn telnet 192.168.0.31 Trying 192.168.0.31... Connected to 192.168.0.31. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:06:44 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.31, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 name te1/0/3-4 S name switch_name#show mac address-table vlan 3456 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff te1/0/4 dynamic 3456 a8:f9:4b:30:12:59 te1/0/4 dynamic 3456 a8:f9:4b:30:bd:9a te1/0/4 dynamic 3456 a8:f9:4b:ff:4a:5b te1/0/4 dynamic 3456 e4:5a:d4:7a:cf:5c te1/0/4 dynamic switch_name# !_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_! ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456=== User Name:autologin Password:enable switch_name#21-Mar-2023 12:59:50 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.81, none ACCEPTED. show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 3456 name te1/0/1-4 S name switch_name#show mac address-table vlan 3456 Flags: I - Internal usage VLAN Aging time is 300 sec Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 3456 00:a6:ca:ea:eb:ff te1/0/2 dynamic 3456 a8:f9:4b:30:12:59 te1/0/2 dynamic 3456 a8:f9:4b:30:bd:9a te1/0/2 dynamic 3456 e4:5a:d4:7a:cf:5c te1/0/2 dynamic switch_name# !_!_!_!!! Hint! a8:f9:4b:xx:xx:xx - Mac address Eltex LoopBack Detection. !!!_!_!_! ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 3456 switch_name(config)#21-Mar-2023 12:59:57 %LINK-W-Down: Vlan 3456 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 3456 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#eConnection closed by foreign host. Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#eConnection closed by foreign host. Сохраняем конфигурации коммутаторов? y/n: ^C ./start-delete-vlan.sh 2345 Быстрое удаление vlan со всех коммутаторов Выгрузить актуальные конфигурации коммутаторов? Выгрузить? y/n: n .......... Vlan ID 2345 присутствует на Eltex switch_name 192.168.0.104 /// interface vlan 2345 name NAMEE .............................................................................................. Vlan ID 2345 присутствует на Eltex switch_name 192.168.0.94 /// interface vlan 2345 name NAMEE ................................................................................................... У данного VLAN найдены следующие имена: NAMEE Приступить к удалению VLAN? y/n: y spawn telnet 192.168.0.104 Trying 192.168.0.104... Connected to 192.168.0.104. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:06:42 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.104, none ACCEPTED. show vlan tag 2345 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 2345 KrasSet-KTS-for-T gi1/0/1,gi1/0/9 S elezon switch_name#show mac address-table vlan 2345 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- switch_name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 2345 switch_name(config)#21-Mar-2023 13:06:47 %LINK-W-Down: Vlan 2345 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 2345 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#eConnection closed by foreign host. spawn telnet 192.168.0.94 Trying 192.168.0.94... Connected to 192.168.0.94. Escape character is '^]'. User Name:autologin Password:enable switch_name#21-Mar-2023 13:09:42 %AAA-I-CONNECT: User CLI session for user autologin over telnet , source 192.168.0.136 destination 192.168.0.94, none ACCEPTED. show vlan tag 2345 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- 2345 KrasSet-KTS-for-T gi1/0/23-24, S elezon te1/0/2 switch_name#show mac address-table vlan 2345 Vlan Mac Address Port Type ------------ --------------------- ---------- ---------- 2345 64:d1:54:8c:9d:26 gi1/0/23 dynamic switch_name# ---===### YOU HAVE ENTERED TO INTERACTIVE MODE ###===--- WHEN FINISHED, TYPE "!!!" FOR RETURN configure terminal switch_name(config)#no vlan 2345 switch_name(config)#21-Mar-2023 13:09:46 %LINK-W-Down: Vlan 2345 switch_name(config)# switch_name(config)# switch_name# switch_name#show vlan tag 2345 Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN Vlan Name Tagged Ports UnTagged Ports Created by ---- ----------------- ------------------ ------------------ ---------------- switch_name#eConnection closed by foreign host. Сохраняем конфигурации коммутаторов? y/n: y Saving Eltex 192.168.0.104 Сохраняем конфигурацию switch_name 192.168.0.104 iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2 iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3 iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4 Конфигурация switch_name 192.168.0.104 сохранена Saving Eltex 192.168.0.94 Сохраняем конфигурацию switch_name 192.168.0.94 iso.3.6.1.4.1.89.87.2.1.3.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.7.1 = INTEGER: 2 iso.3.6.1.4.1.89.87.2.1.8.1 = INTEGER: 1 iso.3.6.1.4.1.89.87.2.1.12.1 = INTEGER: 3 iso.3.6.1.4.1.89.87.2.1.17.1 = INTEGER: 4 Конфигурация switch_name 192.168.0.94 сохранена Изменено 24 марта, 2023 пользователем neperpbl3 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vurd Опубликовано 21 марта, 2023 · Жалоба В 2013 я явно писал, что expect по боку. Но вы не читали.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sol Опубликовано 10 апреля · Жалоба Ну дык а задача-то решилась? Удалось добавить влан в транк? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...