26 февр. 2010 г.

Vyatta 6 Beta

Vyatta 6.0 Beta доступна для загрузки. Там же, где и обычно: http://www.vyatta.org/downloads. Тестируем и ждем финального релиза.


Полный текст сообщения

3 февр. 2010 г.

Пример настройки BGP во Vyatta

Не так давно один хороший человек попросил помочь с настройкой BGP во Vyatta 5.0.2. Этот маршрутизатор используется как граница сети провайдера VoIP. Почти все адреса и номера автономных систем заменены на абстрактные, на всякий случай. Входные данные следующие:

  • Два соседа, оба принимают анонс одной подсети /24 и одного адреса. Один из них (Cogent, если кому интересно) анонсирует значительную часть интернета, второй (Digiport) только свои сети и маршрут по умолчанию.
  • Cogent использует разные маршрутизаторы для приема и выдачи анонсов, и требует использования выделенного адреса в качестве источника.
  • Маршрутизатору Cogent, который отдает маршруты, не должно ничего анонсироваться.
  • В сети, которые анонсирует второй сосед, нужно ходить через него, даже если в анонсах первого они тоже есть.

Обозначим нашу сеть x.x.x.0/24; маршрутизатор Cogent, отдающий анонсы y.y.y.y; принимающий анонсы z.z.z.z; адрес источника для принимаемых нами маршрутов t.t.t.t; адрес второго соседа w.w.w.w. Номер нашей автономной системы обозначим 65501, второго соседа за 65502, Cogent оставим как он есть — 174.

Приступаем к настройке

Активируем процесс BGP, указываем соседей и анонсируемые сети.

edit protocols bgp 65501
set neighbor y.y.y.y remote-as 174    # Отдает нам маршруты из Cogent
set neighbor z.z.z.z remote-as 174    # Принимает наши маршруты в Cogent
set neighbor w.w.w.w remote-as 65502  # Второй сосед
set network x.x.x.0/24                # Наша сеть
set network t.t.t.t/32                # Адрес источника маршрутов из Cogent
exit
commit

Теперь надо что-то сделать с адресом источника маршрутов. Учитывая, что ни для чего больше он не используется, его обычно вешают на петлевой интерфейс (в Cisco это было бы единственным способом, поскольку в качестве источника анонсов там указывался интерфейс, а не адрес).

set interfaces loopback lo address t.t.t.t/32
commit

Настройка политик маршрутизации

Учитывая, что соседи хотят видеть в наших анонсах только нашу сеть, а один из соседей вовсе не должен ничего получать, нам нужно настроить политики маршрутизации. Мы сделаем это с помощью «карт маршрутов» (route-map).

Сначала нужно определить списки сетей (prefix-list), которые будут использованы. Вот список наших сетей:

edit policy prefix-list AdvertisedRoutes
set rule 1 action permit
set rule 1 prefix t.t.t.t/32
set rule 2 action permit
set rule 2 pefix x.x.x.0/24
exit
commit

И соответствующая карта маршрутов: анонсируем сети из списка AdvertisedRoutes, не анонсируем ничего другого.

edit policy route-map Advertise
set rule 1 action permit
set rule 1 match ip address prefix-list AdvertisedRoutes
set rule 2 action deny
exit
commit

Карта маршрутов, запрещающая анонсирование чего бы то ни было:

edit policy route-map NoAdvertise
set rule 1 action deny
exit
commit

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

edit policy route-map DigiportPrioritize
set rule 1 action permit
set rule 1 set weight 10 # Устанавливаем вес 10, по умолчанию он 0
exit
commit

Настройка соседей

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

edit protocols bgp 65501
set neighbor y.y.y.y ebgp-multihop 5
set neighbor y.y.y.y route-map export NoAdvertise
set neighbor y.y.y.y update-source t.t.t.t
exit
commit

Параметр ebgp-multihop отвечает за максимальное расстояние до маршрутизатора, если он не является соединенным напрямую. Параметр update-source определяет, какой адрес будет указан источником анонсов. Опция route-map export указывает карту маршрутов, которая будет применена к исходящим анонсам (для входящих нужно заменить там export на import).

Теперь переходим к тому, который принимает анонсы.

edit protocols bgp 65501
set neighbor z.z.z.z route-map export Advertise
exit
commit

И закончим это все вторым соседом.

edit protocols bgp 65501
set neighbor w.w.w.w route-map export Advertise
set neighbor w.w.w.w route-map import DigiportPrioritize
exit
commit

