BGP - настраиваем Border Gateway Protocol c помощью Quagga

  • 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:66dde7d35cc68d95a75a0fe425015182' 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\">Вообще-то по&nbsp;настройке Quagga уже есть <a href=\"http://muff.kiev.ua/content/quagga-prevrashchenie-servera-v-polnofunktsionalnyi-marshrutizator\">статья</a>, но решил,&nbsp;что настройке BGP необходимо посвятить отдельную статью. Итак,&nbsp;на днях получила дружественная сеть свою автономную систему и блок адресов. Соответственно необходимо все это дело настроить под собственные нужды, и с этой просьбой и обратилась ко мне.</p>\n<p class=\"rtejustify\">Для глобальной маршрутизации будем использовать протокол BGP, информацию можно получить <a href=\"http://muff.kiev.ua/content/protokol-marshrutizatsii-bgp-perevod-na-russkii\">здесь</a>. Ознакомившись с литературой,&nbsp;приступим к настройке.</p>\n<p class=\"rtejustify\"><strong>Поставленная задача: </strong>получить от провайдера по одному BGP-соединению список сетей UA-IX, по второму - Full-view. Ну а дальше уже можно будет по представленной схеме настраивать соединения с несколькими аплинками.</p>\n<p class=\"rtejustify\"><strong>Исходные данные </strong>(не буду их изменять, думаю ничего криминального и конфиденциального в этой информации нет):</p>\n<ul>\n<li class=\"rtejustify\">Название сети: <strong>ValorNet</strong></li>\n<li class=\"rtejustify\">Номер AS: <strong>50956</strong></li>\n<li class=\"rtejustify\">Блок PI: <strong>194.28.100.0/22</strong></li>\n<li class=\"rtejustify\">Провайдер:&nbsp;&nbsp;<strong>BGNet </strong></li>\n<li class=\"rtejustify\">AS провайдера: <strong>12998</strong></li>\n<li class=\"rtejustify\">Адресация соединения для UA-IX: <strong>195.3.156.216/30</strong> (195.3.156.217 со стороны BGNet, и 195.3.156.218, соответственно, со стороны ValorNet)</li>\n<li class=\"rtejustify\">Адресация соединения для Full-view: <strong>195.3.157.84/30</strong> (195.3.157.85 со стороны BGNet,&nbsp;195.3.157.85 - со стороны ValorNet)</li>\n<li class=\"rtejustify\">Со стороны провайдера уже все настроено согласно исходных данных</li>\n</ul>\n<p class=\"rtejustify\"><a class=\" FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC\" name=\"loopback\"><span style=\"color: #ff0000\"><strong>ПРИМЕЧАНИЕ:</strong></span> </a>для начала советую выделить из выделенного блока IP-адресс для маршрутизации (так называемый router-id), и добавить его на loopback-интерфейс маршрутизатора. В моем случае это <strong>194.28.100.1:</strong></p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>ifconfig lo0 alias 194.28.100.1/32</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь осталось добавить в <strong>rc.conf </strong>следующие строки,&nbsp;чтобы конфигурация сохранилась после перезагрузки:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nifconfig_lo0=&quot;inet 127.0.0.1 netmask 255.0.0.0&quot;\nifconfig_lo0_alias0=&quot;inet 194.28.100.1 netmask 255.255.255.255&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Итак, продолжим. Будем отталкиваться от того,&nbsp;что пакет Quagga уже установален и <strong>zebra </strong>корректно настроена и работает (см. <a href=\"http://muff.kiev.ua/content/quagga-prevrashchenie-servera-v-polnofunktsionalnyi-marshrutizator\">здесь</a>). Для того, чтобы запустить демон <strong>bgpd</strong>, необходимо создать конфигурационный файл:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>touch /usr/local/etc/quagga/bgpd.conf<br />\n </strong># <strong>chown quagga:quagga /usr/local/etc/quagga/bgpd.conf</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Для того, чтобы можно было подключиться к виртуальному&nbsp;терминалу, который предоставляет <strong>bgpd</strong>,&nbsp;необходимо наличие пароля. Соответственно:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>echo \'password pass1\' &gt;&gt; /usr/local/etc/quagga/bgpd.conf<br />\n </strong># <strong>echo \'enable password pass2\' &gt;&gt; /usr/local/etc/quagga/bgpd.conf</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Дальше добавим в <strong>rc.conf</strong> запуск демона <strong>bgpd</strong>, правкой конфигурационного файла <strong>rc.conf</strong> до следующего состояния (за условия, что <strong>zebra </strong>уже настроена и работает):</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><strong># cat /etc/rc.conf | grep quagga</strong><br />quagga_enable=&quot;YES&quot;<br />quagga_daemons=&quot;zebra bgpd&quot;<br />watchquagga_enable=&quot;YES&quot;<br />watchquagga_flags=&quot;-dz -R \'/usr/local/sbin/zebra -d; /usr/local/sbin/bgpd -d\' zebra bgpd&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<pre class=\"rtejustify\">\nТеперь перезапускаем <strong>quagga</strong>, чтобы запустить демон <strong>bgpd</strong>:</pre><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><strong># sh /usr/local/etc/rc.d/quagga restart</strong><br />bgpd not running? (check /var/run/quagga/bgpd.pid).<br />Stopping zebra.<br />Starting zebra.<br />Starting bgpd.</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Дальше настройка идет с виртуальной консоли,&nbsp;которую нам предоставляет демон <strong>bgpd</strong>.&nbsp;Чтобы подключиться к виртуальной консоли, воспользуемся командой telnet и паролями,&nbsp;которые добавили в конфигурационный файл <strong>/usr/local/etc/quagga/bgpd.conf</strong>:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><strong># telnet localhost bgpd</strong><br />Trying ::1...<br />Trying 127.0.0.1...<br />Connected to localhost.<br />Escape character is \'^]\'.</pre><pre class=\"rtejustify\">\nHello, this is Quagga (version 0.99.15).<br />Copyright 1996-2005 Kunihiro Ishiguro, et al.</pre><pre class=\"rtejustify\"><br />User Access Verification</pre><pre class=\"rtejustify\">\nPassword:<br /><br />test.server&gt; <strong>enable</strong><br />Password:<br />test.server#</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Итак,&nbsp;успешно подключились к виртуальному терминалу. Теперь приступаем к настройке.</p>\n<p class=\"rtejustify\">Перейдем в режим глобальной конфигурации:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\">test.server# <strong>configure terminal</strong></span></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Даем название роутеру, исходя из демона маршрутизации (чтобы не путаться в дальнейшем)</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\">test.server(config)# <strong>hostname bgpd-router</strong></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Включаем сервис шифрования паролей</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\">bgpd-router(config)# <strong>service password-encryption</strong></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Настройка логгирования:</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\">bgpd-router(config)# <strong>log stdout\n</strong>bgpd-router(config)# <strong>log file /var/log/quagga/bgpd.log</strong></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Разрешаем коннекты в виртуальному терминалу только с localhost (создаем acl, куда добавляем &quot;разрешенные ip-адреса&quot;, потом этот acl применяем к линии виртуального терминала):</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\">bgpd-router(config)# <strong>access-list 1 remark Localhost only</strong><br />bgpd-router(config)# <strong>access-list 1 permit 127.0.0.1\n</strong>bgpd-router(config)# <strong>line vty\n</strong>bgpd-router(config-line)# <strong>access-class 1\n</strong>bgpd-router(config-line)# <strong>exit</strong></span></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Проверим, что у нас еще нету никакой информации по BGP</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\">bgpd-router(config)# <strong>do show ip bgp summary</strong></span></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">А теперь приступаем непосредственно к настройке BGP. Присвоим роутеру номер автономной системы:</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\">bgpd-router(config)# <strong>router bgp 50956</strong></span></span></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Укажем принудительно идентификатор маршрутизатора (иначе берется наименьший присвоенный маршрутизатору IP-адресс). Этот IP-адресс добавляем на loopback (о том как это сделать, описано <a href=\"#loopback\">выше</a>).</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #ff0000\"><span style=\"color: #000000\">bgpd-router(config-router)# </span><strong><span style=\"color: #000000\">bgp router-id 194.28.100.1</span></strong></span></span></span></span></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Теперь укажем &quot;соседа&quot;. Для начала - только UA-IX (ознакомимся с возможностями BGP),&nbsp; а потом уже настроим роутер для приема Full-view.</p>\n<p class=\"rtejustify\">\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #ff0000\"><span style=\"color: #000000\"><span style=\"color: #000000\">bgpd-router(config-router)# <strong>neighbor 195.3.156.217 remote-as 12998</strong><br />bgpd-router(config-router)# <strong>neighbor 195.3.156.217 description BGNet(UA-IX)</strong></span></span></span></span></span></span></span></span></span></pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Посмотрим, что у нас получилось:</p>\n<p class=\"rtejustify\">\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><span style=\"color: #ff0000\"><span style=\"color: #000000\"><span style=\"color: #000000\"><pre class=\"rtejustify\"><span style=\"color: #000000\">bgpd-router(config-router)# <strong>do show ip bgp summary</strong><br />BGP router identifier 194.28.100.1, local AS number 50956<br />RIB entries 7511, using 704 KiB of memory<br />Peers 1, using 4560 bytes of memory</span></pre><pre class=\"rtejustify\"><span style=\"color: #000000\">Neighbor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V&nbsp;&nbsp;&nbsp; AS MsgRcvd MsgSent&nbsp;&nbsp; TblVer&nbsp; InQ OutQ Up/Down&nbsp; State/PfxRcd<br />195.3.156.217&nbsp;&nbsp; 4 12998&nbsp;&nbsp;&nbsp; 1519&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 00:00:27&nbsp;&nbsp;&nbsp;&nbsp; 3998</span></pre><pre class=\"rtejustify\"><span style=\"color: #000000\">Total number of neighbors 1</span></pre><p> </p></span></span></span></span></span></span></span></span></span></pre></td></tr></tbody></table></p>\n\n\n\n\n\n<p class=\"rtejustify\">Неплохо. Список сетей UA-IX уже получаем. Теперь необходимо &quot;отдать&quot; провайдеру наши сети. Укажем наши сети в конфигурации роутера. Также,&nbsp;настроим дополнительно фильтры, чтобы не отдать чего-либо &quot;лишнего&quot;. Создадим <strong>route-map</strong>, согласно которого будем анонсировать свои сети:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\"><span style=\"color: #000000\">bgpd-router(config-router)# <strong>network 194.28.100.0/22\n</strong>bgpd-router(config-router)# <strong>neighbor 195.3.156.217 route-map ValorNet-Network out\n</strong>bgpd-router(config-router)# </span><strong><span style=\"color: #000000\">exit</span></strong></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Теперь &quot;опишем&quot; этот <strong>route-map</strong>:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router(config)# <strong>route-map ValorNet-Network permit 10\n</strong>bgpd-router(config-route-map)# <strong>description &quot;Include all ValorNet network for announces&quot;</strong><br />bgpd-router(config-route-map)# <strong>match ip address prefix-list ValorNet-AllNets\n</strong>bgpd-router(config-route-map)# <strong>exit</strong></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Далее необходимо создать prefix-list ( в нашем случае ValorNet-AllNets), и перечислить в нем все сети для анонсирования:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router(config)# <strong>ip prefix-list ValorNet-AllNets description &quot;Insert network for announces here&quot;<br /></strong>bgpd-router(config)# <strong>ip prefix-list ValorNet-AllNets seq 10 permit 194.28.100.0/22\n</strong>bgpd-router(config)# <strong>exit</strong></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь осталось только &quot;очистить&quot; анонсы и сохранить конфигурацию:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router# <strong>clear ip bgp 195.3.156.217 out\n</strong>bgpd-router# <strong>copy running-config startup-config</strong><br />Configuration saved to /usr/local/etc/quagga/bgpd.conf</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Настройка BGP-сессии для UA-IX завершена. Теперь соответственно наведу команды, чтобы получить от провайдера full-view:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router# configure terminal\nbgpd-router(config)# router bgp 50956\nbgpd-router(config-router)# neighbor 195.3.157.85 remote-as 12998<br />bgpd-router(config-router)# neighbor 195.3.157.85 description BGNet(World)<br />bgpd-router(config-router)# neighbor 195.3.157.85 route-map ValorNet-Network out</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Проверяем,&nbsp;что у нас получилось:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router# show ip bgp summary\nBGP router identifier 194.28.100.1, local AS number 50956\nRIB entries 598190, using 55 MiB of memory\nPeers 2, using 9120 bytes of memory</pre><pre>\nNeighbor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V&nbsp;&nbsp;&nbsp; AS MsgRcvd MsgSent&nbsp;&nbsp; TblVer&nbsp; InQ OutQ Up/Down&nbsp; State/PfxRcd<br />195.3.156.217&nbsp;&nbsp; 4 12998&nbsp;&nbsp;&nbsp; 1734&nbsp;&nbsp;&nbsp;&nbsp; 103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 01:39:54&nbsp;&nbsp;&nbsp;&nbsp; 4002<br />195.3.157.85&nbsp;&nbsp;&nbsp; 4 12998&nbsp;&nbsp; 58658&nbsp;&nbsp;&nbsp;&nbsp; 103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 01:39:52&nbsp;&nbsp; 322768</pre><pre>\nTotal number of neighbors 2</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">После того,&nbsp;как получил еще и full-view, трафик к некоторым сетям UA-IX-a побежал через мировой канал (поскольку в full-view входят также сети UA-IX-a). Устранить эту оплошность можно несколькими методами. Я остановился на установке для peer-а, от которого получам UA-IX большего значения weight (этим сделал эти маршруты более приоритетными):</p>\n<p class=\"rtejustify\">\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router# configure terminal\nbgpd-router(config)# router bgp 50956\nbgpd-router(config-router)# neighbor 195.3.156.217 weight 10000<br />bgpd-router(config-router)# neighbor 195.3.157.85 weight 5000</pre></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Чтобы изменения вступили в силу, необходимо выполнить reset BGP-сесии с peer\'ом:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre>\nbgpd-router# clear ip bgp 195.3.156.217\nbgpd-router# clear ip bgp 195.3.157.85</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Вот и все. Получаем от провайдера UA-IX и full-view по двум соединениям,&nbsp;анонсируем свою сеть (опять же,&nbsp;в UA-IX и в мир). На этом базовую настройку можно считать оконченной. Для более тонкой настройки - <a href=\"http://muff.kiev.ua/content/protokol-marshrutizatsii-bgp-perevod-na-russkii\">читаем документацию</a>.</p>\n<p class=\"rtejustify\">&nbsp;</p>\n', created = 1767732911, expire = 1767819311, headers = '', serialized = 0 WHERE cid = '2:66dde7d35cc68d95a75a0fe425015182' 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:cf23ce39f09c3debffcebdd4345ad14f' 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>Супер <img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/thumbs_up.gif\" /></p>\n', created = 1767732911, expire = 1767819311, headers = '', serialized = 0 WHERE cid = '2:cf23ce39f09c3debffcebdd4345ad14f' 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:a13fafb38762d849a67f389ab6df1787' 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>Действительно супер!</p>\n<p>Всё отлично написано и то как оно есть!</p>\n<p>Респект Автору!</p>\n<p>С Ув. Олег Torvald</p>\n', created = 1767732911, expire = 1767819311, headers = '', serialized = 0 WHERE cid = '2:a13fafb38762d849a67f389ab6df1787' 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:eab958c16a04e0660a26b5f1b1c9572b' 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><a href=\"http://muff.kiev.ua/content/nastraivaem-border-gateway-protocol-c-pomoshchyu-quagga\" title=\"http://muff.kiev.ua/content/nastraivaem-border-gateway-protocol-c-pomoshchyu-quagga\">http://muff.kiev.ua/content/nastraivaem-border-gateway-protocol-c-pomosh...</a></p>\n<p><a href=\"http://muff.kiev.ua/content/bgp-nastraivaem-border-gateway-protocol-c-pomoshchyu-quagga\" title=\"http://muff.kiev.ua/content/bgp-nastraivaem-border-gateway-protocol-c-pomoshchyu-quagga\">http://muff.kiev.ua/content/bgp-nastraivaem-border-gateway-protocol-c-po...</a></p>\n<p>аналогичны, это забыл дропнуть старую?</p>\n', created = 1767732911, expire = 1767819311, headers = '', serialized = 0 WHERE cid = '2:eab958c16a04e0660a26b5f1b1c9572b' 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:120a155aa9e3e6bbf50d8be3e6238e2d' 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>Статья одна и та же. Есть две ссылки, которые индексируются в поисковых системах и ведут на одну и ту же статью.</p>\n<p class=\"rtejustify\">Когда-то переименовал статью и ссылку, чтобы упорядочить материал к одному стилю названий. А в поисковых системах еще были ссылки на старый адрес. Поэтому старую ссылку оставил рабочей. Пройдет время - должна остаться только одна.</p>\n', created = 1767732911, expire = 1767819311, headers = '', serialized = 0 WHERE cid = '2:120a155aa9e3e6bbf50d8be3e6238e2d' 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:b1f58154e0889ad9e13f315115f79cf2' 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>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767732911, expire = 1767819311, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' 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 = 1767732911, expire = 1767819311, 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 = 1767732911, expire = 1767819311, 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

