Portsnap: Обновление дерева портов FreeBSD

http://pro-voip.com.ua freebsd

portsnap — штатная утилита для обновления дерева портов в FreeBSD. Подчеркну еще раз — дерева портов, а не программ, которые были установлены с этого самого дерева. Дерево портов представляет собой набор каталогов с файлами в директории /usr/ports, уже из которых собирается и компилируется необходимое ПО. Вот portsnap как раз и занимается обновлением вот этих самых файлов.

Обновление дерева портов предшествует обновлению самой установленной программы. Т.е. если нужно обновить, например, mysql-server, то сначала обновляем дерево портов, а затем из этого дерева, обновленного, устанавливаем/переустанавливаем программу (port). Для этих целей я использую утилиту portupgrade.

Файлы и директории

  • Файл конфигурации — /etc/portsnap.conf
  • Рабочая директория — /var/db/portsnap/
  • Дерево портов — /usr/ports/

Процесс обновления

Скачиваем snapshot («снимок», сжатую копию) дерева портов. Snapshot скачивается в рабочую директорию /var/db/portsnap:
portsnap fetch

Распаковываем дерево портов — берется snapshot (по сути это набор сжатых файлов) из директории /var/db/portsnap и разворачиваем в /usr/ports:
portsnap extract

! данная команда сначала трет все старое дерево, если оно есть, а потом разворачивает новое. Это занимает определенное время, поэтому именно для обновления портов extract не используется. extract используется чаще всего при установке свежей системы.

Для обновления дерева портов используется следующая команда:
portsnap update

update, в отличие от extract, не удаляет все дерево портов, а только вносит в него необходимые изменения.

Автоматизация

Чтобы дерево портов обновлялось без вашего активного участия в этом, задействуем cron. В этом случае в /etc/crontab вместо portsnap fetch, нужно прописывать команду portsnap cron — делает она то же самое (скачивает снепшот с серверов) — но с случайной задержкой из диапазона 1 — 3600 сек.

«portsnap fetch в cron’е не работает» — мною это утверждение не проверялось, поверим на слово

portsnap update рекомендуют запускать с ключем -I — т.е. не обновлять само дерево, а обновить только индекс. Для чего? Чтобы избежать вполне возможной ситуации, когда portsnap при обновлении удаляет/изменяет исходные файлы порта, а в этот же момент кто-то собирает из этих файлов порт.

ee /etc/crontab

#minute hour    mday    month   wday    who     command
0       0       *       *       0       root    portsnap -I cron update

 

Cisco: L2TP-IPSEC на Cisco 2811

http://pro-voip.com.ua cisco

L2TP создает туннель между двумя точками — в нашем случае (Remote Access VPN) клиента и сервера — но не производит шифрование. Для обеспечения шифрования данных, передаваемых в туннеле L2TP, используем IPSec.

 

 

http://pro-voip.com.ua cisco l2tp ipsec

 

 

Настройка L2TP

Алгоритм поднятия L2TP-туннеля на Cisco почти такой же, как алгоритм поднятия PPTP-туннеля, отличается только сам протокол — вместо pptp, указываем l2tp, что вполне логично.

1. vpdn
— глобально включаем vpdn:

Router(config)#vpdn enable

2. vpdn-group
— создаем и настраиваем vpdn-группу:

Router(config)#vpdn-group L2TP-IPSEC
Router(config-vpdn)#accept-dialin
Router(config-vpdn-acc-in)#protocol l2tp
Router(config-vpdn-acc-in)#virtual-template 3

3. interface virtual-template
— создаем и настраиваем шаблон виртуального интерфейса:

Router(config)#interface virtual-template 3
Router(config-if)# ip unnumbered FastEthernet0/0
Router(config-if)#peer default ip address pool L2TP-IPSEC-POOL
Router(config-if)#encapsulation ppp

4. ip local pool
— создаем пул адресов, которые будут выдаваться при поднятии туннеля:

Router(config)#ip local pool L2TP-IPSEC-POOL 50.50.50.1 50.50.50.15

5. username
— создаем пользователя:

Router(config)#aaa new-model
Router(config)#aaa authentication ppp default local
Router(config)#aaa authorization network default local
Router(config)#username vpn password strong_pass

 

Настройка IPSec

IPSec — это не протокол, а стандарт, состоящий из 3 протоколов:

  • ESP (Encapsulating Security Payload)  шифрует данные
  • AH (Authentication Header) отвечает за аутентификацию источника и проверку целостности данных
  • IKE (Internet Key Exchange protocol) используется для согласования параметров и создания защищенного туннеля

Процесс согласования параметров и создания туннеля происходит в 2 этапа — первая и вторая фаза IKE. В результате работы IKE создается 2 туннеля — ISAKMP-туннель и, собственно, защищенный туннель для передачи данных. ISAKMP-туннель после второй фазы IKE не разрывается, он служит для обновления ключей шифрования основного канала (ключи обновляются каждые N секунд, время обновления можно задать в настройках isakmp policy командой lifetime)

 

При первой фазе IKE стороны «меряются» ISAKMP-полисями, поэтому первым делом…

1. crypto isakmp policy
— создаем ISAKMP policy

ISAKMP policy используется для создания ISAKMP Tunnel при первой фазе IKE. Уже по ISAKMP туннелю стороны договариваются об SA (Security Association) основного шифрованого канала (метод шифрования, ключи). Создание второго туннеля уже для шифрования данных — это вторая фаза IKE.

Чем меньше номер policy, тем она приоритетнее. Если сторонам не удалось согласовать параметры для построения ISAKMP туннеля, используя политику, например, 10, то они переходят к согласованию, используя политику 20 и т.д.

  • номер политики — 10
  • алгоритм шифрования — 3des
  • метод аутентификации — pre-shared keys
  • задаем длину ключа — Diffie-Hellman (DH) группа 2 — 1024 bit
  • алгоритм хеширования — md5
  • время жизни ключа шифрования — 3600 сек — 1 час, после истечения lifetime ключ меняется
