Bgpq - автоматизация построения prefix-list

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:08aa1da7603c63ee468c3c1e339332fc' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Являясь сетевым администратором, повседневно работаю с <strong>BGP</strong>. Стоит отметить,&nbsp;что BGP-соединения&nbsp;всегда&nbsp;можно разделить на соединения с апстримами,&nbsp;с клиентами и пиринговые (т.е. паритетные). При настройке паритетных соединений и соединений&nbsp;с клиентами, желательно накладывать <strong>prefix-list</strong> на принимаемые анонсы. Для автоматизации постройки <strong>prefix-list</strong> согласно <strong>as-set</strong>,&nbsp;уже довольно давно пользуюсь утилитой <strong>bgpq</strong>. Утилита автоматически строит префикс-листы, беря за исходные данные номер автономной системы или <strong>as-set</strong>. Утилита становится незаменимой довольно быстро.</p>\n<p class=\"rtejustify\">Для начала,&nbsp;выполним установку утилиты из системы портов:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>cd /usr/ports/net-mgmt/bgpq &amp;&amp; make install clean &amp;&amp; rehash</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">По завершению установки необходимо ознакомиться с ее возможностями. Для&nbsp;подробной информации стоит обратиться к страницам man-руководства, однако если вызвать утилиту без ключей запуска,&nbsp;то в ответ будет выдан короткий хелп:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div># <strong>bgpq</strong></div>\n<div>\n Usage: bgpq [-l name] [-h host] [-p port] [-d] [-Pijosge]|[-f number]|[-F format]|[-G number] [-aq] [-S src] [-H] [-c] [-R masklen] [-bv] objects [EXCEPT objects]<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bgpq -r filename<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -A - try to aggregate routes<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -a - print all routes uncommented<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -b - show unresolved ASes<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -c - include commandline in output<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -d - debugging<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -e - generate standard access-list<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -F - generate output in given format<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -f - generate as-path access-list (number used as starting)<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -G - generate outgoing as-path access-list (number used as starting)<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -g - generate GateD network filter<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -H - do not print headers<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -h - host running irrd (can be set with IRRD_HOST also)<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -i - generate input packet filter<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -I - invert logic of access lists<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -j - generate Juniper filter/as-path groups<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -J - generate Juniper \'load merge\' filter/as-path groups<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -l - name of generated access/prefixlist<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -L - generate last entry as logging one<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o - generate output packet filter<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -P - generate prefixlist (access-list extended by default)<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -p - irrd port (43 by default)<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -q - print only aggregated routes<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Q - be quiet about non-aggregated specifics<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -R - allow more specific routes up to masklen<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -r - recreate file<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -s - print statistics about<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -S - use only specified source (can be set with IRRD_SOURCE)<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaults now are - RADB,RIPE,APNIC<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -v - be more verbose on operations</div>\n<div>&nbsp;</div>\n<div>&quot;objects&quot; mean networks (in prefix aka a.a.a.a/b format,<br />\n autonomous systems (in ASnnn format), as-macros (AS-xxxx format)</div>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Для ознакомления с возможностями bgpq, в качестве обьекта возьмем <strong>as-set</strong> последней найстраиваемой мной сети - <strong>AS-KLNK</strong> (<a href=\"http://kyivlink.com\">kyivlink.com</a>).&nbsp;Допольнительно вывод утилиты будем перенаправлять в утилиту <strong>grep</strong>, чтобы отсеять вставку информации,&nbsp;о том, что&nbsp;вывод сгенерирован именно утилитой <strong>bgpq</strong>.</p>\n<p class=\"rtejustify\">Передадим в <strong>bgpq </strong>только обьект,&nbsp;без указания ключей:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>bgpq <span style=\"color: #ff0000\">AS-KLNK</span> | grep -v generated</strong></p>\n<pre>\nno ip access-list extended UNKNOWN\nip access-list extended UNKNOWN\n permit ip host 91.211.120.0 host 255.255.252.0\n permit ip host 194.28.100.0 host 255.255.252.0\n! overlayed by 194.28.100.0/22 in the same as50956\n! - permit ip host 194.28.100.0 host 255.255.254.0\n! overlayed by 194.28.100.0/22 in the same as50956\n! - permit ip host 194.28.102.0 host 255.255.254.0\n! overlayed by 194.28.100.0/22 in the same as50956\n! - permit ip host 194.28.102.0 host 255.255.255.0\n! overlayed by 194.28.100.0/22 in the same as50956\n! - permit ip host 194.28.103.0 host 255.255.255.0\n permit ip host 195.12.56.0 host 255.255.252.0\n deny ip any any</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">В результате имеем сгенерированный <strong>access-list</strong> с названием UNKNOWN, согласно которого разрешены сети 91.211.120.0/22, 194.28.100.0/22 и 195.12.56.0/22. Также, в виде комментариев, подана информация о том,&nbsp;что&nbsp;сеть&nbsp;194.28.100.0/22 разбита на подсети (самостоятельно создавал эти route objects в&nbsp;RIPE database, поэтому и взял именно&nbsp;этот <strong>as-set</strong> для примера)&nbsp;,&nbsp;однако по факту в <strong>access-list</strong> пошла вся сеть 194.28.100.0/22 целиком,&nbsp;не разрешая разбиение на подсети.</p>\n<p class=\"rtejustify\">Попробуем исправить ситуацию и сделать вывод утилиты более &quot;дружественным&quot;, а вместе с тем и&nbsp;ознакомимся с некоторыми возможностями&nbsp;bgpq&nbsp;.</p>\n<p class=\"rtejustify\">Для начала укажем,&nbsp;что нам необходимо генерировать <strong>prefix-list</strong>. Для этого необходимо воспользоваться ключем <strong>-P</strong>:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>bgpq <span style=\"color: #ff0000\">-P</span> AS-KLNK | grep -v generated</strong></p>\n<pre>\nno ip prefix-list UNKNOWN\nip prefix-list UNKNOWN permit 91.211.120.0/22\nip prefix-list UNKNOWN permit 194.28.100.0/22\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list UNKNOWN permit 194.28.100.0/23\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list UNKNOWN permit 194.28.102.0/23\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list UNKNOWN permit 194.28.102.0/24\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list UNKNOWN permit 194.28.103.0/24\nip prefix-list UNKNOWN permit 195.12.56.0/22</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Отлично... Теперь необходимо присвоить сгенерированному&nbsp;префикс-листу определенное имя. Для этого воспользуемся ключем <strong>-l</strong> и в качестве аргумента передадим необходимое имя:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>bgpq -P<span style=\"color: #ff0000\"> -l</span> AS-KLNK-IN AS-KLNK | grep -v generated<br />\n </strong></p>\n<pre>\nno ip prefix-list AS-KLNK-IN\nip prefix-list AS-KLNK-IN permit 91.211.120.0/22\nip prefix-list AS-KLNK-IN permit 194.28.100.0/22\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list AS-KLNK-IN permit 194.28.100.0/23\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list AS-KLNK-IN permit 194.28.102.0/23\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list AS-KLNK-IN permit 194.28.102.0/24\n! overlayed by 194.28.100.0/22 in the same as50956\n! - ip prefix-list AS-KLNK-IN permit 194.28.103.0/24\nip prefix-list AS-KLNK-IN permit 195.12.56.0/22</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь попробуем &quot;избавиться&quot; от лишних комментариев - при дальнейшем использовании утилиты в скриптах,&nbsp;толку от них немного, поэтому необходимо предвидеть такие ситуации. Для&nbsp;начала воспользуемся ключем <strong>-q</strong>, получив на выходе только агрегированные маршруты:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>bgpq -P -l AS-KLNK-IN <span style=\"color: #ff0000\">-q</span> AS-KLNK | grep -v generated</strong></p>\n<pre>\nno ip prefix-list AS-KLNK-IN\nip prefix-list AS-KLNK-IN permit 91.211.120.0/22\nip prefix-list AS-KLNK-IN permit 194.28.100.0/22\nip prefix-list AS-KLNK-IN permit 195.12.56.0/22</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Однако довольно часто сети &quot;разбиты&quot; на подсети,&nbsp;в таком случае агрегированные маршруты нас не устраивают. Поэтому желательно пользоваться ключем <strong>-Q</strong>, при использовании которого будут перечислены и все специфические маршруты:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>bgpq -P -l AS-KLNK-IN <span style=\"color: #ff0000\">-Q</span> AS-KLNK | grep -v generated</strong></p>\n<pre>\nno ip prefix-list AS-KLNK-IN\nip prefix-list AS-KLNK-IN permit 91.211.120.0/22\nip prefix-list AS-KLNK-IN permit 194.28.100.0/22\nip prefix-list AS-KLNK-IN permit 194.28.100.0/23\nip prefix-list AS-KLNK-IN permit 194.28.102.0/23\nip prefix-list AS-KLNK-IN permit 194.28.102.0/24\nip prefix-list AS-KLNK-IN permit 194.28.103.0/24\nip prefix-list AS-KLNK-IN permit 195.12.56.0/22</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Также можно пользоваться ключем <strong>-A</strong>, чтобы наложить на агрегированный маршрут минимально и максимально допустимые маски:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>bgpq -P -l AS-KLNK-IN <span style=\"color: #ff0000\">-A</span> AS-KLNK | grep -v generated</strong></p>\n<pre>\nno ip prefix-list AS-KLNK-IN\nip prefix-list AS-KLNK-IN permit 91.211.120.0/22\nip prefix-list AS-KLNK-IN permit 194.28.100.0/22 le 23\nip prefix-list AS-KLNK-IN permit 194.28.102.0/23 ge 24 le 24\nip prefix-list AS-KLNK-IN permit 195.12.56.0/22</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">При первом знакомстве можно также использовать ключи <strong>-v</strong> и <strong>-d</strong>, для расширенного вывода работы утилиты.</p>\n<p class=\"rtejustify\">А после знакомства с утилитой можно использовать ее в скриптах для автоматического формирования access и prefix-list\'ов, для дальнейшей передачи их на маршрутизаторы,&nbsp;либо же для сравнения и уведомления на почту о изменениях...</p>\n<p class=\"rtejustify\">&nbsp;</p>\n', created = 1767333169, expire = 1767419569, headers = '', serialized = 0 WHERE cid = '2:08aa1da7603c63ee468c3c1e339332fc' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767333169, expire = 1767419569, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767333169, expire = 1767419569, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

