ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Архив за Сентябрь, 2008

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

В продолжении статьи Backup конфига Cisco на FTP, не забудем про Juniper.

Допустим что:

192.168.1.3 — IP-адрес Juniper
192.168.1.254 — IP-адрес backup сервера

Приступим:

Для начала на наш FreeBSD backup сервер нужно установить порт, но не тот, что и в случае с циской:

cd /usr/ports/net/p5-Net-Telnet
make install clean

После того как порт установился напишем небольшой perl скрипт:

#!/usr/bin/perl

use Net::Telnet ();

@c=("192.168.1.3");  #Массив с IP-адресами того что будем бекапить
@cn=("juniper.conf");  #Как будет называться конфиг после бекапа
@login=("backup");      #Логин на оборудование
@pass=("passwd");       #Пароль

$ftp="192.168.1.254";
$ftpuser="juniper-backup";      #Логин к FTP
$ftpass="ftpPasswd";           #Пароль к FTP

$maindir="/backup/juniper";     #Папка доступная по FTP

#Определяем папки в $maindir в формате ГОД/МЕСЯЦ/ДЕНЬ/ЧАС куда будет перемещен конфиг после закачки его на FTP
$dir="$maindir/inet";
$backup_dir=`date +"%Y/%m/%d/%H"`;
chomp($backup_dir);
$backup_dir="$dir/$backup_dir";

#Проверяем наличие директории куда будет складываться backup и
#Создаем директорию если её не существует
opendir(D,$backup_dir) or `/bin/mkdir -p $backup_dir`;
closedir D;

#Цикл по массиву с IP-адресами железок
for ($i=0;$i<=$#c;$i++){
        my $h=sprintf("%s",$c[$i]);
        my $conf=sprintf("%s",$cn[$i]);
        my $user=sprintf("%s",$login[$i]);
        my $pas=sprintf("%s",$pass[$i]);

        #Устанавливаем соединение с железкой и ловим строку приглашения
        #ВНИМАНИЕ !!! Ваша строка приглашения может отличаться !!!
        #Все зависит от имени железки, то которое вы ей задали, и логина с которым вы туда стучитесь
        $ses = new Net::Telnet (Timeout => 10,
                        Prompt => '/backup\\@juniper. $/');

        if ($ses->open($h)) {
                #Если соединение установлено
                $ses->login($user, $pas);
                @lines = $ses->cmd("configure");
                my $bcmd=sprintf("save ftp://%s:%s\@%s/%s",$ftpuser,$ftpass,$ftp,$conf);
                #Отправляем команды на backup
                @lines1 = $ses->cmd($bcmd);

        }else{
                warn "Can't: " . $ses->errmsg;
        }
         $ses->close;
        `/bin/sleep 3`;
        #Перемещаем закаченный на FTP конфиг в backup директорию
        #как итог она будет: /backup/cisco/inet/ГОД/МЕСЯЦ/ДЕНЬ/ЧАС
        system(sprintf("/bin/mv %s/%s %s",$maindir,$conf,$backup_dir));
}

Сохраняем наш скрипт, например как backup-juniper.pl

Делаем его запускаемым:

chmod a+x backup-juniper.pl

Вот и все. Осталось проверить его работу запустив руками, а затем, если все нормально, добавить его в crontab:

0 2 * * * root /backup/juniper/backup-juniper.pl

Что означает, что каждый день в 2:00 будет запускаться наш скрипт который сохранит конфиги Juniper в директории /backup/juniper/inet/ГОД/МЕСЯЦ/ДЕНЬ/ЧАС

Удачного вам бекапа !

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Авторы: Николаев Дмитрий (virus (at) subnets.ru) и Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 3,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

У Вас развелось много «железа» ?

Вы хотите, чтобы конфиги складывались на backup сервер автоматом ?

Это дело хорошее. Расскажу вам как это сделать один раз, в автоматическом режиме и забыть волнения по поводу «а если что упадет?».

Упадет — возьмете новую железку, зальете сохраненный конфиг и вперед !

Допустим что:

192.168.1.1 — IP-адрес cisco catalyst 2950 или cisco catalyst 2960
192.168.1.2 — IP-адрес cisco catalyst 3560G или любая другая циска 🙂
192.168.1.254 — IP-адрес backup сервера

Приступим:

Первый способ.

Для начала на наш FreeBSD backup сервер нужно установить порт:

cd /usr/ports/net-mgmt/p5-Telnet-Cisco
make install clean

После того как порт установился напишем небольшой perl скрипт:

#!/usr/bin/perl

use Net::Telnet::Cisco;

@c=("192.168.1.1","192.168.1.2");  #Массив с IP-адресами того что будем бекапить
@cn=("c2950.conf","c3560.conf");  #Как будет называться конфиг после бекапа
@login=("login","login");                 #Логин на оборудование
@pass=("c2950-passwd","c3560-passwd");       #Пароль
@passen=("en_passwd","en_passwd");             #Пароль на enable режим

$ftp="192.168.1.254";
$ftpuser="cisco-backup";      #Логин к FTP
$ftpass="ftpPasswd";           #Пароль к FTP

$maindir="/backup/cisco";     #Папка доступная по FTP

#Определяем папки в $maindir в формате ГОД/МЕСЯЦ/ДЕНЬ/ЧАС куда будет перемещен конфиг после закачки его на FTP
$dir="$maindir/inet";
$backup_dir=`date +"%Y/%m/%d/%H"`;
chomp($backup_dir);
$backup_dir="$dir/$backup_dir";

#Проверяем наличие директории куда будет складываться backup и
#Создаем директорию если её не существует
opendir(D,$backup_dir) or `/bin/mkdir -p $backup_dir`;
closedir D;

#Цикл по массиву с IP-адресами железок
for ($i=0;$i<=$#c;$i++){
        my $h=sprintf("%s",$c[$i]);
        my $conf=sprintf("%s",$cn[$i]);
        my $user=sprintf("%s",$login[$i]);
        my $pas=sprintf("%s",$pass[$i]);
        my $pasen=sprintf("%s",$passen[$i]);

        #Устанавливаем соединение с железкой
        my $session = Net::Telnet::Cisco->new(Host => $h);
        $session->login($user, $pas);
        # Enable mode
        if ($session->enable($pasen)) {
                #Если соединение установлено, то переходим в enable
                $session->errmode("return");
                my $bcmd=sprintf("copy startup-config ftp://%s:%s@%s",$ftpuser,$ftpass,$ftp);
                #Отправляем команды на backup
                my @output = $session->cmd('$bcmd');
                my @output1 = $session->cmd($ftp);
                my @output2 = $session->cmd("$conf");
        }else{
                warn "Can't enable: " . $session->errmsg;
        }
        $session->close;
        `/bin/sleep 3`;
        #Перемещаем закаченный на FTP конфиг в backup директорию
        #как итог она будет: /backup/cisco/inet/ГОД/МЕСЯЦ/ДЕНЬ/ЧАС
        system(sprintf("/bin/mv %s/%s %s",$maindir,$conf,$backup_dir));
}

Сохраняем наш скрипт, например как backup-cisco.pl

Делаем его запускаемым:

chmod a+x backup-cisco.pl

Вот и все. Осталось проверить его работу запустив руками, а затем, если все нормально, добавить его в crontab:

40 2 * * * root /backup/cisco/backup-cisco.pl

Что означает, что каждый день в 2:40 будет запускаться наш скрипт который сохранит конфиги цисок в директории /backup/cisco/inet/ГОД/МЕСЯЦ/ДЕНЬ/ЧАС

Второй способ.

Этот способ основан на кронтабе в самой циске.


Switch> enable
Switch# configure terminal
Switch# kron policy-list backup
Switch(config-kron-policy)# cli copy startup-config ftp://192.168.1.254
Switch(config-kron-policy)# exit
Switch(config)# ip ftp username cisco-backup
Switch(config)# ip ftp password ftpPasswd
Switch(config)# file prompt quiet
Switch(config)# kron occurrence backup at 2:40 recurring
Switch(config)# exit
Switch# wri

Посмотреть текущие kron задания можно командой:

show kron schedule

Удачного вам бекапа !

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Авторы: Николаев Дмитрий (virus (at) subnets.ru) и Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

В ряде задач администрирования требуется получать сообщения по какому-либо событию. Например, в мониторинге при падении/поднятии сервера/сервиса, канала и т.п.
Получать письма на e-mail неактуально, т.к. по себе знаю, хоть почта и проверяется раз в 5 минут, но заглядываю туда гораздо реже. Хотелось бы получить, чтото вроде всплывающих сообщений на экран/мобильник, тогда они точно не останутся без внимания, а также, чтоб эти сообщения приходили без задержки (ну или с минимальной задержкой). Таким условиям удовлетворяют 2 способа доставки сообщений:

