Jump to content
Калькуляторы

bird. Начальная настройка

Доброго времени суток!

 

Пытаюсь настроить взаимодействие с аплинком по bgp. Centos 7,  BIRD 1.4.5 . Хочу принять FV и поместить в отдельную таблицу роутинга (сделано) и отдать только свой префикс. В принципе все довольно прозаично. На время тестов используем ASN 64555

Что делал:

protocol bgp {
	router id x.x.x.210;
	description "My BGP uplink";
	local as 64555;
	neighbor x.x.x.209 as 6xxx4;
	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 error (when consecutive
	error forget time 300;	# ... until this timeout expires)
	next hop self;		# Disable next hop processing and always advertise our local address as nexthop
	path metric 1;		# Prefer routes with shorter paths (like Cisco does)
	default bgp_med 0;	# MED value we use for comparison when none is defined
	default bgp_local_pref 0;	# The same for local preference
	source address x.x.x.210;	# What local address we use for the TCP connection

	import filter up_in;
	export filter up_out;
}

function pref_from_myasset()
	prefix set pref_from_64555;
	{
	pref_from_64555 = [ z.z.z.0/24  ];
	if net ~ pref_from_64555 then return true;
	return false;
}


filter up_out {
	if pref_from_myasset() then
		{
			bgp_community = -empty-; #не отправляем никаких коммьюнити
			bgp_path.prepend(64555); #добавляем prepend
			accept;
		}
reject;
}

в попытке отфильтровать только свой префикс.

Вот что вижу:

birdcl show protocols all bgp1
BIRD 1.4.5 ready.
name     proto    table    state  since       info
bgp1     BGP      master   up     19:26:29    Established
  Description:    My BGP uplink
  Router ID:      x.x.x.210
  Preference:     100
  Input filter:   up_in
  Output filter:  up_out
  Routes:         88196 imported, 2 exported, 88196 preferred
  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:          88528          0        332          0      88196
    Import withdraws:            0          0        ---        332          0
    Export updates:          88198      88196          0        ---          2
    Export withdraws:            0        ---        ---        ---          0
  BGP state:          Established
    Neighbor address: x.x.x.209
    Neighbor AS:      6xxx4
    Neighbor ID:      v.v.v.101
    Neighbor caps:    refresh restart-aware AS4
    Session:          external AS4
    Source address:   x.x.x.210
    Hold timer:       82/90
    Keepalive timer:  63/80

Т.е., как я понял, пытаемся анонсить все, что получаем...

 

Хотя:

bird> show route export bgp1
z.z.z.0/24   via x.x.x.210 on eth0 [static1 17:17:19] ! (200)

 

Пытался изменить на :

protocol bgp {
........
	export where proto = "static_bgp";
}
protocol static  static_bgp {
	route z.z.z.0/24 via x.x.x.210;
}

Все равно - анонсим все подряд.

 

Помогите найти затык...

 

И еще

protocol kernel {
	persist;		# Don't remove routes on bird shutdown
	scan time 20;		# Scan kernel routing table every 20 seconds
#	import all;		# Default is import all
	export all;			# Default is export none
	kernel table 107;		# Kernel table to synchronize with (default: main)
}

Ставил что просто persist, что persist off; - при остановке демона все равно маршруты остаются в таблице...

 

Share this post


Link to post
Share on other sites

Вроде всё верно, либо проглядел, попробуй без определения функции
 

filter up_out {
	if net ~ z.z.z.0/24 then {
		bgp_community = -empty-; #не отправляем никаких коммьюнити
		bgp_path.prepend(64555); #добавляем prepend
		accept;
	}
	reject;
}

 

По дефолту протокол бгп работает с таблицей main, если не определено иное в протоколе, если хочешь работать с другими таблицами, то либо пользуй пайпы либо укажи таблицу явно, чтото вроде

 

table bar;

protocol kernel cool_table{
	table bar;
	scan time 60;
	kernel table 107;
}

protocol bgp foo {
	table bar;
	...
}

 

Share this post


Link to post
Share on other sites

@pppoetest 

Попробывал - то-же самое - анонсит все, что получает.

BIRD 1.4.5 ready.
name     proto    table    state  since       info
bgp1     BGP      master   up     21:42:28    Established
  Description:    My BGP uplink
  Router ID:      x.x.x.210
  Preference:     100
  Input filter:   up_in
  Output filter:  up_out
  Routes:         184987 imported, 2 exported, 184987 preferred
  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:         185814          0        826          0     184988
    Import withdraws:            0          0        ---        826          0
    Export updates:         184990     184988          0        ---          2
    Export withdraws:            0        ---        ---        ---          0
  BGP state:          Established
    Neighbor address: x.x.x.209
    Neighbor AS:      6xxx4
    Neighbor ID:      c.c.c.101
    Neighbor caps:    refresh restart-aware AS4
    Session:          external AS4
    Source address:   x.x.x.210
    Hold timer:       86/90
    Keepalive timer:  61/80

На всякий случай выложу весь конфиг.

 

/*
 *	This is an example configuration file.
 */


# Configure logging
log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
log "/var/log/bird.log" { debug };


# Override router ID
router id x.x.x.210;


# Define another routing table
#table bg107;

# 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 {
#	table bg107;
#	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 all;		# Default is import all
	export all;			# Default is export none
	kernel table 107;		# Kernel table to synchronize with (default: main)
}