Являясь сетевым администратором, повседневно работаю с BGP. Стоит отметить, что BGP-соединения всегда можно разделить на соединения с апстримами, с клиентами и пиринговые (т.е. паритетные). При настройке паритетных соединений и соединений с клиентами, желательно накладывать prefix-list на принимаемые анонсы. Для автоматизации постройки prefix-list согласно as-set, уже довольно давно пользуюсь утилитой bgpq. Утилита автоматически строит префикс-листы, беря за исходные данные номер автономной системы или as-set. Утилита становится незаменимой довольно быстро.

Для начала, выполним установку утилиты из системы портов:

# cd /usr/ports/net-mgmt/bgpq && make install clean && rehash

По завершению установки необходимо ознакомиться с ее возможностями. Для подробной информации стоит обратиться к страницам man-руководства, однако если вызвать утилиту без ключей запуска, то в ответ будет выдан короткий хелп:

# bgpq
Usage: bgpq [-l name] [-h host] [-p port] [-d] [-Pijosge]|[-f number]|[-F format]|[-G number] [-aq] [-S src] [-H] [-c] [-R masklen] [-bv] objects [EXCEPT objects]
        bgpq -r filename
        -A - try to aggregate routes
        -a - print all routes uncommented
        -b - show unresolved ASes
        -c - include commandline in output
        -d - debugging
        -e - generate standard access-list
        -F - generate output in given format
        -f - generate as-path access-list (number used as starting)
        -G - generate outgoing as-path access-list (number used as starting)
        -g - generate GateD network filter
        -H - do not print headers
        -h - host running irrd (can be set with IRRD_HOST also)
        -i - generate input packet filter
        -I - invert logic of access lists
        -j - generate Juniper filter/as-path groups
        -J - generate Juniper 'load merge' filter/as-path groups
        -l - name of generated access/prefixlist
        -L - generate last entry as logging one
        -o - generate output packet filter
        -P - generate prefixlist (access-list extended by default)
        -p - irrd port (43 by default)
        -q - print only aggregated routes
        -Q - be quiet about non-aggregated specifics
        -R - allow more specific routes up to masklen
        -r - recreate file
        -s - print statistics about
        -S - use only specified source (can be set with IRRD_SOURCE)
             defaults now are - RADB,RIPE,APNIC
        -v - be more verbose on operations
 