Способ 1.

SMS и GSM-модем. Плюсы: сообщение получишь, даже если сидишь в сортире)). Недостатки: покупка/выбор мопеда. Не каждый мопед поедет под FreeBSD. Стоимость от 100 вечнозеленых буказоидов, да и за сами смс-ки придется платить. Тут уж как никак а раскошелиться придется.

Способ 2.

Сервис ICQ и ему подобные. Плюсы: минимум затрат, а в случае подключения мобильника — получаешь плюсы от первого способа. Недостатки: для получения смс на мобилу — нужна соответствующая мобила, которая это поддерживает.

Второй способ более привлекательный, как менее затратный. Самый простой в использовании протокол, как оказалось Jabber, вот его то мы и заюзаем.

Практика:

Первое, что необходимо сделать это создать аккаунт в джабере. В моем примере аккаунт регистрируем на jabber.ru

Второе:

Собираем порт /usr/ports/net-im/p5-Net-XMPP

cd /usr/ports/net-im/p5-Net-XMPP
make install clean

Существуют и другие порты для jabber, но будем использовать этот.

Третье:

Собственно сам крипт, отсылающий сообщение:

#! /usr/bin/perl

use Net::XMPP;
my $con=new Net::XMPP::Client();
$con->Connect(hostname=>"jabber.ru");
$con->AuthSend(username=>"user",
                        password=>"password",
                        resource=>"ALARM!");
my $msg=new Net::XMPP::Message();
$msg->SetMessage(to=>"reciver\@jabber.ru",
                 from=>"user\@jabber.ru",
                 body=>"My First Jabber Message From FreeBSD");
$con->Send($msg);
$con->Disconnect();

Логика скрипта проста. Коннектимся к серверу, отсылаем сообщение и дисконнект:

  1. user@jabber.ru — авторизуется на jabber.ru
  2. user (user@jabber.ru) — отсылает сообщение («My First Jabber Message From FreeBSD«) для reciver (reciver@jabber.ru)
  3. user@jabber.ru — отключается от jabber.ru

Для того, чтобы рассылать сообщение нескольким абонентам, можно создать чат-группу, тогда сообщение посланное кому-то одному, будет переслано всем остальным в группе.

Можно прикрутить русский язык, но об этом позже 🙂 если дойдут руки.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: folio
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Ответ на частые вопросы:

  • Как добавить статический маршут ?
  • Как посмотреть таблицу маршрутизации ?

Для примера будем добавлять маршрут в сеть 10.10.0.0/16 (маска 255.255.0.0) через gateway 10.10.1.1/24

Не забывайте, что маршрут добавится ТОЛЬКО если на вашем компьютере есть IP-адрес который входит в одну подсеть с gateway (в данном примере gateway 10.10.1.1, значит у вас должен быть настроен IP-адрес из сети 10.10.1.0/24 т.к IP-адрес gateway имеет маску /24 (255.255.255.0))

FreeBSD

Добавление:

route add 10.10.0.0/16 10.10.1.1

если после выполнения команды вам говорится, что команда не найдена, то используйте полный путь до команды route (и для других команд):

/sbin/route

так же если прочитать:

man route

то можно узнать, что статический роутинг можно добавить и так:

/sbin/route add -net 10.10.0.0 -netmask 255.255.0.0 10.10.1.1

Просмотр таблицы маршрутизации выполняется командой:

netstat -rn

с полным путем:

/usr/bin/netstat -rn

Удаление:

/sbin/route delete 10.10.0.0/16


Linux

Добавление:

route add -net 10.10.0.0/16 gw 10.10.1.1

альтернатива:

ip route add 10.10.0.0/16 via 10.10.1.1

Просмотр таблицы:

route -n

или используйте:

ip route

Удаление:

route delete -net 10.10.0.0 netmask 255.255.0.0


Windows

Откройте командную строку (cmd).

Добавление:

route add 10.10.0.0 mask 255.255.0.0 10.10.1.1

Просмотр:

route print

Удаление:

route delete 10.10.0.0 mask 255.255.0.0 10.10.1.1