# 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 static  {
#	disabled;		# Disable by default
#	table bg107;		# Connect to a non-default table
	#route y.y.y.0/24 via x.x.x.210;

}

protocol static  static_bgp {
	route y.y.y.0/24 via x.x.x.210;
}

function avoid_nonexist()
	#Описываем префикс-лист, по которому будет происходить проверка маршрутов
	prefix set nonexist;
{
	nonexist = [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+, 224.0.0.0/4+, 240.0.0.0/4+, 0.0.0.0/32-, 0.0.0.0/0{25,32}, 0.0.0.0/0{0,7} ];
	if net ~ nonexist then return false;
	return true;
}

#Задаем функцию, с помощью которой будем фильтровать маршруты из нашей AS
function pref_from_myasset()
	prefix set pref_from_64555;
	{
	pref_from_64555 = [ y.y.y.0/24  ];
	if net ~ pref_from_64555 then return true;
	return false;
}


filter up_in {

	if avoid_nonexist() then
	{
		bgp_local_pref = 340; #устанавливаем local preference
		accept;
	}
	reject;
}

filter up_out_ {

	if pref_from_myasset() then
		{
			bgp_community = -empty-; #не отправляем никаких коммьюнити
			bgp_path.prepend(64555); #добавляем prepend
			accept;
		}
reject;
}

filter up_out {
	if net ~ y.y.y.0/24 then {
		bgp_community = -empty-; #не отправляем никаких коммьюнити
		bgp_path.prepend(64555); #добавляем prepend
		accept;
	}
	reject;
}

	