Настроим маршрут по умолчанию через Cogent, чтобы ходить через него в те сети, которые он не анонсирует, хотя они через него доступны транзитом. (пусть адрес маршрутизатора будет q.q.q.q)

set protocols static route 0.0.0.0/0 next-hop q.q.q.q

Фрагмент конфига

Теперь можно полюбоваться на проделанную работу.

policy {
    prefix-list AdvertisedRoutes {
        rule 1 {
            action permit
            prefix t.t.t.t/32
        }
        rule 2 {
            action permit
            prefix x.x.x.0/24
        }
    }
    route-map Advertise {
        rule 1 {
            action permit
            match {
                ip {
                    address {
                        prefix-list Advertised
                    }
                }
            }
        }
        rule 2 {
            action deny
        }
    }
    route-map DigiportPrioritize {
        rule 1 {
            action permit
            set {
                weight 10
            }
        }
    }
    route-map NoAdvertise {
        rule 1 {
            action deny
        }
    }
}
protocols {
    bgp 65501 {
        neighbor y.y.y.y {
            ebgp-multihop 5
            remote-as 174
            route-map {
                export NoAdvertise
            }
            update-source t.t.t.t
        }
        neighbor z.z.z.z {
            remote-as 174
            route-map {
                export Advertise
            }
        }
        neighbor w.w.w.w {
            remote-as 65502
            route-map {
                export Advertise
                import DigiportPrioritize
            }
        }
        network t.t.t.t/32 {
        }
        network x.x.x.0/24 {
        }
    }
    static {
        route 0.0.0.0/0 {
            next-hop q.q.q.q {
            }
        }
    }
}

Смотрим результат

Vyatta имеет ряд полезных команд операционного режима, позволяющих посмотреть на происходящее.

vyatta@vyatta:~$ show ip bgp neighbors y.y.y.y advertised-routes 
vyatta@vyatta:~$ show ip bgp neighbors z.z.z.z advertised-routes 
BGP table version is 0, local router ID is t.t.t.t
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> t.t.t.t/32       xx.xxx.xx.xx             1         32768 i
*> x.x.x.x.0/24     xx.xxx.xx.xx             1         32768 i

Total number of prefixes 2
vyatta@vyatta:~$ show ip bgp neighbors w.w.w.w advertised-routes 
BGP table version is 0, local router ID is t.t.t.t
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> t.t.t.t/32       zzz.zz.z.zzz             1         32768 35978 35978 35978 35978 i
*> x.x.x.0/24       zzz.zz.z.zzz             1         32768 35978 35978 35978 35978 i

Total number of prefixes 2

Как мы убедились с помощью команды show ip bgp neighbor <адрес> advertised-routes, первому не анонсируется ничего, а остальным наша подсеть и адрес источника. Всех соседей можно увидеть с помощью show ip bgp neighbors.

Список всех полученных маршрутов можно увидеть в show ip bgp. Посмотрим небольшой фрагмент.

BGP table version is 0, local router ID is t.t.t.t
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 0.0.0.0          www.ww.w.www                          10 31846 ?
*> 4.23.112.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.23.113.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.23.114.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.36.118.0/24    xx.xxx.xx.xxx         5010             0 174 21889 i
*> 4.59.23.0/24     xx.xxx.xx.xxx        36990             0 174 33042 i
*> 4.79.98.8/30     www.ww.w.www                          10 31846 i
*> 4.79.248.0/24    xx.xxx.xx.xxx         1000             0 174 12180 12180 12180 12180 12180 i

Как видно, вес у маршрутов от второго соседа действительно поменялся.

С помощью show ip bgp summary можно узнать некоторую общую статистику.

vyatta@vyatta:~$ show ip bgp summary 
BGP router identifier t.t.t.t, local AS number 65501
RIB entries 73927, using 4620 KiB of memory
Peers 3, using 7560 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
y.y.y.y         4   174  331654   30759        0    0    0 01w1d03h    38882
z.z.z.z         4   174   30540   30764        0    0    0 01w1d03h        1
w.w.w.w         4 65502   61550   61503        0    0    0 4d07h43m      159

Total number of neighbors 3

С помощью show ip route можно убедиться, что наши маршруты действительно попали в FIB. Там они имеют префикс B.

Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

B   0.0.0.0/0 [20/0] via www.ww.w.www, 4d07h49m
S>* 0.0.0.0/0 [1/0] via yy.yyy.yy.yyy, eth1
B>* 4.23.112.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.23.113.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.23.114.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.36.118.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
B>* 4.59.23.0/24 [20/36990] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h

Заключение

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

Надеюсь, этот пример настройки окажется кому-то полезным.


Полный текст сообщения