Если у Вас все ещё есть вопросы, то прочтите мануал (инструкцию) к данным командам в Вашей ОС.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 8, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Итак, вы в качестве пограничного маршрутизатора своей AS выбрали маршрутизатор Juniper.

Поздравляю вас ! Вы сделали отличный выбор ! 😉

В этой статье я постараюсь рассказать как настроить протокол BGP на оборудовании этого производителя.

Это не how-to на все случаи в жизни, а пример, с которого можно хоть как-то начать постигать замечательное железо от Juniper.

В качестве примера буду использовать:

Наша автономная система: AS100

Наш префикс: 1.1.0.0/20

Схема подключения:

Два апстрима: AS200 (2.2.2.1/30) и AS300 (3.3.3.1/30)

И один прямой пиринг с AS400 (4.4.4.1/30)

Схема подключения

Схема подключения

Будем подразумевать, что соответствующие IP интерфейсы на маршрутизаторе вы уже настроили. Пример настройки интерфейсов можно посмотреть в этой статье и сделать по аналогии.

Настройка протокола BGP начинается с секции protocols.

Войдем в режим конфигурации:

root@juniper> configure

перейдем в раздел protocols bgp

[edit]
root@juniper#
edit protocols bgp

Начнем с того, что укажем номер своей автономной системы:

[edit protocols bgp]
root@juniper# set
local-as 100

Зададим логирование изменений состояния «соседей» (peer):

[edit protocols bgp]
root@juniper#
set log-updown

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

[edit protocols bgp]
root@juniper#
set advertise-inactive

Зададим route flap damping (так называемые «хлопающие» маршруты):

[edit protocols bgp]
root@juniper#
set damping

Укажем лог файл:

[edit protocols bgp]
root@juniper#
set traceoptions file bgp.log size 1m files 50

Теперь можно приступить к настройке соседей (peer). Как мы условились выше у нас два апстрима. Для удобства создадим группу upstreams:

[edit protocols bgp]
root@juniper# set group upstreams

перейдем в конфигурировние созданной группы:

[edit protocols bgp]
root@juniper# edit group upstreams

Укажем некоторые параметры для всей группы, например тип:

[edit protocols bgp group upstreams]
root@juniper# set type external

И несколько других параметров:

[edit protocols bgp group upstreams]
root@juniper# set description «Upstreams peers»

[edit protocols bgp group upstreams]
root@juniper# no-advertise-peer-as

Для Load-balancing включим multiple-as

[edit protocols bgp group upstreams]
root@juniper# set multipath multiple-as

Создадим первого соседа:

[edit protocols bgp group upstreams]
root@juniper# set neighbor
2.2.2.1 description Prov-1

Зададим его автомномную систему:

[edit protocols bgp group upstreams]
root@juniper# set neighbor
2.2.2.1 peer-as 200

Зададим маршрутные карты, которые будут отрабатываться при импорте маршрутов от этого соседа. У Juniper можно задавать «конвеер» маршрутных карт:

[edit protocols bgp group upstreams]
root@juniper# set neighbor
2.2.2.1 import [ bogus-reject bogus-ases default-route-reject Prov-1-in ]

Зададим маршрутные карты, которые будут отрабатываться при экспорте маршрутов от нас к соседу:

[edit protocols bgp group upstreams]
root@juniper# set neighbor
2.2.2.1 export Prov-1-out

Тоже самое сделаем и по второму апстриму:

[edit protocols bgp group upstreams]
root@juniper# set neighbor
3.3.3.1 description Prov-2

[edit protocols bgp group upstreams]
root@juniper# set neighbor
3.3.3.1 peer-as 300

[edit protocols bgp group upstreams]
root@juniper# set neighbor
3.3.3.1 import [ bogus-reject bogus-ases default-route-reject Prov-2-in ]

[edit protocols bgp group upstreams]
root@juniper# set neighbor
3.3.3.1 export Prov-2-out

Если вы собираетесь оглашать всем соседям этой группы одно и то же, то можно поступить немного проще, задав export сразу для всей группы (но это будет неудобно, т.к. в процессе использования BGP линков вы поймете, что не всегда всем апстримам нужно слать одно и то же):

[edit protocols bgp group upstreams]
root@juniper# set
export upstreams-out

С апстримами разобрались, теперь создадим группу для прямого пиринга:

[edit protocols bgp group upstreams]
root@juniper# up

[edit protocols bgp]
root@juniper# set group peers