Вообще-то по настройке Quagga уже есть статья, но решил, что настройке BGP необходимо посвятить отдельную статью. Итак, на днях получила дружественная сеть свою автономную систему и блок адресов. Соответственно необходимо все это дело настроить под собственные нужды, и с этой просьбой и обратилась ко мне.

Для глобальной маршрутизации будем использовать протокол BGP, информацию можно получить здесь. Ознакомившись с литературой, приступим к настройке.

Поставленная задача: получить от провайдера по одному BGP-соединению список сетей UA-IX, по второму - Full-view. Ну а дальше уже можно будет по представленной схеме настраивать соединения с несколькими аплинками.

Исходные данные (не буду их изменять, думаю ничего криминального и конфиденциального в этой информации нет):

  • Название сети: ValorNet
  • Номер AS: 50956
  • Блок PI: 194.28.100.0/22
  • Провайдер:  BGNet
  • AS провайдера: 12998
  • Адресация соединения для UA-IX: 195.3.156.216/30 (195.3.156.217 со стороны BGNet, и 195.3.156.218, соответственно, со стороны ValorNet)
  • Адресация соединения для Full-view: 195.3.157.84/30 (195.3.157.85 со стороны BGNet, 195.3.157.85 - со стороны ValorNet)
  • Со стороны провайдера уже все настроено согласно исходных данных

