Junos как универсальный язык

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

Компания Juniper Networks так же представляет свою собственную операционную систему Junos, которая является их личной разработкой и устанавливается на все оборудование Juniper networks.
Чем же таким примечательна система Junos? Ответ на этот вопрос можно начать с того, что данная ОС ставится практически без изменений на любое оборудование компании, поэтому какую бы железку вы не получили в свое распоряжение, вы всегда найдете знакомый синтаксис команд, и всегда поймете, на какой уровень иерархии системы стоит переместиться, что бы настроить нужный вам функционал. Это очень удобно, потому что зачастую у других вендоров, можно встретить различные приложения их ОС на разных типах оборудования, что усложняет их настройку и добавляет проблем администраторам и инженерам.

Хотелось бы подробнее остановиться на особенностях самой ОС, рассказать о фишках и принципах работы.

ОС Junos является модульной системой, основанной на OS FreeBSD, и доработанной инженерами корпорации под собственные цели и нужды. Что такое модульная система? Это означает что вся работа ОС разбита на отдельные процессы, которые работают независимо друг от друга, и в случае сбоя какого либо процесса, нам вовсе не придется полностью перезапускать всю систему, нарушая работу оборудования на длительный срок, а всего лишь перезапустить этот процесс, что является несомненным плюсом и очень важным при работе на живой сети, с заданными требованиями к времени восстановления и отказоустойчивой работой.

С самого начала хотелось бы показать общий вид конфигурации ОС Junos, просто для общего ознакомления.
!
lab@mxA-1> show configuration
## Last commit: 2012-05-10 14:33:27 UTC by root
version 11.2R1.10;
system {
host-name mxA-1;
root-authentication {
encrypted-password «$1$KI99zGk6$MbYFuBbpLffu9tn2.sI7l1"; ## SECRET-DATA
ssh-dsa «ssh-dss AAAAB3NzaC1kc3MAAACBAMQrfP2bZyBXJ6PC7XXZ+MzErI8Jl6jah5L4/O8BsfP2hC7EvRfNoX7MqbrtCX/9gUH9gChVuBCB+ERULMdgRvM5uGhC/gs4UX+4dBbfBgKYYwgmisM8EoT25m7qI8ybpl2YZvHNznvO8h7kr4kpYuQEpKvgsTdH/Jle4Uqnjv7DAAAAFQDZaqA6QAgbW3O/zveaLCIDj6p0dwAAAIB1iL+krWrXiD8NPpY+w4dWXEqaV3bnobzPC4eyxQKBUCOr80Q5YBlWXVBHx9elwBWZwj0SF4hLKHznExnLerVsMuTMA846RbQmSz62vM6kGM13HFonWeQvWia0TDr78+rOEgWF2KHBSIxL51lmIDW8Gql9hJfD/Dr/NKP97w3L0wAAAIEAr3FkWU8XbYytQYEKxsIN9P1UQ1ERXB3G40YwqFO484SlyKyYCfaz+yNsaAJu2C8UebDIR3GieyNcOAKf3inCG8jQwjLvZskuZwrvlsz/xtcxSoAh9axJcdUfSJYMW/g+mD26JK1Cliw5rwp2nH9kUrJxeI7IReDp4egNkM4i15o= configurator@server1.he»; ## SECRET-DATA
}
login {
user lab {
uid 2000;
class super-user;
authentication {
encrypted-password»$1$84J5Maes$cni5Hrazbd/IEHr/50oY30"; ## SECRET-DATA
}
}
}
services {
ftp;
ssh;
telnet;
}
syslog {
user * {
any emergency;
}
file messages {
any notice;
authorization info;
}
file interactive-commands {
interactive-commands any;
}
}
}
interfaces {
fxp0 {
description «MGMT INTERFACE — DO NOT DELETE»;
unit 0 {
family inet {
address 10.210.14.131/27;
}
}
}
}
!

Это простейший пример настроек необходимых для начала работы с устройством Juniper Networks, которые мы обсудим дальше.

Рассмотреим командного интерфейса системы, описания основных режимов и принципов работы.

После подключения к любому оборудованию Juniper networks вы увидите приветствие командного интерфейса CLI вида:
!
!
login@router_name>
!
!