[edit protocols bgp]
root@juniper# edit group peers

[edit protocols bgp group peers]
root@juniper# set type external

[edit protocols bgp group peers]
root@juniper# set description «Our peers»

[edit protocols bgp group peers]
root@juniper# no-advertise-peer-as

Создадим запись о прямом пиринге с AS400:

[edit protocols bgp group peers]
root@juniper# set neighbor
4.4.4.1 description Peer-1

[edit protocols bgp group peers]
root@juniper# set neighbor
4.4.4.1 peer-as 400

Т.к. это прямой пиринг, то и принимать от этого соседа мы будем только те маршруты которые относятся к его AS, а не full-view, поэтому в данном случае мы не делаем «конвеер».

[edit protocols bgp group peers]
root@juniper# set neighbor
4.4.4.1 import Peer-1-in

[edit protocols bgp group peers]
root@juniper# set neighbor
4.4.4.1 export Peer-1-out

Так мы выполнили первую часть. Можете взглянуть на свои труды:

[edit protocols bgp group peers]
root@juniper# up

[edit protocols bgp]
root@juniper# show group upstreams

[edit protocols bgp]
root@juniper# show group peers

Для меня оборудование Juniper сильно выделяется на фоне оборудования Cisco Systems тем, что измененная конфигурация вступает в силу только в одном случае, когда вы даете команду commit. До этого момента на маршрутизаторе действует предыдущая «закомиченная» (commited) конфигурация. Перед тем как применять/комитить конфигурацию, можно проверить её на ошибки:

[edit protocols bgp group upstreams]
root@juniper# commit check

Если вы сделали commit check на данном этапе, то Juniper обязательно ругнется на отсутвие маршрутных карт, т.к. мы их прописали у соседей, но ещё не создавали. Вот именно это, кстати не единственное, что меня очень радует в этом оборудовании, т.к. у Cisco Systems можно указать маршрутную карту на соседа, но забыть её создать и Cisco ничего не скажет по этому поводу, а Juniper не даст вам «закомитить» (выполнить команду commit) пока в конфигурации есть ошибки, в данном случае отсутствие маршрутных карт.

Теперь нужно заняться своими префиксами и маршрутными картами.

Перейдем в другую секцию конфигурации и разберемся с нашими маршрутами:

[edit protocols bgp]
root@juniper# top

[edit]
root@juniper# edit routing-options

Укажем свой router-id, обычно это IP адрес из вашего блока который есть на этом маршрутизаторе:

[edit routing-options]
root@juniper# set router-id 1.1.1.1

Снова укажем номер своей AS:

[edit routing-options]
root@juniper# set autonomous-system 100

Тут же зададим название маршрутной карты с политикой для load-balance:

[edit routing-options]
root@juniper# set forwarding-table export per-flow-load-balancing

Создадим статические маршруты для нашего блока /20, (т.к. вы должны уже знать то, что протокол BGP не будет оглашать те маршруты, для которых он не знает next-hop адреса) но разбив его на две части. Сделаем это для того, что бы каким-либо другим соседям, например при установке прямого пиринга с AS400 которая не является вашим апстримом, чтобы оглашать ей маршуты с большей маской и соответвенно они будут иметь больший приоритет при выборе маршрута из данной AS к вам:

[edit routing-options]
root@juniper# set static route
1.1.0.0/21 next-hop 1.1.1.2 retain readvertise

[edit routing-options]
root@juniper# set static route
1.1.8.0/21 next-hop 1.1.1.2 retain readvertise

IP-адрес 1.1.1.2 это следующий маршрутизатор внутри нашей AS100.

Т.к. это пограничный маршрутизатор, а значит «серые» сети не должны выходить за его пределы, выполним следущее (discard):

[edit routing-options]
root@juniper# set route 10.0.0.0/8 discard

[edit routing-options]
root@juniper# set route 172.16.0.0/12 discard

[edit routing-options]
root@juniper# set route 192.168.0.0/16 discard

Не будем «насиловать» лишними маршрутами своих апстримов и будем им оглашать весь блок /20 целиком. Для этого сделаем агрегирование:

[edit routing-options]
root@juniper# set aggregate route 1.1.0.0/20 discard

Посмотрим что получилось в этой секции:

[edit routing-options]
root@juniper# show

Настало время создать маршрутные карты. Начнем с per-flow-load-balancing.