protocol bgp {
#	table bg107;
	router id x.x.x.210;
#	disabled;
	description "My BGP uplink";
	local as 64555;
	neighbor x.x.x.209 as 6xxx4;

	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 error (when consecutive
	error forget time 300;	# ... until this timeout expires)
	next hop self;		# Disable next hop processing and always advertise our local address as nexthop
	path metric 1;		# Prefer routes with shorter paths (like Cisco does)
	default bgp_med 0;	# MED value we use for comparison when none is defined
	default bgp_local_pref 0;	# The same for local preference
	source address x.x.x.210;	# What local address we use for the TCP connection

	import filter up_in;
	export filter up_out;
	#export where proto = "static_bgp";
}

 

Edited by Susanin

Share this post


Link to post
Share on other sites

особо опыта с bird нет. но

Export updates:         184990     184988          0        ---          2

в accepted 2.

 

show route advertising-protocol bgp x.x.x.209 в студию.

Share this post


Link to post
Share on other sites

@zhenya` 

Да, аплинк принимает только наш анонс - остальное фильтрует. Вопрос - как сделать так, что бы мы и не слали ему лишнее...

BIRD 1.4.5 ready.
bird> show route advertising-protocol bgp x.x.x.209
IP address expected
bird>

п.с. естественно, команду давал с ИП, а не с иксами....

Share this post


Link to post
Share on other sites
bird> show route export bgp
syntax error
bird> show route export bgp1
z.z.z.0/24   via x.x.x.210 on eth0 [static_bgp 09:01:52] ! (200)
bird>

И я вижу что мой анонс разошелся по инету - пакеты прилетают...

Edited by Susanin

Share this post


Link to post
Share on other sites

Немного оффтопа, птицу бы лучше с репов ихних обновить. 1.4.5 древнее, некоторые глюки и нестабильности на ней замечались у себя.

Share this post


Link to post
Share on other sites

че-то я не понял... или чего-то не вижу, но...

Routes:         88196 imported, 2 exported, 88196 preferred

с чего вы взяли, что "анонсим все, что получаем", когда у вас явно всего 2 роута экспортед?

bird> show route export bgp1
z.z.z.0/24   via x.x.x.210 on eth0 [static_bgp 09:01:52] ! (200)

и это подтверждает.

другое дело, почему 2, а не 1? но это, по-моему, из-за двух таблиц маршрутизации удвоение.

Share this post


Link to post
Share on other sites

@nixx 

  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:         185814          0        826          0     184988
    Export updates:         184990     184988          0        ---          2

Я данные строки расцениваю так: Было получено 185814 обновлений и отправлено обратно 184990. Но из них АП-ом было принято только 2, относящихся в нашему префиксу, остальное отброшено. Вопрос в том, как не отсылать АП-у те обновления, которые мы сами от него принимаем.

 

По поводу 2 принятых анонсов - это тест в попытке отправить АП-у наш префикс в /24 и часть от него в /28. Сейчас это убрали, отправляем только /24.

Share this post


Link to post
Share on other sites
protocol bgp BLABLABLA {
   router id XXX.XXX.XXX.XXX;
   local as ZZZZZ;
   source address XXX.XXX.XXX.XXX;
   neighbor YYY.YYY.YYY.YYY as 12389;
   import filter provinRT;
   export filter {
       if net ~ [ WWW.WWW.WWW.0/24] then {
           accept;
       }
       reject;
   };
}

 

собственно, у вас почти все правильно, только в определении up_out префикс в квадратные скобки возьмите.

Share this post


Link to post
Share on other sites
3 часа назад, Susanin сказал:

@nixx 


  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:         185814          0        826          0     184988
    Export updates:         184990     184988          0        ---          2

Я данные строки расцениваю так: Было получено 185814 обновлений и отправлено обратно 184990. Но из них АП-ом было принято только 2, относящихся в нашему префиксу, остальное отброшено. Вопрос в том, как не отсылать АП-у те обновления, которые мы сами от него принимаем.

заодно и сам узнал что-то новое )) всегда думал, что reject - это reject от фильтра, а нифига. это reject роута, который демон не форвардит взад тому, от кого он пришел. или по каким-то другим причинам.

какой телепатией должен обладать bird, чтобы узнать, что аплинк зафильтровал какие-то роуты от вас? это все данные вашего демона, а не аплинка.

 

ps: попробуйте аплинка спросить, что ли )) сколько он от вас роутов видит всего и сколько принимает.

Edited by nixx

Share this post


Link to post
Share on other sites
35 минут назад, nixx сказал:

какой телепатией должен обладать bird, чтобы узнать, что аплинк зафильтровал какие-то роуты от вас? это все данные вашего демона, а не аплинка.

 

ps: попробуйте аплинка спросить, что ли )) сколько он от вас роутов видит всего и сколько принимает.

 

Ну так а как тогда bird узнает что маршрут вышестоящим accepted ?

Очевидно что аплинковский демон сообщает какой маршрут принял, а какой нет....

 

Аплинк и до этого говорил что принял только наш префикс. Что с остальным он не уточнял.

 

Всем Спасибо!

 

Edited by Susanin

Share this post


Link to post
Share on other sites

никак не узнает. 

нету там функционала оповещения о принял или нет.

 

Share this post


Link to post
Share on other sites
4 часа назад, Susanin сказал:

Ну так а как тогда bird узнает что маршрут вышестоящим accepted ?

Очевидно что аплинковский демон сообщает какой маршрут принял, а какой нет....

 

Аплинк и до этого говорил что принял только наш префикс. Что с остальным он не уточнял.

столбик accepted - это у вашего bird'а accepted от аплинка (imported), либо же accepted на отправку к аплинку (exported).

 

а сколько реально проакцептил аплинк - знает только он сам. при двойке у вас - у него может быть ноль. вам (вашему бёрду) он ничего не сообщает.

поэтому я и написал, что "спросите аплинка", чтобы тот админ сам посмотрел, сколько ему реально роутов влилось, и сколько он посчитал "правильными".

кроме как голосом, вы никак об этом не узнаете )

Share this post


Link to post
Share on other sites
В 16.02.2018 в 17:45, nixx сказал:

кроме как голосом, вы никак об этом не узнаете )

различных LG обычно вполне достаточно

или даже telnet route-server.he.net.

Share this post


Link to post
Share on other sites

bird 2 на сегодня стабильна или 1.6 лучше юзать?

Share this post


Link to post
Share on other sites
В 23.07.2018 в 02:14, 911 сказал:

bird 2 на сегодня стабильна или 1.6 лучше юзать?

я бы и 1.6 не стал рассматривать как стабильную

словил глюк на 1.6.3 (менял конфигурационный файл - удалял/добавлял bgp соседей, фильтры, перечитывал конфиг и делал релоад bgp протокола), перечитал рассылку bird-users, интернет  так ничего и не нашел внятного по своей проблеме.

Обновился на 1.6.4 но очковасто, надеюсь что менять часто конфиг не придется. Днем работы под запретом.

если функционал 1.6 не нужен особо, то лучше постарше версию ставить

я долго сидел на 1.3 версии - ни в один глюк не влип.

Edited by QWE

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now