Это приветствие, так называемого «оперативного» режима работы, который используется для диагностики различных сервисов, настроенных на оборудовании, траблшутинга, просмотра журнала логирования и разнообразных системных запросов, таких как перезагрузка оборудования, или к примеру отключения какой либо линейной карты.
Теперь необходимо сказать о втором режиме работы ОС. Это режим конфигурирования, из которого можно производить настройку оборудования, находящегося под контролем OS Junos. Приветствие режима конфигурирования выглядит так:
!
!
login@router_name#
!
!
Для того что бы перейти в режим конфигурирования необходимо воспользоваться одной из следующих команд:
!
!
lab@host1-b> configure ?
Possible completions:
<[Enter]> Execute this command
exclusive Obtain exclusive lock (other users cannot make changes)
private Work in private database (other's changes do not show)
| Pipe through a command
!
!

т.е. мы видим что можно выбрать режим конфигурирования в режиме exclusive, или в режиме private.
Для того что бы понять, что это значит необходимо знать, что Junos содержит несколько изменяемых конфигураций одновременно, по количеству пользователей редактирующих общую конфигурацию устройства. Это позволяет не путаясь нескольким пользователям производить настройки оборудования и не мешать друг другу.
После этого становится понятно, что в режиме Private мы настраиваем свою собственную копию конфигурации параллельно с другими пользователями настраивающими данное оборудование. Если же возникла необходимость совершить какие либо настройки без возможности изменения конфигурации другими пользователями, то необходимо выбрать режим Exclusive. Так же определенные виды изменений проводятся только из режима Exclusive. Это все основное, что необходимо знать о режимах работы в CLI OS Junos.

О режиме помощи, или подсказок:
Junos, как и большинство остальных ОС имеет систему подсказок, позволяющую посмотреть варианты, доступные для завершения той или иной команды в случае необходимости. Все подсказки, доступны при вводе символа «?». Для наглядности можно привести следующий пример:
!
!
lab@host1-b> show ?
Possible completions:
accounting Show accounting profiles and records
arp Show system Address Resolution Protocol table entries
as-path Show table of known autonomous system paths
authentication-whitelist Show 802.1X White List MAC addresses
bfd Show Bidirectional Forwarding Detection information
bgp Show Border Gateway Protocol information
bridge Show bridging information
chassis Show chassis information
class-of-service Show class-of-service (CoS) information
cli Show command-line interface settings
configuration Show current configuration
connections Show circuit cross-connect connections
!
!
lab@host1-b> show configuration ?
Possible completions:
<[Enter]> Execute this command
> access Network access configuration
> access-profile Access profile for this instance
> accounting-options Accounting data configuration
> applications Define applications by protocol characteristics
+ apply-groups Groups from which to inherit configuration data
> bridge-domains Bridge domain configuration
> chassis Chassis configuration
> class-of-service Class-of-service configuration
> ethernet-switching-options Ethernet-switching configuration options
> event-options Event processing configuration
> firewall Define a firewall configuration
!
!

Ну и так далее. Причем одним из замечательных свойств данной подсказки, является то, что в отличии от других вендоров, OS Junos отображает все, сконфигуренные вами лично имена и названия. Например названия политик, фильтров, названия впн. Это позволяет делать нам следующие вещи:
!
!
lab@host1-b> show configuration interfaces ?
Possible completions:
<[Enter]> Execute this command
<interface-name> Interface name
+ apply-groups Groups from which to inherit configuration data
+ apply-groups-except Don't inherit configuration data from these groups
ge-0/0/0 MGMT Interface — DO NOT DELETE
ge-0/0/1 Interface name
ge-0/0/10 Interface name
ge-0/0/2 Interface name
ge-0/0/6 Interface name
ge-0/0/7 Interface name
ge-0/0/8 Interface name
ge-0/0/9 Interface name
> interface-range Interface ranges configuration
> interface-set Logical interface set configuration
> traceoptions Interface trace options
vlan Interface name
| Pipe through a command
!
!

Что мы тут видим? Мы видим конкретный список интерфейсов, без лишнего мусора с прописанными вами дескрипторами, что зачастую гораздо удобнее чем любая другая команда, используемая для просмотра данной информации.

Вторым видом системы помощи в OS Junos является очень сильный раздел помощи по применению различных команд, и настройки сервисов. Данный раздел можно просмотреть с помощью команды help:
!
!
lab@mxA-1> help topic bgp examples
Examples: Configuring BGP Groups, Peers, and Confederations

Enable BGP and define an EBGP group that recognizes all BGP systems in AS
56 as peers:
[edit]
routing-options {
autonomous-system 23;
}
protocols {
bgp {
group 23 {
type external;
peer-as 56;
!
!

Можно увидеть, что мы получили подсказку по настройке протокола BGP с простыми примерами. Это очень сильный инструментарий встроенный в ОС, о котором не стоит забывать.

Давайте рассмотрим саму структуру конфигурации оборудования фирмы Juniper network.

OS Junos имеет иерархическую и очень логичную структуру. Для того что бы описать настройки какого либо сервиса, будь то протоколы, безопасность, системные настройки, необходимо перейти на соответствующий уровень иерархии и осуществить все настройки там,не перемещаясь по всей конфигурации туда суда. Для перехода на необходимой уровень иерархии надо воспользоваться командой «edit»

Например нам надо настроить протоколы на PE оборудовании нашей сети. Мы заходим на уровень: protocols
!
!
lab@mxA-1> configure
Entering configuration mode

[edit]
lab@mxA-1# edit protocols

[edit protocols]
lab@mxA-1#
!
!

на данном примере видно, что мы находимся на уровне настройки протоколов и можем осуществить настройки данного уровня. Так же дела обстоят с любыми другими настройками OS. Для перемещения на уровень иерерахии вверх необходимо воспользоваться командой up
!
!
lab@mxA-1# edit protocols

[edit protocols]
lab@mxA-1# edit ospf

[edit protocols ospf]
lab@mxA-1# up

[edit protocols]
lab@mxA-1#
!
!

Из примера видно как работает эта команда. Для поднятия на самый верхний уровень необходимо воспользовать командой top.
!
!
[edit protocols]
lab@mxA-1# edit ospf area 0.0.0.0

[edit protocols ospf area 0.0.0.0]
lab@mxA-1# top

[edit]
lab@mxA-1#
!
!

Мы видим что с помощью команды top осуществили переход на самый верхний уровень конфигурации.
Помимо конфигурирования по уровням иерархии, перемещаясь с помощью команд: top, up, edit возможно осуществлять конфигурирование «от корня» т.е. постоянно находясь на верхнем уровне иерархии, просто пользуясь командой »set», и забирвая команды с полным набором пути до необходимого уровня иерархии:
!
!
lab@mxA-1# set protocols ospf area 0.0.0.0 interface all

[edit]
lab@mxA-1#
!
!

мы так и остались на верхнем уровне иерархии не опускаясь до уровня протоколов.

Так же необходимо рассказать о команде «run».
Команда run используется для того что бы выполнять команды оперативного режима из режима конфигурирования. Это очень удобно во время работы, когда очень надоедает прыгать туда сюда без остановки, что бы проверить работу ваших новых настроек.
!
!
[edit]
lab@mxA-1# run show interfaces ge-1/1/9
Physical interface: ge-1/1/9, Enabled, Physical link is Up
Interface index: 159, SNMP ifIndex: 531
Link-level type: Ethernet, MTU: 1514, Speed: 1000mbps, BPDU Error: None,
MAC-REWRITE Error: None, Loopback: Disabled, Source filtering: Disabled,
Flow control: Enabled, Auto-negotiation: Enabled, Remote fault: Online
Device flags: Present Running
Interface flags: SNMP-Traps Internal: 0x0
Link flags: None
CoS queues: 8 supported, 8 maximum usable queues
Current address: 80:71:1f:c2:ec:81, Hardware address: 80:71:1f:c2:ec:81
Last flapped: 2012-05-07 18:07:16 UTC (2d 11:24 ago)
Input rate: 0 bps (0 pps)
Output rate: 0 bps (0 pps)
Active alarms: None
Active defects: None
!
!

Как видно из примера, мы посмотрели свойства интерфейса ge — 1/1/9 из режима конфигурирования. Команда «run» в отличае от подобных команд аналогов, у других OS позволяет выполнять любые действия, доступные из операционного режима OS.

Для просмотра настройк того или иного уровня мы просто указываем что нам необходимо увидеть:
!
!
lab@mxA-1> show configuration protocols
!
!

После более длительного общения с Junos вы привыкните к тому как удобно располагаются настройки и как приятно читать конфигурацию.

Необходимо рассказать о том как применять настройки в OS Junos, насколько это удобно и безопасно.
После того как вы осуществили набор необходимой вам конфигурации, никаких изменений на оборудовании не произойдет, и неожиданных неприятностей тоже. Почему? Потому что для того что бы настройки вступили в силу, надо воспользоваться командой «Commit», которая имеет свои особенности и модификации. Так же в случае явных нарушений в синтаксисе вашей конфигурации оборудование сообщит вам об этом, после выполнения данной команды.
!
!
lab@mxA-1# commit ?
Possible completions:
<[Enter]> Execute this command
and-quit Quit configuration mode if commit succeeds
at Time at which to activate configuration changes
check Check correctness of syntax; do not apply changes
comment Message to write to commit log
confirmed Automatically rollback if not confirmed
| Pipe through a command
[edit]
lab@mxA-1# commit
!
!

Рассмотрим этот пример.
Мы можем просто осуществить команду «Commit», и если у нас все правильно настроено, произойдет применение конфигурации. Так же можно сделать проверку нашей конфигурации без применения с помощью команды «Commit Check». Еще одна очень полезная функция «Commit Confirmed». Данная команда позволяет сделать откат на предыдущую конфигурацию, в случае «не подтверждения» вами через определенный период времени ваших изменений. Если изменения конфигурации привели к каким либо фатальным последствиям: «например вы потеряли управление оборудованием», то, по истечении указанного вами периода времени произойдет откат изменений, и управление к вам вернется.

Использование pipe.
Такая фишка как pipe предоставляет нам дополнительные возможности анализа или просмотра конфигурации, и работы оборудования:
!
!
lab@mxA-1> show configuration | ?
Possible completions:
compare Compare configuration changes with prior version
count Count occurrences
display Show additional kinds of information
except Show only text that does not match a pattern
find Search for first occurrence of pattern
hold Hold text without exiting the — More — prompt
last Display end of output only
match Show only text that matches a pattern
no-more Don't paginate output
request Make system-level requests
resolve Resolve IP addresses
save Save output text to file
trim Trim specified number of columns from start of line
lab@mxA-1> show configuration |
!
!

Следует упомянуть что функция pipe может использоваться несколько раз подряд.

Давайте рассмотрим по порядку варианты:

  1. display.

!
lab@mxC-1> show configuration | display ?
Possible completions:
changed Tag changes with junos:changed attribute (XML only)
commit-scripts Show data after commit scripts have been applied
detail Show configuration data detail
inheritance Show inherited configuration data and source group
omit Emit configuration statements with the ‘omit’ option
set Show ‘set’ commands that create configuration
xml Show output as XML tags
lab@mxC-1> show configuration | display
!

одной из самых важных вещей является display set. что позволяет просматривать конфигурацию в режиме ввода команд:
!
lab@mxA-1> show configuration | display set
set system services ftp
set system services ssh
set system services telnet
set system syslog user * any emergency
set system syslog file messages any notice
set system syslog file messages authorization info
set system syslog file interactive-commands interactive-commands any
!
Таким образом мы можем создавать идентичные куски конфигурации, копируя строки и меняя необходимые параметры не вбивая полностью все заново, например.

2. Compare. Очень удобная функция что бы проверить результаты настроек конфига, который недавно был добавлен. С помощью этой команды можно посмотреть как изменился конфиг после того как вы туда что либо добавили.
!
lab@mxA-1# show | compare
[edit]
+ protocols {
+ ospf {
+ area 0.0.0.0 {
+ interface all;
+ }
+ }
+ }

[edit]
lab@mxA-1#
!

Видно что мы добавили к конфигурации раздел ospf где сказали что все интерфейсы маршрутизатора задействованы в процессе ospf.

3. Команды find match exept count используются для анализа вывода информации на экран терминала, в основном для поиска необходимых значений, среди того множества информации что зачастую выпадает на экран.

4. С помощью команды save мы можем сохранить запрошенные данные в файл для дальнейшего использования. Файл будет храниться на жестком диске нашего оборудования, доступ к которому осуществляется через ftp сервер.

В конце статьи хотелось бы привести основной список быстрых клавиш для работы в ОС Junos:

  • предыдущая введенная команда — клавиша вверх или ctrl+n
  • следующая введенная команда — клавиша вниз или ctrl+p
  • в начало строки — ctrl + a
  • в конец строки — ctrl + e
  • влево на 1 символ — ctrl + b
  • вправо на 1 символ — ctrl + f
  • на одно слово вперед — esc + f
  • на одно слово назад — esc + b
  • удалить символ под курсором — ctrl + d
  • удалить слово под курсором — esc + d
  • удалить слово перед курсором — esc + backspace
  • удалить текст от крусора и до конца строки — ctrl + k
  • удалить строку — ctrl + u
  • вставить удаленный текст — ctrl + y

Это основные особенности и принципы работы с OS Junos, которые должны помочь всем в работе с оборудованием компании Juniper network.