Router(config)#crypto isakmp policy 10
Router(config-isakmp)#encryption 3des
Router(config-isakmp)#authentication pre-share
Router(config-isakmp)#group 2
Router(config-isakmp)#hash md5
Router(config-isakmp)#lifetime 3600

 

2. crypto isakmp key
— создаем pre-shared key, который используется для создания ISAKMP-туннеля:

Router(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0 no-xauth
Router(config)#crypto isakmp keepalive 3600

Смотрим параметры новосозданной ISAKMP-полиси:

Router#show crypto isakmp policy

Global IKE policy
Protection suite of priority 10
encryption algorithm:    Three key triple DES
hash algorithm:        Message Digest 5
authentication method:    Pre-Shared Key
Diffie-Hellman group:    #2 (1024 bit)
lifetime:        3600 seconds, no volume limit
Router#show crypto isakmp key
Keyring      Hostname/Address                            Preshared Key

default      0.0.0.0        [0.0.0.0]                    cisco

 

При второй фазе IKE для создания туннеля для шифрованых данных стороны «меряются» transform-set’ами

3. crypto ipsec transform-set
— cоздаем transform-set  — набор протоколов, которые поддерживает сторона для установления IPSEC. transform-set определяет, как будут шифроваться данные:

Router(config)#crypto ipsec transform-set 3DES-MD5 esp-3des esp-md5-hmac
Router(cfg-crypto-trans)#mode transport

Есть два режима работы IPSec:

  • туннельный (он включен по умолчанию) — шифруются данные вместе с ip-заголовками
  • транспортный — шифруются только данные

Для работы совместо с L2TP нам нужен транспортный режим, что мы и задаем в настройка transform-set’a командой mode transport

 

4. crypto dynamic-map
— создаем динамическую карту шифрования, назовем ее, например, 3DES-MD5-DYNMAP, и к ней привязываем transform-set:

Router(config)#crypto dynamic-map 3DES-MD5-DYNMAP 10
Router(config-crypto-map)#set transform-set 3DES-MD5

5. crypto-map

— создаем статическую карту шифрования, связываем динамическую карту шифрования со статической:

Router(config)#crypto map 3DES-MD5-MAP 10 ipsec-isakmp dynamic 3DES-MD5-DYNMAP

6. interface
— привязываем статическую карту шифрования к интерфейсу:

Router(config)#interface fastEthernet 0/0
Router(config-subif)#crypto map 3DES-MD5-MAP

*Jun 16 11:46:56.183: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ONip

 

При подключении к L2TP/IPSec в VPN-клиенте помимо ip-адреса сервера, логина и пароля, нужно указать ключ (Shared Secret). Этот ключ мы задавали командой crypto isakmp key, в моем примере ключ cisco.

Freeswitch: Tone stream. Генерирование тонов

http://pro-voip.com.ua freeswitch

Что такое тон в контексте телефонии?

В двух словах, тон — это звуковой сигнал определенной частоты, определенной продолжительности, посылаемый телефонным оборудованием для информирования пользователя об определенном событии.

Например, длинный гудок, который мы слышим, когла поднимаем трубку, чтобы совершить звонок, — это ответ станции — тон «dial tone». Продолжительные гудки дозвона — «ringback tone». Короткие гудки, сообщающие, что пользователь занят — «busy tone».

 

Модуль mod_tone_stream

 

Генерированием тонов в Freeswitch занимается модуль mod_tone_stream. Отдельного файла настроек для данного модуля нет. Задание параметров выдаваемого тона происходит в диалплане.

Выглядит запись тона в обобщенном виде следующим образом:

tone_stream://[L=x;][v=y;]%(<on-duration>, <off-duration>, <freq-1> [, freq-2] [, freq-3] [, freq-n] [;loops=x])

  • L=x — создать x копий определенного тона в памяти перед проигрыванием. Отрицательное значение неприемлемо — L=-1 не работает. Если нужно сделать сигнал, повторяющийся неопределенное количество раз, пользуйтесь конструкцией loop=-1. L=x ставится в начале строки, задающей тон;
  • v=y — громкость тона в децибелах. «0» — максимальная громкость. Используются отрицательные значения;
  • on-duration — длительность звучания тона в милисекундах;
  • off-duration — длительность тишины (паузы) в милисекундах;
  • freg-1 … freg-n — задаем частоту в герцах;
  • ;loops=x  — повторить x раз; loop=-1 — бесконечный цикл. Генерирует тон и повторяет процесс генерации каждый раз до завершения цикла, в отличие от параметра L, который сначала создаст один длительный тон, который будет занимать место в памяти в x раз больше, а только потом его проиграет. Данный параметр записывается в конце строки.

 

freeswitch-tone-stream

 

Пример

«busy tone»

Проиграть 8 гудков сигнала «занято», длительность тона и тишины по 500 ms.

<action application="playback" data=tone_stream://L=8;%(500,500,480,620)" />

 

Параметры тонов в большинстве своем определены на национальном уровне. В разных странах может быть разное кол-во тонов и разные параметры для тонов одного и того же назначения.

Разнообразие тонов и их параметры по версии ITU-T можно посмотреть в Recommendation E.180/Q.35.

Cisco: PPTP-сервер на Cisco 2811

http://pro-voip.com.ua cisco

PPTP (Point-to-Point Tunneling Protocol) — туннельный протокол типа точка-точка, позволяющий компьютеру устанавливать защищённое соединение с сервером за счёт создания специального туннеля в стандартной, незащищённой сети. (c) wiki

VPDN (Virtual Private Dialup Network)

Сценарий 1

Подключаемся к PPTP-серверу, получаем отдельный белый ip и с этим ip выходим в интернет.
Получается, что на каждое подключение — свой белый ip-адрес.
На стороне провайдера необходим маршрут в нашу сеть, которая выдается для PPTP.

 

 

cisco-pptp-scenario1

 

 

1. Включаем VPDN

Router(config)#vpdn enable

2. Создаем VPDN-группу

Заходим в режим конфигурации VPDN-группы:

  • разрешаем входящие «dial-in» запросы
  • указываем протокол pptp
  • определяем шаблон, который будем использовать при создании виртуального интерфейса
Router(config)#vpdn-group VPN-1
Router(config-vpdn)#accept-dialin
Router(config-vpdn-acc-in)#protocol pptp
Router(config-vpdn-acc-in)#virtual-template 1

3. Создаем virtual-template для VPDN-группы 

При подключении пользователя к PPTP-серверу создается Virtual-Access-интерфейс.  Virtual-Access-интерфейс клонируется с Virtual-Template-интерфейса (с шаблона).

Создаем шаблон virtual-template и настраиваем параметры будущего виртуального интерфейса:

  • задаем инкапсуляцию ppp
  • список адресов, назначаемых виртуальному интерфейсу выделяется динамически с пула VPN-POOL-1
  • задаем реальный интерфейс, который клонируем в виртуальный
  • отключаем keepalive
  • задаем параметры ppp — шифрование (encrypt) и перечисляем возможные методы аутентификации (authentication)
Router(config)#interface virtual-template 1
Router(config-if)#encapsulation ppp
Router(config-if)#peer default ip address pool VPN-POOL-1
Router(config-if)#ip unnumbered FastEthernet 0/0
Router(config-if)#no keepalive
Router(config-if)#ppp encrypt mppe auto
Router(config-if)#ppp authentication pap chap ms-chap ms-chap-v2

4. Создаем пул адресов VPN

Router(config)#ip local pool VPN-POOL-1 50.50.50.1 50.50.50.15

5. Создаем пользователя

  • включаем aaa new-model (если еще не включена)
  • ppp аутентификация и авторизация будет производиться с использованием локальной базы пользователей
  • добавляем пользователя
Router(config)#aaa new-model
Router(config)#aaa authentication ppp default local
Router(config)#aaa authorization network default local
Router(config)#username vpn password strong_pass

 


 

Сценарий 2

Если нет отдельной сети белых ip-адресов для VPN-пула, можно использовать сеть серых адресов + NAT

Подключаемся к PPTP-серверу, серый ip, NAT’им «серый» ip в «белый» и с «белым» ip выходим в интернет.
В итоге на все подключения — 1 «белый» ip.

 

 

cisco-pptp-scenario2

 

 

1. Включаем VPDN

Router(config)#vpdn enable

2. Создаем VPDN-группу

Router(config)#vpdn-group VPN-2
Router(config-vpdn)#accept-dialin
Router(config-vpdn-acc-in)#protocol pptp
Router(config-vpdn-acc-in)#virtual-template 2

3. Создаем virtual-template для VPDN-группы 

+ NAT

! NAT включаем на Virtual-Template -интерфейсе, а не на реальном FastEthernet0/0:

Router(config)#interface virtual-template 2
Router(config-if)#encapsulation ppp
Router(config-if)#peer default ip address pool VPN-POOL-2
Router(config-if)#ip unnumbered FastEthernet 0/0
Router(config-if)#no keepalive
Router(config-if)#ppp encrypt mppe auto
Router(config-if)#ppp authentication pap chap ms-chap ms-chap-v2

Router(config-if)#ip nat enable
Router(config-if)#ip nat inside

4. Создаем пул адресов VPN

Router(config)#ip local pool VPN-POOL-2 192.168.1.1 192.168.1.254

5. Создаем пользователя

Router(config)#aaa new-model
Router(config)#aaa authentication ppp default local
Router(config)#aaa authorization network default local
Router(config)#username vpn password strong_pass

6. Завершаем настройку NAT

+ NAT

nat inside — виртуальный интерфейс
nat outside — реальный интерфейс Fa0/1

Router(config)#interface FastEthernet0/1
Router(config-subif)#ip nat enable
Router(config-subif)#ip nat outside

C помощью стандартного access-list 1 указываем какую сеть натить и в какой интерфейс:

Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Router(config)#ip nat inside source list 1 interface FastEthernet0/1 overload

 


 

Дополнение

Если настроить на Cisco оба вышеописаных сценария, Cisco ругнется, что у нас две VPDN-группы с одинаковой конфигурацией:

% Warning, the vpdn groups VPN-1 and VPN-2 have the same configuration

— указан один и тот же протокол — pptp

И правильно ругнется —  когда пользователь будет подключаться по PPTP, как циске выбрать, к какой группе этого пользователя прилепить — VPN-1 или VPN-2 ? Работать PPTP-сервер в таком случае будет, но будет активной только одна VPDN-группа — та, которая была создана первой, т.е. VPN-1.

Если все-таки нужно несколько групп, можно поступить следующим образом: для подключения к разным VPDN-группам нужно использовать разные ip-адреса интерфейсов cisco для pptp-сервера:

Router(config)#vpdn-group VPN-1
Router(config-vpdn)#source-ip 10.10.10.1

 

PON: OLT BDCOM P3310B – Как посмотреть

Системаbdcom

Посмотреть загрузку CPU (секунда/минута/5 минут):
show cpu

Посмотреть локальных пользователей:
links — кол-во залогиненых под пользователем сессий
show local-users

Посмотреть MTU:
show system mtu

Версии

Посмотреть версию прошивки OLT:
здесь же можно глянуть и uptime
show version

Посмотреть версии прошивок зарегистрированых ONU (всех ONU за всеми EPON-портами):
show epon onu-software-version

Посмотреть версии прошивок зарегистрированых ONU (всех ONU за конкретным EPON-портом):
show epon onu-software-version interface EPON 0/1

Посмотреть версию прошивки конкретной ONU:
show epon interface EPON 0/1:2 onu ctc basic-info

Интерфейсы

Посмотреть статус и дескрипшины интерфейсов:
show interface brief

Посмотреть информацию о всех зарегистрированых ONU:
show epon onu-information

Посмотреть только активные ONU:
show epon active-onu

Посмотреть только неактивные ONU:
show epon inactive-onu

ONU

Посмотреть статус Ethernet-порта на ONU:
show epon interface epON 0/1:2 onu port 1 state

Посмотреть статистику по пакетам на Ethernet-порту на ONU:
show epon interface epON 0/1:2 onu port 1 statistics

Посмотреть таблицу mac-адресов на ONU:
show epon interface epON 0/1:2 onu mac address-table

Вланы

Посмотреть базу вланов:
show vlan

Посмотреть влан по id:
show vlan id 100

Таблица MAC-адресов

Посмотреть MAC-адреса в влане:
show mac address-table dynamic vlan 100

Посмотреть MAC-адреса на интерфейсе:
show mac address-table interface EPON 0/1:2

Посмотреть количество  MAC-адресов на интерфейсах:
show mac address-table brief

Почистить таблицу MAC-адресов:
clear mac address-table dynamic

Мощность сигнала

Посмотреть уровень получаемого сигнала от OLT к ONU (received power(DBm)),
Посмотреть мощность передатчика ONU(transmitted power(DBm)):

show epon interface EPON0/1:2 onu ctc optical-transceiver-diagnosis

Посмотреть уровни получаемого сигнала от всех зарегистрированых ONU к OLT (RxPower(dBm)),
Посмотреть мощность передатчика OLT (TxPower(dBm)):

show epon optical-transceiver-diagnosis

PON: OLT BDCOM P3310B — Базовая настройка

bdcomДефолтные настройки OLT BDCOM P3310B:

  • логин/пароль — admin/admin
  • management vlan 1
  • ip-address 192.168.0.1/24
  • Gigabit Ethernet и Epon порты выключены

 

1. Создание Management vlan 100

no interface vlan 1

interface vlan 100
description -= MANAGEMENT =-
ip address 192.168.100.2 255.255.255.0

ip default-gateway 192.168.100.1

Чтобы установить управляющий влан, отличный от vlan 1, для начала необходимо его (vlan 1) удалить, а затем уже прибивать свой.

 

2. Настройка Ethernet-интерфейсов

По умолчанию все порты shutdown.

interface gigaEthernet 0/1
description -= UPLINK =-
no shutdown
switchport mode trunk
switchport trunk vlan-allowed add 100,200,300

— поднимаем порт, переводим в режим trunk и добавляем необходимые вланы.

! Будьте осторожны при добавлении вланов в trunk — не забудьте слово add перед номерами вланов, иначе, все, что у вас было до добавления потрется и останется на порту только один (последний добавленный влан).

 

3. Настройка доступа

3.1 Создание пользователя

aaa authentication login default local
aaa authentication enable default enable — запрашивать enable-пароль на доступ к привилегированному уровню
username admin password 0 this_is_admin_password
enable password 0 this_is_ebable_password
service password-encryption
 

3.2 Access-list на telnet

Создаем access-list и вешаем его не на line vty 0 4 (или vty 0 31), как в cisco, а на «протокол доступа», точнее процесс telnet или ssh:

ip access-list standard MANAGEMENT
permit reverse-mask 192.168.100.0 0.0.0.255

— можно задать обратную маску, как в cisco, используя слово reverse-mask, а можно задать обычную:

permit 192.168.100.0 255.255.255.0

И вешаем access-list на telnet:

ip telnet access-class MANAGEMENT

 

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

time-zone Kyiv +2
sntp server 192.168.100.1

 

5. Настройка SNMP

snmp-server location Zhukova,33
snmp-server contact admin@mail.com
snmp-server community public ro MANAGEMENT

— разрешить опрашивать OLT с коммьюнити public, доступ read-only, +защита аксес-листом MANAGEMENT

 

6. Hostname и banner

hostname my-switch
no banner message
banner message
text Hello admin!

text — это команда, указывающая на то, что далее следует само приветствие. Если нужен многострочный баннер — пишем его по строке, перед каждой строкой указываем text.

 

7. Настройка Epon

interface EPON0/1
description -= TREE 1 =-
switchport mode trunk
switchport trunk vlan-allowed 200,300

— здесь можно заметить, что не было использовано слово add перед вланами, это нормально, поскольку это первое добавление вланов. В последующем add обязательно!

Просмотр зарегистрированных ONU:

show epon onu-information
Interface EPON0/1 has registered 2 ONUs:
IntfName   VendorID  ModelID  MAC Address    Description     BindType  Status
Dereg Reason
———- ——— ——— ————— ————— ——— ———
—— ——————
EPON0/1:1  —-      —-     a0c6.ec33.1234 N/A             static    lost
unknow
EPON0/1:2  BDCM      151C     fcfa.f7ab.1234 N/A             static    autoconf
igured N/A

Чтобы вывод красиво умещался на консоли, правим настройки:

line console 0
length 0
width 256

show epon onu-information
Interface EPON0/1 has registered 2 ONUs:
IntfName VendorID ModelID MAC Address Description BindType Status Dereg Reason
———- ——— ——— ————— ————— ——— ————— ——————
EPON0/1:1 —- —-a0c6.ec33.1234 N/A static lost unknow
EPON0/1:2 BDCM 151Cfcfa.f7ab.1234 N/A static auto_configured N/A

 

8. Настройка ONU

interface EPON0/1:2
description -= CLIENT300 =- — этот description отображается в выводе «show interface  brief»
epon onu description CLIENT300 — а этот — в выводе команды «show epon onu-information»
epon onu all-port ctc vlan mode tag 300

— настраиваем все Ethernet-порты на ONU в режим (по-цисковски) access в влан 300. На Epon-порт ONU трафик приходит тегированный (вспоминаем настройку порта EPON0/1)

При подключении ONU, она сама регистрируется на OLT и доступна через назначеный ей LLID. LLID назначается следующий свободный, здесь он равен 2. EPON0/1:2 — интерфейс, определяющий ONU, подключеную в первый Epon-порт; была подключена эта ONU по счету второй.

 

9. Шейпинг (полисинг)

interface epon0/1:2
epon sla upstream pir 10000 cir 1000
epon sla downstream pir 10000 cir 1000

pir- максимальная скорость в Kb
cir- гарантированная скорость в Kb

— на тесте при установке вот таких значений были потери до 15% и задержки до 300 мс. Почему? пока неясно, будем тестить дальше.

при установке вот таких значений

epon sla upstream pir 100000 cir 1000
epon sla downstream pir 100000 cir 1000

все ок

! SLA используется для нарезки канала на ONU в целом

Rate-limit

— если ONU несколько-портовая, можно регулировать rate-limit на каждом отдельном порту:

epon onu port 1 ctc rate-limit 1000

rate-limit < sla = rate-limit
rate-limit > sla = sla

если оба значения выставлены — берется меньшее значение.

 

10. Loopback Detect

epon onu all-port loopback detect

отключать ONU, на которой была обнаружена петля.

Тест: к ONU подключили свитч, на свитче устроили петлю, loopback detect работает!

sMay 15 09:57:10 %LOOPBACK-DETECT: Line on Interface EPON0/1:1 onu uni 0, loopback is detected
show epon interface ePON 0/1:1 onu ctc bMay 15 09:58:30 %LOOPBACK-CLEAR: Line on Interface EPON0/1:1 onu uni 0, loopback is cleared

 

11. Как отвязать ONU

interface EPON0/1
no epon bind-onu sequence 1

— отвязать ONU на ветке 1, номер 1.

interface EPON0/1
no epon bind-onu mac xxxx.xxxx.xxxx

— отвязать ONU на ветке 1, с mac’ом  xxxx.xxxx.xxxx

PON: ONU BDCOM 1501C1 — Обновление прошивки через OLT

bdcomНиже приведен алгоритм обновления именно прошивки (ios) ONU _без_ обновления загрузчика (uboot). Это не значит, что загрузчик обновлять вообще никогда не нужно — если есть необходимость, то вперед; просто здесь этот шаг пропущен.

«Uboot файл обеспечивает правильный алгоритм прошивания ios файла и меняется инженерами BDCOM крайне редко» (с) ic-line

 

Обновление прошивки ONU BDCOM 1501C1 производится с «головы» (у меня OLT BDCOM P3310B).

  1. Скачиваем прошивку на tftp-сервер, затем заливаем ее по tftp на «голову» (на флеше OLT для прошивки ONU места хватит, не нужно будет удалять Switch.bin).
  2. Определяем, за каким интерфейсом OLT находится необходимая ONU.
  3. Заливаем новую прошивку:
    epon update onu image 1501C1_1017.zblob interface EPON x/x:x
    подтверждаем:
    epon commit-onu-image-update interface epon x/x:x
    смотрим результат:
    show epon interface epon x/x:x onu ctc basic-info

 


 

На практике…

Смотрим, что у нас есть на флеше OLT сейчас и хватит ли места на еще один файл:

Switch>su
Switch#Jan  1 01:13:11 User admin enter privilege mode from console 0, level = 15

Switch#dir
Directory of /:
1    olt.blob               <FILE>      626580    THU JAN 01 00:00:14 1970
3    startup-config         <FILE>        1538    THU JAN 01 00:08:22 1970
0    Switch.bin             <FILE>     6242347    THU JAN 01 01:40:13 1970
free space 884736

free space — 884736 байт, файл прошивки 1501C1_1017.zblob занимает 498486 байт — значит места достаточно. Заливаем 1501C1_1017.zblob с tftp-сервера на OLT:

Switch#copy tftp flash 192.168.100.1
Source file name[]?bdcom/1501C1_1017.zblob
Destination file name[bdcom/1501C1_1017.zblob]?1501C1_1017.zblob
######################################################################
######################################################################
######################################################
TFTP:successfully receive 974 blocks ,498486 bytes


Switch#dir
Directory of /:
1    olt.blob               <FILE>      626580    THU JAN 01 00:00:14 1970
3    startup-config         <FILE>        1538    THU JAN 01 00:08:22 1970
0    Switch.bin             <FILE>     6242347    THU JAN 01 01:40:13 1970
4    1501C1_1017.zblob      <FILE>      498486    THU JAN 01 01:14:27 1970
free space 360448

ONU, который я хочу прошить, находится за интерфейсом EPON 0/1:2. Обновляем прошивку:

Switch#epon update onu image 1501C1_1017.zblob interface EPON 0/1:2
Are you sure to update the ONU image(y/n)?y
%ONU-UPDATE: Load image to memory may take some time, please wait...
Loading 1501C1_1017.zblob.....
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%ONU-UPDATE: File 1501C1_1017.zblob len 498486 Byte.
Switch#.Jan  1 01:16:18 CTC ONU(0x60c30001) upgrade start... Wait.
Jan  1 01:16:18 The image is downloading to the ONU on EPON0/1:2, Please wait! The onu will reboot when downloading finished, and then you can check the software version after re-registration!
....................................................................................................................................................................................................................................................................................................................................................................Jan  1 01:16:56 CTC_OAM_ONU_UPGRADE_END_DOWNLOAD_REQ
Jan  1 01:16:56 ONU has completed writing to flash
Jan  1 01:16:56 CTC_OAM_ONU_UPGRADE_ACTIVATE_IMG_REQ
CTC OAM UPGRADE OK,PLS COMMIT AFTER ONU REBOOT
Jan  1 01:16:57 Activate image request/response successful
Jan  1 01:16:58 %EPON-ONUDEREG: ONU fcfa.f7c5.c29d is deregistered on EPON0/1:2.
Jan  1 01:17:20 %EPON-ONUREG: ONU fcfa.f7c5.c29d is registered on EPON0/1:2.
Jan  1 01:17:20 %EPON-ONUAUTHEN: ONU fcfa.f7c5.c29d is authenticated on EPON0/1:2.
Jan  1 01:17:21 %OLT: Interface EPON0/1:2's OAM Operational Status: Operational
Jan  1 01:17:24 %OLT: Interface EPON0/1:2's CTC OAM extension negotiated successfully!

Подтверджаем изменение прошивки на интерфейсе:

Switch#epon commit-onu-image-update interface epON 0/1:2
SwitchCTC OAM UPGRADE FINISHED
Jan  1 01:18:27 Commit image request/response successful
Jan  1 01:18:28 Commit onu image update successfully on EPON0/1:2!

Посмотреть версию прошивки ONU:

Switch#show epon interface epon0/1:2 onu ctc basic-info
ONU Vender ID : BDCM
ONU MODEL ID : 151C
ONU ID : fcfa.f7c5.c29d
Hardware Version :
Software Version : 10.0.17A 1017
Firmware Version : 0x0006000f00010006
Chipset Vendor ID : CS
Chipset MODEL ID : 0x8032
Chipset Revision : 160
Chipset Date : 11/01/29
Onu type : SFU
Support multillid : Not supported
Protection type : Not supported
Number of Pon : 1
Number of slot : 0
Support 1 types of port:
Number of GE port : 1
Battery Backup : 0

 

PON: OLT BDCOM P3310B — Обновление прошивки

bdcom_logo

Обновление прошивки производится посредством tftp. Необходимо будет пройти следующие шаги:

  1. Скачиваем новую прошивку с источника в директорию на tftp-сервер.
  2. Бекапим старую прошивку (на всякий случай) с OLT на tftp-сервер.
  3. Удаляем старую прошивку с OLT.
  4. Заливаем новую прошивку с tftp на OLT.
  5. Перезагружаем OLT.

 

1. Скачиваем новую прошивку на tftp-сервер

 

Необходимую прошивку можно поискать здесь — http://ic-line.ua/ua-pon

# cd /tftpboot
# wget --no-check-certificate https://www.dropbox.com/sh/oycsdo0b0iuyeqv/AACQoInAmA2i8DZPFHE_fgNBa/P3310B_en_22960.bin
...
P3310B_en_22960.bin 100%[========================================================================================================================================>] 5.95M 1.70MB/s in 3.5s

2015-05-13 13:02:04 (1.70 MB/s) - 'P3310B_en_22960.bin' saved [6242347/6242347]

P3310B_en_22960.bin — firmware для BDCOM P3310B Build 22960

 

2. Бекапим старую прошивку с OLT на tftp-сервер

 

Дефолтные настройки OLT BDCOM P3310B:

  • логин/пароль — admin/admin
  • management vlan 1
  • ip-address 192.168.0.1/24
  • Gigabit Ethernet и Epon порты выключены

 

Подключаемся к консоли с помощью какого-либо эмулятора терминала (у меня picocom) и консольного кабеля, который идет в комплекте с OLT:

root# /opt/local/bin/picocom /dev/tty.usbserial

Jan 1 01:21:01 User admin logouted on console 0
User Access Verification

Username: admin
Password:
Welcome to BDCOM P3310B EPON OLT

Switch>su
Switch#Jan 1 01:21:08 User admin enter privilege mode from console 0, level = 15

Switch#

Версия на текущий момент:

Switch#show version
BDCOM(tm) P3310B Software, Version 10.1.0B Build 19991
Copyright by Shanghai Baud Data Communication CO. LTD.

 

Подготовим OLT для связи с tftp-сервером

Как вы знаете, устройство, которое необходимо перепрошивать и tftp-сервер должны быть в прямой видимости между собой, т.е. в локальной сети.

Если вам необходимо сменить ip-адрес и управляющий влан (как мне), сначала необходимо удалить существующий:

Switch#config
Switch_config#no interface vlan 1
Switch_config#Jan 1 01:40:10 %LINE-5-UPDOWN: Line on Interface VLAN1, changed state to down
Jan 1 01:40:10 %LINEPROTO-5-UPDOWN: Line protocol on Interface VLAN1, changed state to down

Создаем новый management vlan 100 и прибиваем на него ip-address:

Switch_config#interface vlan 100
Switch_config_v100#Jan 1 01:41:05 %LINE-5-UPDOWN: Line on Interface VLAN100, changed state to up
Jan 1 01:41:05 %LINEPROTO-5-UPDOWN: Line protocol on Interface VLAN100, changed state to up

Switch_config_v100#ip address 192.168.100.2 255.255.255.0

Нужно еще поднять порт Gigabit Ethernet 1 и добавить влан. GigabitEthernet подключен к транковому порту, поэтому управляющий влан 100 у меня приходит в теге:

Switch_config_v100#quit
Switch_config#interface gigaEthernet 0/1
Switch_config_g0/1#no shutdown
Switch_config_g0/1#switchport mode trunk
Switch_config_g0/1#switchport trunk vlan-allowed 100
Switch_config_g0/1#

 

Собственно, бекап

Посмотрим, что у нас на данный момент присутствует на Flash:

Switch#dir
Directory of /:
1 olt.blob <FILE> 626580 THU JAN 01 00:00:14 1970
3 startup-config <FILE> 1628 THU JAN 01 01:26:59 1970
0 Switch.bin <FILE> 6242347 THU JAN 01 01:40:13 1970
free space 884736
Switch#

Switch.bin — это и есть та самая прошивка, которую нам необходимо заменить на более свежую.

Скопируем ее на tftp-сервер:

Switch#copy flash tftp 192.168.100.1
Source file name[]?Switch.bin
Destination file name[Switch.bin]?
######################################################################

 

3. Удаление старой прошивки

 

В идеале было бы загрузить новую версию прошивки, не удаляя с флеши старую — и иметь на борту 2 версии. Но так не получится, поскольку банально на флеше нет столько свободного места, сколько требуется под еще одну прошивку. Вот и приходится производить лишние телодвижения:

Switch#delete Switch.bin
this file will be erased,are you sure?(y/n)y

 

4. Заливаем новую прошивку с tftp на OLT

 

В качестве Destination file name пишем Switch.bin:

Switch#copy tftp flash 192.168.100.1
Source file name[]?P3310B_en_22960.bin
Destination file name[P3310B_en_22960.bin]?Switch.bin
######################################################################

 

5. Перезагружаем OLT

 

Switch#reboot
Do you want to reboot the Switch(y/n)?y
Please wait...

и смотрим результат:

Switch#show version
BDCOM(tm) P3310B Software, Version 10.1.0B Build 22960
Copyright by Shanghai Baud Data Communication CO. LTD.

 

Monitord: Автоматический перезапуск демона

freebsd2В мире постоянно работающих систем с «слушающими» отзывчивыми демонами, бывает, случается неприятность — в силу каких-либо причин демон перестает быть отзывчивым и прекращает свою работу. В итоге получаем неработающий сервис. Неприятность может застать нас в любое время и в любом месте. И даже если предусмотрительно настроенная нами система мониторинга шлет  об этом тревожные письма и смс, побуждая к вполне закономерным действиям — сделать сервису start и разбираться, что случилось, — не всегда есть для того возможности. Банально, может не быть никаких «электронно-вычислительных машин» под рукой.

Делаем выводы с вышесказанного и решаем, что нужно «что-то», что будет следить за демонами и стартовать их автоматически, если те прикажут долго жить*. Кто-то для таких целей пишет свой скрипт и кидает его в cron, кто-то пользуется готовыми решениями, настраивая их под себя. Одним из таких решений и есть monitord — не самое лучшее, корявое, но, на мой взгляд, самое простое и лично мне подходящее.

 

Установка

На текущую дату — 07.04.2015 — порт monitord помечен как Broken:

# cd /usr/ports/sysutils/monitord
# make config
===> No options to configure

# make install
===> monitord-0.4.1_3 is marked as broken: No public distfiles.
*** Error code 1

Stop.
make: stopped in /usr/ports/sysutils/monitord

Игнорируем этот факт и все-таки устанавливаем порт (запускаем make с ключом -D, устанавливая переменную NO_IGNORE):

# make -DNO_IGNORE install clean

...

=============================================================
Monitord requires procfs(5). Add this line to your fstab(5):
proc /proc procfs rw 0 0
=============================================================

===>&nbsp; Cleaning for monitord-0.4.1_3

 

После установки в системе появляются 3 файла:

  • /usr/local/etc/rc.d/monitord — стартовый скрипт;
  • /usr/local/sbin/monitord — бинарник;
  • /usr/local/etc/monitord.conf.sample — пример конфигурационного файла.

 

Структура конфигурационного файла

/usr/local/etc/monitord.conf.sample:

############################################################################
############################################################################
##
## Monitord Configuration file
##
############################################################################
############################################################################

# You MUST set your email address and the email server to use when sending
# out notices. It will be used if you use the "alert" option below.

email = this@is.your.email.address
smtp-server = this@is.your.email.server

# When specifying options, make sure that they are comma-separated and do NOT
# have any spaces.
#
# user options delay service start script parameters

#root auto,alert 10 inetd   /usr/sbin/inetd -wW
#root auto       10 syslogd /usr/sbin/syslogd
#root auto       10 cron    /usr/sbin/cron
#root auto       20 httpd   /usr/local/etc/rc.d/apache.sh
#root auto,alert 10 sshd    /usr/local/sbin/sshd

 

Одна строка в conf-файле отвечает за один сервис, и поделена на 6 столбцов:

  • user — от имени какого пользователя производить запуск;
  • options — как реагировать, если сервис потух:

auto —  запускать сервис автоматически;
alert — отсылать письмо на почту об инциденте (здесь у меня возникли проблемы, ниже опишу какие);
noauto — не запускать сервис автоматически (имеет смысл при указании этой опции вместе с опцией alert — т.е. просто для уведомлений);

опции указываются через запятую, пробелы между ними не ставим.

  • delay — задержка запуска (секунды);
  • service — имя сервиса;
  • script — скрипт запуска сервиса;
  • parameters — аргументы, передаваемые скрипту запуска.

 

Настройка и запуск

Создаем или копируем с monitord.conf.sample конфигурацинный файл monitord.conf:

# cd /usr/local/etc/
# cp monitord.conf.sample monitord.conf
# ee monitord.conf

Например, для мониторинга apache24, по образу и подобию добавляем строку:

root auto 10 httpd    /usr/local/sbin/apache24 start

Добавляем monitord в автозагрузку и запускаем:

# ee /etc/rc.conf

# MONITORD
monitord_enable="YES"

# /usr/local/etc/rc.d/monitord start

 

Проблемы с отправкой уведомлений

При использовании опции alert необходимо предварительно указать, через что эти алерты слать. Monitord предлагает указать только email получателя и MTA, который доставит alert-письмо этому получателю:

email = admin@provoip.in.ua
smtp-server = mx.provoip.in.ua

К сожалению, править какие-то другие заголовки для отправки уведомлений нельзя. И если уже с неменяемой темой и телом пиcьма смириться можно, то критично важно было бы отредактировать адрес отправителя, потому как сам Monitord туда подставляет следующее:

monitord-notification@www, где www — это у меня имя хоста.

А мой МТА настроен на проверку адреса-отправителя и получив от monitord такое вот письмо, отказывается его дальше передавать:

sender verify fail for <monitord-notification@www>: Unrouteable address

Лично для меня это не критично, поскольку уведомлениями занимается нагиос. Alert’ы я отключаю и пользуюсь только возможностью слежки за демонами и их автоматического старта/рестарта.

Cisco: Настройка привилегий пользователя

 

http://pro-voip.com.ua cisco

Здесь я хочу оставить заметку о том, как в Cisco добавить пользователя, который может выполнять только определенные (явно разрешенные) команды конфигурации. Словами Cisco — наделить пользователя определенными привилегиями.

 

Для начала немного о CLI Command Mode

 

CLI (Command Line Interface) Cisco имеет несколько режимов работы:

  • User EXEC — пользовательский режим; сюда мы попадаем, когда логинимся на Cisco; по дефолту имеет «1» уровень привилегий;
telnet sw-office

Username: admin
Password:

sw-office>

Дефолтный уровень привилегий пользователя можно менять — установить, например «15» — и пользователь при логине на Cisco попадает сразу в привилегированый режим.

  • Privileged EXEC — привилегированый режим; переходим в него из User EXEC режима с помощью команды enable; имеет наивысший — «15» уровень привилегий, соответственно, и полный контроль над железкой
sw-office>enable
Password:
sw-office#
  • Global configuration — режим глобальной конфигурации; переходим в него из Privileged EXEC режима с помощью команды configure terminal
sw-office#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
sw-office(config)#
  • Далее из режима глобальной конфигурации можем переходить в режим конфигурации интерфейса, линии, вланов и т.д.

Режимы работы Cisco CLI, как видим, иерархичны: для того, чтобы поднять какой-нибудь 100-мегабитный порт #17, нужно пройти цепочку Login -> (User EXEC) -> enable -> (Privileged Exec) -> configure terminal -> (Global configuration) -> interface Fa0/17 -> (Interface configuration) -> no shutdown

Т.е. для того, чтобы просто поднять порт, пользователю нужны полные права? По умолчанию, да. Для тех, кого такое положение вещей не устраивает, Cisco предусмотрела  механизм управления привилегиями пользователей через уровни привилегирования (privileges level). О них пойдет речь ниже…

 

Cisco privileges level

 

У Cisco всего есть 16 уровней привилегий — по нумерации от 0 до 15. Уровень «1» — дефолтный пользовательский, уровень «15» — высший привилегированный (полные права доступа). Почему дефолтный пользовательский не «0»? — не знаю.

В итоге у нас остается еще 14 уровней привилегий, которые можно настроить под определенные команды.

Переход между уровнями привилегий осуществляется через команду enable <номер уровня>. Просто enable попытается закинуть в самый привилегированный уровень 15:

sw-office>enable
Password:
sw-office#show privilege
Current privilege level is 15

Попасть в привилегированный режим третьего уровня:

sw-office>enable 3
Password:
sw-office#show privilege
Current privilege level is 3

Из любого уровня в уровень ниже можно попасть уже без пароля:

sw-office#show privilege
Current privilege level is 15
sw-office#enable 2
sw-office#show privilege
Current privilege level is 2

Выйти из привилегированного режима — disable:

sw-office#disable
sw-office>

 

Настройка привилегий 

 

Задача: создать уровень привилегий 3 и позволить пользователям, имеющим к нему доступ, настраивать порты (description, switchport mode, shutdown/no shutdown), смотреть running-config портов и сохранять конфигурацию.

1. Устанавливаем привилегии

Установка привилегий имеет следующий вид:

privilege <режим CLI> level <номер уровня> <разрешенная команда>

sw-office(config)#privilege exec level 3 configure terminal
sw-office(config)#privilege configure level 3 interface
sw-office(config)#privilege interface level 3 description
sw-office(config)#privilege interface level 3 shutdown
sw-office(config)#privilege interface level 3 switchport mode
sw-office(config)#privilege interface level 3 switchport access
sw-office(config)#privilege interface level 3 switchport trunk
sw-office(config)#privilege exec level 3 show running-config
sw-office(config)#privilege exec level 3 write memory

2. Даем пользователям доступ к этим привилегиям

Эту задачу можно решить несколькими способами:

— создать пароль на доступ к уровню через команду enable:

sw-office(config)#enable secret level 3 0 strongpasstolevel3

тогда доступ к привилегированному уровню 3 будут иметь пользователи, знающите пароль (и пользователи с уровнем привилегий выше (4…15).

— создать пользователя, который при логине на Cisco сразу попадает в привилегированный режим уровня 3:

sw-office(config)#username admin secret 0 strongpass
sw-office(config)#username admin privilege 3

тогда доступ к привилегированному уровню будет иметь только этот пользователь (ну и пользователи с уровнем привилегий выше (4…15).

Проверим:

Username: admin
Password:

sw-office#show privilege
Current privilege level is 3

Если это не работает, и при логине пользователь попадает все равно в Exec mode level 1, делаем следующее:

sw-office(config)#aaa authorization exec default local

 

Удаление привилегий

 

Казалось бы, следуя логике конфигурированию Cisco, чтобы удалить те или иные настройки, следует использовать слово no перед командой. И если мы делаем:

sw-office(config)#no privilege exec level 3 configure terminal

то ожидаем в конфиге эту строку больше не видеть. Но работает это не везде. Например, на WS-C3750-48TS-S Version 12.2(55)SE4 команда no работает. А на ME-3400-24FS-A Version 12.2(40r)SE1 получим вот такое:

sw-office-2(config)#no privilege exec level 3 configure terminal
...
sw-office-2#sh running-config
...
privilege exec level 15 configure terminal
privilege exec level 15 configure

Тогда нужно использовать команду сброса (reset) привилегий:

sw-office-2(config)#privilege exec reset configure

Ну вот пока что, в принципе, и все.