Перейдем в другую секцию:

[edit routing-options]
root@juniper# top

[edit]
root@juniper# edit policy-options

Создадим для per-flow-load-balancing:

[edit policy-options]
root@juniper# set policy-statement per-flow-load-balancing term balance then load-balance per-packet

Приступим к дефолтным маршрутным картам для соседей.

Для начала bogus-reject:

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 127.0.0.0/8 orlonger

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 10.0.0.0/8 orlonger

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 172.16.0.0/12 orlonger

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 192.168.0.0/16 orlonger

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 169.254.0.0/16 orlonger

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 224.0.0.0/4 orlonger

[edit policy-options]
root@juniper# set
policy-statement bogus-reject from route-filter 240.0.0.0/4 orlonger

Так мы задали список маршрутов, теперь укажем что мы с ними хотим сделать, в т.ч., и не принимать такие маршруты:

[edit policy-options]
root@juniper# set
policy-statement bogus-reject then reject

Создадим default-route-reject для запрета приема default gateway по протоколу BGP:

[edit policy-options]
root@juniper# set
policy-statement default-route-reject from route-filter 0.0.0.0/0 exact

[edit policy-options]
root@juniper# set
policy-statement default-route-reject then reject

Создадим bogus-ases для запрета приема «серых» (private) номеров AS:

[edit policy-options]
root@juniper# set
policy-statement bogus-ases from as-path grey-as

[edit policy-options]
root@juniper# set
policy-statement bogus-ases then reject

[edit policy-options]
root@juniper# set
policy-statement as-path grey-as 64512-65535

Пришло время для карт для соседей. В маршрутных картах на in (input) вы можете «играться» с теми или иными маршрутами приходящими от соседей. Фильтровать что-то, поднимать local-prefence и т.п. Для примера покажу как поднять local-prefence на маршрутах, для которых ваш апстрим является origin (т.е. те маршруты, которые принадлежат его AS).

Итак Prov-1-in:

[edit policy-options]
root@juniper# set
policy-statement Prov-1-in term own-as from as-path prov-1-as

[edit policy-options]
root@juniper# set
policy-statement Prov-1-in term own-as then local-preference 200

[edit policy-options]
root@juniper# set
policy-statement Prov-1-in term own-as then accept

Теперь создадим as-path:

[edit policy-options]
root@juniper# set as-path
prov-1-as «.*200»

Т.к. orign AS для маршрута всегда находится в конце as-path, то я и задал регулярное выражение которое ищет AS200 в конце as-path. Подробнее о регулярных выражениях читайте в технической документации по вашей версии JUNOS. Вы можете использовать не только as-path, но и префиксы которые принадлежат данному апстриму. Это на ваш выбор. Я выбрал as-path потому, что бы каждый раз не лазать и не изменять конфиг когда у этого апстрима появится новый блок IP-адресов.

Теперь зададим последний этап обработки приходящих от этого апстрима маршутов и действий с ними. Т.к. у нас full-view, то логично, что мы разрешим все остальное:

[edit policy-options]
root@juniper# set
policy-statement Prov-1-in term final-accept then accept

Тут же вы можете выставить default local-preference для этого апстрима:

[edit policy-options]
root@juniper# set
policy-statement Prov-1-in term final-accept then local-preference 100

Проделайте тоже самое и для Prov-2-in подставив туда его значения создав policy-statement Prov-2-in и as-path с AS300.

Для примера для нашего прямого пира AS400 мы создадим маршрутку с его префиксами, а не с as-path:

[edit policy-options]
root@juniper# set
policy-statement Peer-1-in term own-prefix from prefix-list-filter peer-1-prefix exact

[edit policy-options]
root@juniper# set
policy-statement Peer-1-in term own-prefix then accept

Поднимем local-preference для этих маршрутов выше, чем все остальное:

[edit policy-options]
root@juniper# set
policy-statement Peer-1-in term own-prefix then local-preference 210

Теперь запретим все остальное (т.к. как я уже говорил это прямой пир, а не апстрим, а раз так то принимаем только те префиксы, которые ему принадлежат):

[edit policy-options]
root@juniper# set
policy-statement Peer-1-in term final-reject then reject

Ну и осталось создать peer-1-prefix который мы прописали выше и указать в нем префиксы, которые принадлежат AS400, допустим это будут префиксы:

  • 195.128.0.0/16
  • 77.87.224.0/21