ПРИМЕЧАНИЕ: для начала советую выделить из выделенного блока IP-адресс для маршрутизации (так называемый router-id), и добавить его на loopback-интерфейс маршрутизатора. В моем случае это 194.28.100.1:

# ifconfig lo0 alias 194.28.100.1/32

Теперь осталось добавить в rc.conf следующие строки, чтобы конфигурация сохранилась после перезагрузки:

ifconfig_lo0="inet 127.0.0.1  netmask 255.0.0.0"
ifconfig_lo0_alias0="inet 194.28.100.1  netmask 255.255.255.255"

Итак, продолжим. Будем отталкиваться от того, что пакет Quagga уже установален и zebra корректно настроена и работает (см. здесь). Для того, чтобы запустить демон bgpd, необходимо создать конфигурационный файл:

# touch /usr/local/etc/quagga/bgpd.conf
# chown quagga:quagga /usr/local/etc/quagga/bgpd.conf

 Для того, чтобы можно было подключиться к виртуальному терминалу, который предоставляет bgpd, необходимо наличие пароля. Соответственно:

# echo 'password pass1' >> /usr/local/etc/quagga/bgpd.conf
# echo 'enable password pass2' >> /usr/local/etc/quagga/bgpd.conf

Дальше добавим в rc.conf запуск демона bgpd, правкой конфигурационного файла rc.conf до следующего состояния (за условия, что zebra уже настроена и работает):