"objects" mean networks (in prefix aka a.a.a.a/b format,
autonomous systems (in ASnnn format), as-macros (AS-xxxx format)

Для ознакомления с возможностями bgpq, в качестве обьекта возьмем as-set последней найстраиваемой мной сети - AS-KLNK (kyivlink.com). Допольнительно вывод утилиты будем перенаправлять в утилиту grep, чтобы отсеять вставку информации, о том, что вывод сгенерирован именно утилитой bgpq.

Передадим в bgpq только обьект, без указания ключей:

# bgpq AS-KLNK | grep -v generated

no ip access-list extended UNKNOWN
ip access-list extended UNKNOWN
 permit ip host 91.211.120.0 host 255.255.252.0
 permit ip host 194.28.100.0 host 255.255.252.0
! overlayed by 194.28.100.0/22 in the same as50956
! -  permit ip host 194.28.100.0 host 255.255.254.0
! overlayed by 194.28.100.0/22 in the same as50956
! -  permit ip host 194.28.102.0 host 255.255.254.0
! overlayed by 194.28.100.0/22 in the same as50956
! -  permit ip host 194.28.102.0 host 255.255.255.0
! overlayed by 194.28.100.0/22 in the same as50956
! -  permit ip host 194.28.103.0 host 255.255.255.0
 permit ip host 195.12.56.0 host 255.255.252.0
 deny ip any any

В результате имеем сгенерированный access-list с названием UNKNOWN, согласно которого разрешены сети 91.211.120.0/22, 194.28.100.0/22 и 195.12.56.0/22. Также, в виде комментариев, подана информация о том, что сеть 194.28.100.0/22 разбита на подсети (самостоятельно создавал эти route objects в RIPE database, поэтому и взял именно этот as-set для примера) , однако по факту в access-list пошла вся сеть 194.28.100.0/22 целиком, не разрешая разбиение на подсети.

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

Для начала укажем, что нам необходимо генерировать prefix-list. Для этого необходимо воспользоваться ключем -P:

# bgpq -P AS-KLNK | grep -v generated

no ip prefix-list UNKNOWN
ip prefix-list UNKNOWN permit 91.211.120.0/22
ip prefix-list UNKNOWN permit 194.28.100.0/22
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list UNKNOWN permit 194.28.100.0/23
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list UNKNOWN permit 194.28.102.0/23
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list UNKNOWN permit 194.28.102.0/24
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list UNKNOWN permit 194.28.103.0/24
ip prefix-list UNKNOWN permit 195.12.56.0/22

Отлично... Теперь необходимо присвоить сгенерированному префикс-листу определенное имя. Для этого воспользуемся ключем -l и в качестве аргумента передадим необходимое имя:

# bgpq -P -l AS-KLNK-IN AS-KLNK | grep -v generated

no ip prefix-list AS-KLNK-IN
ip prefix-list AS-KLNK-IN permit 91.211.120.0/22
ip prefix-list AS-KLNK-IN permit 194.28.100.0/22
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list AS-KLNK-IN permit 194.28.100.0/23
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list AS-KLNK-IN permit 194.28.102.0/23
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list AS-KLNK-IN permit 194.28.102.0/24
! overlayed by 194.28.100.0/22 in the same as50956
! - ip prefix-list AS-KLNK-IN permit 194.28.103.0/24
ip prefix-list AS-KLNK-IN permit 195.12.56.0/22

Теперь попробуем "избавиться" от лишних комментариев - при дальнейшем использовании утилиты в скриптах, толку от них немного, поэтому необходимо предвидеть такие ситуации. Для начала воспользуемся ключем -q, получив на выходе только агрегированные маршруты:

# bgpq -P -l AS-KLNK-IN -q AS-KLNK | grep -v generated

no ip prefix-list AS-KLNK-IN
ip prefix-list AS-KLNK-IN permit 91.211.120.0/22
ip prefix-list AS-KLNK-IN permit 194.28.100.0/22
ip prefix-list AS-KLNK-IN permit 195.12.56.0/22

Однако довольно часто сети "разбиты" на подсети, в таком случае агрегированные маршруты нас не устраивают. Поэтому желательно пользоваться ключем -Q, при использовании которого будут перечислены и все специфические маршруты:

# bgpq -P -l AS-KLNK-IN -Q AS-KLNK | grep -v generated

no ip prefix-list AS-KLNK-IN
ip prefix-list AS-KLNK-IN permit 91.211.120.0/22
ip prefix-list AS-KLNK-IN permit 194.28.100.0/22
ip prefix-list AS-KLNK-IN permit 194.28.100.0/23
ip prefix-list AS-KLNK-IN permit 194.28.102.0/23
ip prefix-list AS-KLNK-IN permit 194.28.102.0/24
ip prefix-list AS-KLNK-IN permit 194.28.103.0/24
ip prefix-list AS-KLNK-IN permit 195.12.56.0/22

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

# bgpq -P -l AS-KLNK-IN -A AS-KLNK | grep -v generated

no ip prefix-list AS-KLNK-IN
ip prefix-list AS-KLNK-IN permit 91.211.120.0/22
ip prefix-list AS-KLNK-IN permit 194.28.100.0/22 le 23
ip prefix-list AS-KLNK-IN permit 194.28.102.0/23 ge 24 le 24
ip prefix-list AS-KLNK-IN permit 195.12.56.0/22

При первом знакомстве можно также использовать ключи -v и -d, для расширенного вывода работы утилиты.

А после знакомства с утилитой можно использовать ее в скриптах для автоматического формирования access и prefix-list'ов, для дальнейшей передачи их на маршрутизаторы, либо же для сравнения и уведомления на почту о изменениях...

 

Ваша оценка: Нет Средняя: 4.1 (7 голосов)

Вставай, Україно!

Литература

Нoвая сенсация: Чукoтские хакеры взлoмали счеты.