[edit policy-options]
root@juniper# set prefix-list
peer-1-prefix 195.128.0.0/16

[edit policy-options]
root@juniper# set prefix-list
peer-1-prefix 77.87.224.0/21

Итак с приемом маршрутов разобрались, приступим к оглашению наших. Эта задача состоит из двух частей:

  • оглашение агрегированного маршрута для апстримов
  • оглашение разделенного блока /20 для прямого пира

При прописывании всех наших соседей мы использовали разные маршрутные карты для того, что бы у нас была возможность управлять анонсами для каждого соседа по разному. Это вам пригодится для управления входящим в вашу AS трафиком, например prepend`ом.

Начнем с AS200 (первый апстрим) и как мы условились апстримам мы оглашаем агрегированный маршрут:

[edit policy-options]
root@juniper# set
policy-statement Prov-1-out term my-prefix from protocol aggregate

[edit policy-options]
root@juniper# set
policy-statement Prov-1-out term my-prefix from policy our-CIDR-blocks-aggregated

[edit policy-options]
root@juniper# set
policy-statement Prov-1-out term my-prefix then accept

Создадим сам фильтр policy our-CIDR-blocks-aggregated:

[edit policy-options]
root@juniper# set
policy-statement our-CIDR-blocks-aggregated term AS100-prefix from route-filter 1.1.0.0/20 exact

[edit policy-options]
root@juniper# set
policy-statement our-CIDR-blocks-aggregated term AS100-prefix then accept

Т.к. на данном этапе мы всем апстримам оглашаем одно и тоже, то создайте Prov-2-out сами.

Теперь нужно сделать out для нашего прямого пира и оглашать мы ему будем две сети /21:

[edit policy-options]
root@juniper# set
policy-statement Peer-1-out term AS100-prefix from protocol static

[edit policy-options]
root@juniper# set
policy-statement Peer-1-out term AS100-prefix from policy our-CIDR-blocks

[edit policy-options]
root@juniper# set
policy-statement Peer-1-out term AS100-prefix then accept

[edit policy-options]
root@juniper# set
policy-statement Peer-1-out term final-reject then reject

[edit policy-options]
root@juniper# set
policy-statement our-CIDR-blocks term AS100-prefixes from route-filter 1.1.0.0/21 exact

[edit policy-options]
root@juniper# set
policy-statement our-CIDR-blocks term AS100-prefixes from route-filter 1.1.8.0/21 exact

[edit policy-options]
root@juniper# set
policy-statement our-CIDR-blocks term AS100-prefixes then accept

Ну вот вроде на первый взляд и все. Проверим все ли в порядке:

[edit policy-options]
root@juniper# commit check

Если в ответ вы получили сообщение:

configuration check succeeds

значит ошибок в конфигурации нет и вы можете применять её на маршрутизаторе. Сделаем это и добавим комментарий к этому конфигу:

[edit policy-options]
root@juniper# commit comment «My first configuration»

Juniper может хранить до 50-ти «закомиченных» конфигураций и вы всегда можете откатываться к любой их них, поэтому я рекомендую всегда добавлять комментарий к конфигу, чтобы потом различать их 🙂

Посмотреть состояние всех соседей можно командой:

[edit policy-options]
root@juniper# run show bgp summary

Т.к. мы все ещё находимся в режиме конфигурирования нам приходится добавлять ключевое слово run чтобы команда show отработала не на конфигурации.

Если мы выйдем из режима конфигурирования:

[edit policy-options]
root@juniper# exit

то тут слово run добавлять уже не нужно:

root@juniper> show bgp summary

Другие команды для просмотра состояний соседей, пришедших/отправленных им маршрутах и т.п. я рассмотрю в другой статье.

Мануал, по всем командам, вы можете прочитать в технической документации по вашей версии Junos на сайте производителя: www.juniper.net

Рекомендую полистать книгу:

JUNOS Cookbook
By Aviva Garrett
………………………………………..
Publisher: O’Reilly
Pub Date: April 2006
Print ISBN-10: 0-596-10014-0
Print ISBN-13: 978-0-59-610014-8
Pages: 682

Заранее прошу прощения за оЧепЯтки и неточности. По мере нахождения багов и замечаний статья будет изменяться.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 15, среднее: 4,87 из 5)
Загрузка...
Отправить на почту Отправить на почту