# cat /etc/rc.conf | grep quagga
quagga_enable="YES"
quagga_daemons="zebra bgpd"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/sbin/zebra -d; /usr/local/sbin/bgpd -d' zebra bgpd"
Теперь перезапускаем quagga, чтобы запустить демон bgpd:
# sh /usr/local/etc/rc.d/quagga restart
bgpd not running? (check /var/run/quagga/bgpd.pid).
Stopping zebra.
Starting zebra.
Starting bgpd.

Дальше настройка идет с виртуальной консоли, которую нам предоставляет демон bgpd. Чтобы подключиться к виртуальной консоли, воспользуемся командой telnet и паролями, которые добавили в конфигурационный файл /usr/local/etc/quagga/bgpd.conf:

# telnet localhost bgpd
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

User Access Verification
Password:

test.server> enable
Password:
test.server#

 Итак, успешно подключились к виртуальному терминалу. Теперь приступаем к настройке.

Перейдем в режим глобальной конфигурации:

test.server# configure terminal

Даем название роутеру, исходя из демона маршрутизации (чтобы не путаться в дальнейшем)

test.server(config)# hostname bgpd-router

Включаем сервис шифрования паролей

bgpd-router(config)# service password-encryption

Настройка логгирования:

bgpd-router(config)# log stdout
bgpd-router(config)# log file /var/log/quagga/bgpd.log

