ISP Servis: Расширенная настройка BGP, load balancing
Расширенная настройка BGP, load balancing
Пример настройки будем рассматривать на конфигурационном файле Cisco/Quagga.
После того, как нам удалось удачно подсоединиться к двум интернет провайдерам, перед нами встает вопрос в каком режиме использовать оба подключения к сети Интернет.
Существуют два варианта
- Один провайдер главный, через него идет весь наш трафик в обе стороны. Второй провайдер является так называемым BackUp провайдером,
трафик через него идет в случае поломки первого провайдера.
- Второй вариант использования двух подключений более утонченный -
BGP роутер балансируем трафик между двумя провайдерами на основании нами установленных правил.
Первый вариант представлен в примерах базовой конфигурации BGP, в данной главе мы рассмотрим второй вариант.
Заданные критерии для балансировки -
Исходящий трафик - OUT
1. Исходящий трафик приоритетно направляется в Интернет через ISP2.
2. Весь исходящий трафик, идущий на IP адреса и в АС нашего провайдера ISP1 направлять к нему напрямую
3. Весь исходящий трафик, идущий в АС провайдеров нашей страны XY-NIX, направлять тоже через ISP1, т.к. у него внутренний трафик дешевле
4. Весь исходящий трафик, идущий на IP адреса из сетей 70.0.0.0/8, 80.0.0.0/8, 90.0.0.0/8, 100.0.0.0/8, направлять тоже через ISP1.
Входящий трафик - IN
1. Принимать 70% входящего трафика через ISP2.
2. Остальные 30% принимать через ISP1.
Для этого создаем следующую конфигурацию роутера -
interface FastEthernet0/0
ip address 192.168.255.29 255.255.255.248
duplex auto
speed auto
!
interface FastEthernet0/1
ip address 10.10.10.101 255.255.255.252
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 109.205.241.1 255.255.255.0 secondary
ip address 109.205.242.1 255.255.255.0 secondary
ip address 109.205.243.1 255.255.255.0 secondary
ip address 109.205.244.1 255.255.255.0 secondary
ip address 109.205.245.1 255.255.255.0 secondary
ip address 109.205.246.1 255.255.255.0 secondary
ip address 109.205.247.1 255.255.255.0 secondary
ip address 109.205.240.1 255.255.255.0
duplex auto
speed auto
Первым делом мы должны прописать IP адреса на сетевых интерфейсах - Fa0/0 для ISP1, Fa0/1 для ISP2,
Fa1/0 - сетевая карта, подключенная к нашей сети. Этот интерфейс является default gateway для
хостов, подключенных к отдельным сетям /24 из нашего префикса 109.205.240.0/21
Далее следует конфигурация BGP процесса -
router bgp 12345
no synchronization
bgp router-id 192.168.255.25
bgp log-neighbor-changes
network 109.205.240.0 mask 255.255.248.0
network 109.205.240.0 mask 255.255.255.0
network 109.205.241.0 mask 255.255.255.0
network 109.205.242.0 mask 255.255.255.0
network 109.205.243.0 mask 255.255.255.0
network 109.205.244.0 mask 255.255.255.0
network 109.205.245.0 mask 255.255.255.0
network 109.205.246.0 mask 255.255.255.0
network 109.205.247.0 mask 255.255.255.0
neighbor 192.168.255.29 remote-as 11111
neighbor 192.168.255.29 description ISP1
neighbor 192.168.255.29 next-hop-self
neighbor 192.168.255.29 soft-reconfiguration inbound
neighbor 192.168.255.29 route-map ISP1-in in
neighbor 192.168.255.29 route-map ISP1-out out
neighbor 10.10.10.101 remote-as 22222
neighbor 10.10.10.101 description ISP2
neighbor 10.10.10.101 next-hop-self
neighbor 10.10.10.101 soft-reconfiguration inbound
neighbor 10.10.10.101 route-map ISP2-in in
neighbor 10.10.10.101 route-map ISP2-out out
!
ip route 109.205.240.0 255.255.248.0 Null0
В данной части мы описали отдельно каждого нашего пиринг партнера, детальная информация по поводу отдельных пунктов этой части
доступна в статье о конфигурации BGP на cisco или quagga.
Единственное отличие расширенной конфигурации от простой - определение сетей /24 из выданного нам /21 префикса по отдельности.
Это делается для того, чтобы анонсировать не только наш главный /21 префикс, но и подсети. Разбив /21 на подсети по /24, мы получаем
возможность анонсировать одну часть нашего префикса через ISP1, а вторую через ISP2.
Этим самым мы добьемся балансировки входящего трафика в нужной нам пропорции (у нас это 70/30).
После описания bgp процесса, самое время настроить фильтры на основании которых мы будем, с помощью route-map, осуществлять
приоритизацию маршрутов и как итог получим балансировку трафика:
ip as-path access-list 1 permit _6451[2-9]_
ip as-path access-list 1 permit _645[2-9][0-9]_
ip as-path access-list 1 permit _64[6-9][0-9][0-9]_
ip as-path access-list 1 permit _65[0-9][0-9][0-9]_
!
ip as-path access-list 47 permit _11111$
!
!
ip prefix-list bogons description bogus nets
ip prefix-list bogons seq 20 permit 127.0.0.0/8 le 32
ip prefix-list bogons seq 30 permit 10.0.0.0/8 le 32
ip prefix-list bogons seq 35 permit 172.16.0.0/12 le 32
ip prefix-list bogons seq 40 permit 192.168.0.0/16 le 32
ip prefix-list bogons seq 45 permit 169.254.0.0/16 le 32
ip prefix-list bogons seq 50 permit 224.0.0.0/4 le 32
ip prefix-list bogons seq 55 permit 240.0.0.0/4 le 32
!
ip prefix-list our-block-in seq 5 permit 109.205.240.0/21 le 32
Первым делом создаются prefix и as-path листы, которыми мы будем фильтрировать на входе в нашу АС не нужные адреса и номера АС.
Обратите внимание на ip as-path access-list 47 - этим листом мы помечаем маршруты приходящие к нам напрямую из Автономной сиситемы нашего первого провайдера.
Это понадобится при приоритизации трафика в АС первого провайдера. Если этого не сделать, то т.к. local preference у ISP1 ниже, чем у ISP2, весь трафик
к ISP1 в сеть пойдет через ISP2, а не напрямую.
Используя в route-map комманду ip prefix-list our-block-in мы запретим принимать из интернета наш собственный префикс.
ip prefix-list ISP2-out seq 10 permit 109.205.240.0/21
ip prefix-list ISP2-out seq 20 permit 109.205.240.0/24
ip prefix-list ISP2-out seq 30 permit 109.205.241.0/24
ip prefix-list ISP2-out seq 40 permit 109.205.242.0/24
ip prefix-list ISP2-out seq 50 permit 109.205.243.0/24
ip prefix-list ISP2-out seq 60 permit 109.205.244.0/24
ip prefix-list ISP2-out seq 70 permit 109.205.245.0/24
!
ip prefix-list ISP1-out seq 10 permit 109.205.240.0/21
ip prefix-list ISP1-out seq 20 permit 109.205.247.0/24
ip prefix-list ISP1-out seq 30 permit 109.205.246.0/24
!
ip prefix-list priority seq 10 permit 70.0.0.0/8 le 32
ip prefix-list priority seq 20 permit 80.0.0.0/8 le 32
ip prefix-list priority seq 30 permit 90.0.0.0/8 le 32
ip prefix-list priority seq 40 permit 100.0.0.0/8 le 32
!
ip as-path access-list 50 permit _51025$
ip as-path access-list 50 permit _25234$
ip as-path access-list 50 permit _20940$
ip as-path access-list 50 permit _2686$
ip as-path access-list 50 permit _5400$
ip as-path access-list 50 permit _15685$
ip as-path access-list 50 permit _42477$
ip as-path access-list 50 permit _29321$
ip as-path access-list 50 permit _43614$
ip as-path access-list 50 permit _2852$
ip as-path access-list 50 permit _174$
ip as-path access-list 50 permit _15425$
ip as-path access-list 50 permit _35592$
ip as-path access-list 50 permit _25192$
ip as-path access-list 50 permit _39235$
ip as-path access-list 50 permit _39392$
ip as-path access-list 50 permit _29208$
ip as-path access-list 50 permit _15614$
ip as-path access-list 50 permit _34695$
ip as-path access-list 50 permit _25512$
ip as-path access-list 50 permit _42306$
ip as-path access-list 50 permit _25248$
ip as-path access-list 50 permit _39791$
Описание prefix-list и as-path list
- В префикс листах ISP2-out и ISP1-out мы прописали наши сети /24 в пропорции 70/30.
- Префикс листом priority определяются все адреса в сетей 70/8, 80/8, 90/8, 100/8.
Затем, в route-map мы назначим высокий приоритет для провайдера ISP1 и через него пойдет трафик на эти 4 сети.
- C помощью as-path 50 мы прописали все Автономные системы участников нашего XY-NIX, а нам известны АС номера всех участников точки обмена трафиком.
На его основании мы выставим высокий приоритет для ISP1 и весь исходящий трафик в XY-NIX таким образом будет направлен через ISP1.
Далее следуют route-map для каждого из двух наших провайдеров:
route-map ISP1-out permit 100
match ip address prefix-list ISP1-out
!
route-map ISP1-out deny 200
!
route-map ISP1-in deny 100
match ip address prefix-list bogons our-block-in
match as-path 1
!
route-map ISP1-in permit 200
match as-path 47
set weight 400
!
route-map ISP1-in permit 300
match ip address prefix-list priority
set weight 300
!
route-map ISP1-in permit 400
match as-path 50
set weight 300
Описание route map ISP1-out
Разрешаем анонсировать в сеть ISP1 только 3 сети, прописанные в префикс листе ISP1-out, все остальные сети блокируем и
в интернет черех ISP1 не пропускаем
Описание route map ISP1-in
- В deny 100 мы запрещаем принимать из Интернета все не нужные нам IP адреса и номера Автономных систем.
- Далее в permit 200 строкой match as-path 47 + match as-path 47 мы говорим роутеру, что всем маршрутам из АС (начинающимся на _11111$)
мы выставляем приоритет на роутере weigh 400. Это значит, что на все сети, которые принадлежат ISP1, будет направляться исходящий от нас трафик напрямую. Последний
- В permit 300 назначается приоритет weigh 300 для всех префиксов из сетей, описанных в префикс листе priority.
Таким образом исходящий трафик на 70.0.0.0/8, 80.0.0.0/8, 90.0.0.0/8, 100.0.0.0/8 направляется тоже через ISP1.
- И последним пунктом выставляется высокий приоритет на роутере weigh 300 для всех маршрутов, которые имеют свое начало
в Автономных системах, описанных в листе 50, а это XY-NIX.
В итоге, мы выполнили заданные нами условия по исходящему и частично по входящему трафику по отношению к провайдеру ISP1.
Рассмотрим route map для ISP2 -
route-map ISP2-out permit 100
match ip address prefix-list ISP1-out
!
route-map ISP2-out deny 200
!
route-map ISP2-in deny 100
match ip address prefix-list bogons out-block-in
match as-path 1
!
route-map ISP2-in permit 200
set local-preference 300
Описание route map ISP2
- match ip address prefix-list ISP1-out - анонсируем в ISP2 только оставшиеся 70% нашей /21 сети. Этим мы добились
балансировки входящего трафика 70/30 между двумя провайдерами
- permit 200 - set local-preference 300 - Назначим для ISP2 самый высокий приоритет для исходящего трафика из всей нашей АС.
Т.е. все маршруты на сети и номера АС, которые не были помечены фильтрами для ISP1 получат исходящего провайдера ISP2 как главного.
Несколько слов к конфигурации балансировки входящего трафика.
Баланс производится с помощью разделения /21 на более мелкие сети и анонсирования их разным провайдерам.
Как было видно в конфигурации, мы анонсировали нашим провайдерам не только /24, но и целые /21 сети, причем каждому.
Это сделано для того, чтобы в случае аварии у провайдера ISP1, наши сети 109.205.247.0/24 и 109.205.246.0/24 были также
доступны и через провайдера ISP2 всему Интернету. Точно такая же ситуация и наоборот. Если мы не будем анонсировать всю нашу
сеть /21 вместе с подсетями, то в случае аварии часть сетей не будет доступна из Интернета.
При такой конфигурациине стоит забывать прописывать отдельные route обьекты в RIPE базе данных для каждой /24 сети.
Наши провайдеры на своих BGP маршрутизаторах увидят следующую информацию, переданную нами и перешлют ее дальше в Интернет -
AS11111
AS11111#show ip bgp neighbors 192.168.255.25 received-routes
BGP table version is 39, local router ID is 192.168.255.29
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 109.205.240.0/24 192.168.255.25 0 0 1943 i
*> 109.205.240.0/21 192.168.255.25 0 0 1943 i
*> 109.205.241.0/24 192.168.255.25 0 0 1943 i
*> 109.205.242.0/24 192.168.255.25 0 0 1943 i
*> 109.205.243.0/24 192.168.255.25 0 0 1943 i
*> 109.205.244.0/24 192.168.255.25 0 0 1943 i
*> 109.205.245.0/24 192.168.255.25 0 0 1943 i
Total number of prefixes 7
AS22222
AS22222#sh ip bgp neighbors 10.10.10.101 received-routes
BGP table version is 39, local router ID is 10.10.10.102
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 109.205.240.0/21 10.10.10.101 0 0 1943 i
*> 109.205.246.0/24 10.10.10.101 0 0 1943 i
*> 109.205.247.0/24 10.10.10.101 0 0 1943 i
Total number of prefixes 3