С помощью bgpq3 (http://snar.spb.ru/prog/bgpq3/) на удаленной машине формируем prefix-list:
Пример скрипта -
#!/bin/bash
/usr/bin/bgpq3 -l AS1 -J AS1 > /var/www/juniper-prefix/prefix.txt
/usr/bin/bgpq3 -l AS2 -J AS2 >> /var/www/juniper-prefix/prefix.txt
/usr/bin/bgpq3 -l AS3 -J AS3 >> /var/www/juniper-prefix/prefix.txt
/usr/bin/bgpq3 -l AS4 -J AS4 >> /var/www/juniper-prefix/prefix.txt
После выполнения prefix.txt будет иметь вид:
policy-options {
replace:
prefix-list AS1 {
4.36.110.0/24;
10.0.0.0/24;
10.0.1.0/24;
10.0.2.0/24;
10.0.3.0/24;
10.0.4.0/24;
10.0.5.0/24;
10.0.6.0/24;
10.0.7.0/24;
10.0.8.0/24;
10.0.9.0/24;
10.0.10.0/24;
186.65.112.0/20;
}
}
policy-options {
replace:
prefix-list AS2 {
1.1.2.0/24;
64.62.96.0/24;
205.143.159.0/24;
}
}
....
Т.е. это готовая часть конфигурационного файла. Как видим файл мы помещаем в www-директорию. Следует заметить, что доступ к файлу разрешен только с IP juniper. Для периодического формирования prefix-list добавляем запуск скрипта в крон:
crontab -e
0 1 * * * user /user/scripts/juniper-prefix.sh > /dev/null 2>&1
С удаленной стороной мы закончили, переходим к Juniper.
Нам надо забрать и применить файл с конфигурацией. Для этого создаем следующий скрипт:
cat /var/home/user/as-set.sh
#!/bin/sh
cd /var/home/user
/usr/bin/fetch http://10.1.1.1/prefix.txt
echo "Loading and committing changes:"
{
echo "configure dynamic"
echo "load replace prefix.txt"
echo "commit check"
echo "commit comment cron-as-set"
echo "exit"
} | /usr/sbin/cli
echo "Done."
И добавляем выполнение этого скрипта в cron:
crontab -e
1 2 * * * sh /var/home/user/as-set.sh > /var/home/user/test.log
Как видно из скрипта - для хранения листа мы используем dynamic-db. Но следует учитывать, что при выключении, перезагрузке содержимое dynamic-db удаляется. Естественно, что мы не можем ждать до 2-х часов ночи, когда будет выполнятся скрипт. Поэтому добавляем следующий скрипт в /var/db/scripts/event/ и /var/db/scripts/op/ :
% cat /var/db/scripts/event/load-prefix.slax
version 1.0;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
match / {
<op-script-results> {
var $connection = jcs:open();
var $conf-req = <rpc> {
<open-configuration> {
<dynamic>;
}
}
expr jcs:execute($connection, $conf-req);
var $load-rpc = <load-configuration url="/var/home/user/prefix.txt" action="replace" format="ascii">;
var $load-results = jcs:execute( $connection, $load-rpc );
if( jcs:empty( $load-results/..//xnm:error ) ) {
var $commit-results = jcs:execute( $connection, "commit-configuration" );
copy-of $commit-results;
var $unlock-results = jcs:execute( $connection, "unlock-configuration" );
copy-of $unlock-results;
}
else {
copy-of $load-results;
var $unlock-results = jcs:execute( $connection, "unlock-configuration" );
copy-of $unlock-results;
}
expr jcs:close( $connection );
}
}
и добавляем следующие конструкции в конфиг:
system {
scripts {
op {
file load-prefix.slax;
}
}
}
и
event-options {
policy LOAD-PREF {
events [ snmpd_trap_cold_start snmpd_trap_warm_start ];
then {
event-script load-prefix.slax;
}
}
event-script {
file load-prefix.slax;
}
}
Собственно, на этом можно и закончить.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии