Перейти к содержимому
Калькуляторы

BIRD+BGP Проблемы с марштрутами

Привет. Возникла необходимость в балансировке трафика между 2 ISP. Решено перейти на BGP. У провайдера запросил серый IP и номер AS. Настроил BIRD, сессия BGP поднялась, но провайдер не видит моих маршрутов. Вопрос как диагностировать подобные неполадки?

Конфиг BIRD

root@pppoe1:~# cat /etc/bird.conf

# Configure logging

log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };

#log birdlog { debug, trace, info, remote, warning, error, auth, fatal, bug };

#log stderr all;

#log "tmp" all;

 

# Override router ID

router id 172.30.100.2;

 

# You can define your own symbols...

#define xyzzy = (120+10);

#define '1a-a1' = (30+40);

 

# Define a route filter...

filter lan__filter {

if net ~ 10.222.0.0/19 then accept;

if net ~ 91.230.72.169/30 then accept;

else reject;

}

 

#filter sink { reject; }

#filter okay { accept; }

 

#include "filters.conf";

 

# Define another routing table

#table testable;

 

# Turn on global debugging of all protocols

#debug protocols all;

 

# The direct protocol automatically generates device routes to

# all network interfaces. Can exist in as many instances as you wish

# if you want to populate multiple routing tables with device routes.

#protocol direct {

# interface "-eth*", "*"; # Restrict network interfaces it works with

#}

 

# This pseudo-protocol performs synchronization between BIRD's routing

# tables and the kernel. If your kernel supports multiple routing tables

# (as Linux 2.2.x does), you can run multiple instances of the kernel

# protocol and synchronize different kernel tables with different BIRD tables.

protocol kernel {

# learn; # Learn all alien routes from the kernel

# persist; # Don't remove routes on bird shutdown

scan time 20; # Scan kernel routing table every 20 seconds

# import none; # Default is import all

export all; # Default is export none

# kernel table 5; # Kernel table to synchronize with (default: mai n)

}

 

# This pseudo-protocol watches all interface up/down events.

protocol device {

scan time 10; # Scan interfaces every 10 seconds

}

 

# Static routes (again, there can be multiple instances, so that you

# can disable/enable various groups of static routes on the fly).

 

protocol bgp {

# disabled;

description "B";

local as 65168;

neighbor 172.30.100.1 as 65500;

# multihop;

# hold time 240;

# startup hold time 240;

# connect retry time 120;

# keepalive time 80; # defaults to hold time / 3

# start delay time 5; # How long do we wait before initial connect

# error wait time 60, 300;# Minimum and maximum time we wait after an erro r (when consecutive

# # errors occur, we increase the delay exponentia lly ...

# error forget time 300; # ... until this timeout expires)

# disable after error; # Disable the protocol automatically when an err or occurs

# next hop self; # Disable next hop processing and always adverti se our local address as nexthop

# path metric 1; # Prefer routes with shorter paths (like Cisco d oes)

# default bgp_med 0; # MED value we use for comparison when none is d efined

# default bgp_local_pref 0; # The same for local preference

 

export all;

import all;

source address 172.30.100.2 ; # What local address we use for the TCP connection

 

# password "secret"; # Password used for MD5 authentication

# rr client; # I am a route reflector and the neighor is my c lient

# rr cluster id 1.0.0.1; # Use this value for cluster id instead of my ro uter id

# export where source=RTS_STATIC;

# export filter {

# if source = RTS_STATIC then {

# bgp_community = -empty-; bgp_community = add(bgp_communi ty,(65000,5678));

# bgp_origin = 0;

# bgp_community = -empty-; bgp_community.add((65000,5678)) ;

# if (65000,64501) ~ bgp_community then

# bgp_community.add((0, 1));

# if bgp_path ~ [= 65000 =] then

# bgp_path.prepend(65000);

# accept;

# }

# reject;

# };

}

#

# Template usage example

#template bgp rr_client {

# disabled;

# local as 65000;

# multihop;

# rr client;

# rr cluster id 1.0.0.1;

#}

#

#protocol bgp rr_abcd from rr_client {

# neighbor 10.1.4.7 as 65000;

#}

 

 

Логи BIRD

 

Mar 23 09:15:35 pppoe1 bird: Restarting protocol kernel1

Mar 23 09:15:35 pppoe1 bird: Restarting protocol device1

Mar 23 09:15:35 pppoe1 bird: Restarting protocol bgp1

Mar 23 09:15:39 pppoe1 bird: sk_open: bind: Cannot assign requested address

Mar 23 09:15:43 pppoe1 bird: sk_open: bind: Cannot assign requested address

Mar 23 09:15:47 pppoe1 bird: sk_open: bind: Cannot assign requested address

Mar 23 09:15:55 pppoe1 bird: sk_open: bind: Cannot assign requested address

Mar 23 09:16:00 pppoe1 bird: sk_open: bind: Cannot assign requested address

Mar 23 09:16:04 pppoe1 bird: sk_open: bind: Cannot assign requested address

Mar 23 09:16:08 pppoe1 bird: sk_open: bind: Cannot assign requested address

 

 

 

Статус BIRD

bird> show protocols

name proto table state since info

kernel1 Kernel master up 09:15

device1 Device master up 09:15

bgp1 BGP master up 09:16 Established

bird> sh route

0.0.0.0/0 via 172.30.100.1 on eth2.244 [bgp1 09:16] * (100) [AS65500i]

bird> ^C

 

 

ifconfig

 

eth2 Link encap:Ethernet HWaddr 90:e2:ba:79:05:e7

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:895898 errors:0 dropped:44 overruns:0 frame:0

TX packets:20765 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:80727888 (76.9 MiB) TX bytes:2471099 (2.3 MiB)

Memory:f7c00000-f7c20000

 

eth2.244 Link encap:Ethernet HWaddr 90:e2:ba:79:05:e7

inet addr:172.30.100.2 Bcast:172.30.100.3 Mask:255.255.255.252

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:6263 errors:0 dropped:0 overruns:0 frame:0

TX packets:7242 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:383584 (374.5 KiB) TX bytes:541609 (528.9 KiB)

 

 

ip r

default via 172.30.100.1 dev eth2.244 proto bird

10.222.0.0/19 dev eth1 proto kernel scope link src 10.222.0.5

172.30.100.0/30 dev eth2.244 proto kernel scope link src 172.30.100.2

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100

 

 

Изменено пользователем Рамиль_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

source address 91.x.x.x ; # What local address we use for the TCP connection
...
172.30.100.0/30 dev eth2.244 proto kernel scope link src 172.30.100.2
...
bird: sk_open: bind: Cannot assign requested address

Думаю этого достаточно чтобы понять где ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

source address 91.x.x.x ; # What local address we use for the TCP connection
...
172.30.100.0/30 dev eth2.244 proto kernel scope link src 172.30.100.2
...
bird: sk_open: bind: Cannot assign requested address

Думаю этого достаточно чтобы понять где ошибка.

Сменил source address 91.x.x.x на source address 172.30.100.2. Маршрутов в bird больше не стало.

 

bird> show route

0.0.0.0/0 via 172.30.100.1 on eth2.244 [bgp1 11:53] * (100) [AS65500i]

bird>

 

В сислоге ошибка пропала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какую сеть вы пытаетесь анонсировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какую сеть вы пытаетесь анонсировать?

Я запутался окончательно в маршрутизации. У меня есть два адреса 172.30.100.1 and 172.30.100.2 что бы мой роутер поднял TCP-соединение с роутером провайдера. На этом соединение поднялась bgp-сессия. От провайдера у меня есть еще 1 белый IP-адрес 91.х.х.х в 30 сети. На PC с Debian на борту я настроил eth2.244 (ip 172.30.100.2) Поднялось TCP-соединение.Далее BGP-сессия поднялась между neighbor as 65500 и local as 65168. Задача: мне нужно отправить провайдеру маршрут до моего белого адреса подсети 30, в которой находится мой белый адрес.

Я пока нигде не ошибаюсь в логике работы BGP?

Изменено пользователем Рамиль_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Или тупо прописать выданный /30 на интерфейсе и использовать свободный адрес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Или тупо прописать выданный /30 на интерфейсе и использовать свободный адрес.

Дальше планируется ходить в инет с этим белым ИП и через другого провайдера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рамиль_

Это невозможно принципиально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рамиль_

Это невозможно принципиально.

Почему нет то? Для одного провайдера я буду eBGP маршрутизатором, для другого iBGP. Так не взлетит что ли?

Изменено пользователем Рамиль_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Потому что вам провайдер выдал диапазончег 91.х.х.х/30. Мало того что любой уважающий себя ISP реджектит префиксы длиннее 24-х бит, так вы же ему пытаетесь анонсить эту сетку.

 

Так не взлетит что ли?

ТАК не взлетит )))

 

ЗЫ. Я бы вообще послушал изначальную задачу. Чего хотите сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Потому что вам провайдер выдал диапазончег 91.х.х.х/30. Мало того что любой уважающий себя ISP реджектит префиксы с маской более 24-х бит, так вы же ему пытаетесь анонсить эту сетку.

 

Так не взлетит что ли?

ТАК не взлетит )))

 

ЗЫ. Я бы вообще послушал изначальную задачу. Чего хотите сделать?

Есть 2 ISP. 1 основной, 2 в резерве. Основной вечерами в полке. Хочу использовать оба канала с нормальной балансировкой нагрузки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С этого и надо было начинать. Балансировать вы можете только исходящий трафик. BGP служит немного для других целей. В вашем случае, кмк, достаточно ip rule + ip route.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сервис работающий на IP ISP1 никакими танцами не сможет работать через ISP2.

Для этого нужно купить/взять в аренду /24 блок IP + AS и уже ИХ анонсировать любому числу провайдеров. Других путей нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сервис работающий на IP ISP1 никакими танцами не сможет работать через ISP2.

Для этого нужно купить/взять в аренду /24 блок IP + AS и уже ИХ анонсировать любому числу провайдеров. Других путей нет.

 

Не согласен. Задача ТС: "планируется ходить в инет с этим белым ИП и через другого провайдера" может выполняться. А вот ответы мира ТС через второго провайдера будут только при суммарном совпадении следующих условий:

 

1. Второй провайдер анонсирует в мир адрес ТС/32. Скорее ОнАнсирует)))

2. Все согласны редистрибутить его /32. ВЕСЬ МИР.

3. Канеш все отключают у себя фильтры из ripe/arin и остальных регуляторов

 

Чисто теоретически - возможно. Но не более.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Под первые два условия замечательно подпадают анонсы с комьюнити типа ХХХХХ:666 )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.