Разрешаем коннекты в виртуальному терминалу только с localhost (создаем acl, куда добавляем "разрешенные ip-адреса", потом этот acl применяем к линии виртуального терминала):

bgpd-router(config)# access-list 1 remark Localhost only
bgpd-router(config)# access-list 1 permit 127.0.0.1 bgpd-router(config)# line vty bgpd-router(config-line)# access-class 1 bgpd-router(config-line)# exit

Проверим, что у нас еще нету никакой информации по BGP

bgpd-router(config)# do show ip bgp summary

А теперь приступаем непосредственно к настройке BGP. Присвоим роутеру номер автономной системы:

bgpd-router(config)# router bgp 50956

Укажем принудительно идентификатор маршрутизатора (иначе берется наименьший присвоенный маршрутизатору IP-адресс). Этот IP-адресс добавляем на loopback (о том как это сделать, описано выше).

bgpd-router(config-router)# bgp router-id 194.28.100.1

Теперь укажем "соседа". Для начала - только UA-IX (ознакомимся с возможностями BGP),  а потом уже настроим роутер для приема Full-view.

bgpd-router(config-router)# neighbor 195.3.156.217 remote-as 12998
bgpd-router(config-router)# neighbor 195.3.156.217 description BGNet(UA-IX)

Посмотрим, что у нас получилось:

bgpd-router(config-router)# do show ip bgp summary
BGP router identifier 194.28.100.1, local AS number 50956
RIB entries 7511, using 704 KiB of memory
Peers 1, using 4560 bytes of memory
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
195.3.156.217   4 12998    1519      15        0    0    0 00:00:27     3998
Total number of neighbors 1

Неплохо. Список сетей UA-IX уже получаем. Теперь необходимо "отдать" провайдеру наши сети. Укажем наши сети в конфигурации роутера. Также, настроим дополнительно фильтры, чтобы не отдать чего-либо "лишнего". Создадим route-map, согласно которого будем анонсировать свои сети:

bgpd-router(config-router)# network 194.28.100.0/22
bgpd-router(config-router)# neighbor 195.3.156.217 route-map ValorNet-Network out
bgpd-router(config-router)# exit

 Теперь "опишем" этот route-map:

bgpd-router(config)# route-map ValorNet-Network permit 10
bgpd-router(config-route-map)# description "Include all ValorNet network for announces"
bgpd-router(config-route-map)# match ip address prefix-list ValorNet-AllNets bgpd-router(config-route-map)# exit

 Далее необходимо создать prefix-list ( в нашем случае ValorNet-AllNets), и перечислить в нем все сети для анонсирования:

bgpd-router(config)# ip prefix-list ValorNet-AllNets description "Insert network for announces here"
bgpd-router(config)# ip prefix-list ValorNet-AllNets seq 10 permit 194.28.100.0/22 bgpd-router(config)# exit

Теперь осталось только "очистить" анонсы и сохранить конфигурацию:

bgpd-router# clear ip bgp 195.3.156.217 out
bgpd-router# copy running-config startup-config
Configuration saved to /usr/local/etc/quagga/bgpd.conf

 Настройка BGP-сессии для UA-IX завершена. Теперь соответственно наведу команды, чтобы получить от провайдера full-view:

bgpd-router# configure terminal
bgpd-router(config)# router bgp 50956
bgpd-router(config-router)# neighbor 195.3.157.85 remote-as 12998
bgpd-router(config-router)# neighbor 195.3.157.85 description BGNet(World)
bgpd-router(config-router)# neighbor 195.3.157.85 route-map ValorNet-Network out

 Проверяем, что у нас получилось:

bgpd-router# show ip bgp summary
BGP router identifier 194.28.100.1, local AS number 50956
RIB entries 598190, using 55 MiB of memory
Peers 2, using 9120 bytes of memory
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
195.3.156.217   4 12998    1734     103        0    0    0 01:39:54     4002
195.3.157.85    4 12998   58658     103        0    0    0 01:39:52   322768
Total number of neighbors 2

После того, как получил еще и full-view, трафик к некоторым сетям UA-IX-a побежал через мировой канал (поскольку в full-view входят также сети UA-IX-a). Устранить эту оплошность можно несколькими методами. Я остановился на установке для peer-а, от которого получам UA-IX большего значения weight (этим сделал эти маршруты более приоритетными):

bgpd-router# configure terminal
bgpd-router(config)# router bgp 50956
bgpd-router(config-router)# neighbor 195.3.156.217 weight 10000
bgpd-router(config-router)# neighbor 195.3.157.85 weight 5000

Чтобы изменения вступили в силу, необходимо выполнить reset BGP-сесии с peer'ом:

bgpd-router# clear ip bgp 195.3.156.217
bgpd-router# clear ip bgp 195.3.157.85

Вот и все. Получаем от провайдера UA-IX и full-view по двум соединениям, анонсируем свою сеть (опять же, в UA-IX и в мир). На этом базовую настройку можно считать оконченной. Для более тонкой настройки - читаем документацию.

 

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

Супер

Супер

Действительно супер! Всё

Действительно супер!

Всё отлично написано и то как оно есть!

Респект Автору!

С Ув. Олег Torvald

http://muff.kiev.ua/content/n

Статья одна и та же. Есть две

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

Когда-то переименовал статью и ссылку, чтобы упорядочить материал к одному стилю названий. А в поисковых системах еще были ссылки на старый адрес. Поэтому старую ссылку оставил рабочей. Пройдет время - должна остаться только одна.

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

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

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

Литература

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