Hi,
I am hoping someone here might be able to give me a hand. I am having issues
getting BIRD to broadcast routes to other peers. Attached is my config, could
someone look at it and advise.
Thanks,
Lee Morris
Ki’tpu Computer & Technical Services
PH: (506) 962-8687
log "/var/log/bird.log" all;
log syslog all;
router id 206.71.137.2;
define myas = 396501;
protocol kernel {
scan time 60;
export all;
}
protocol device {
scan time 60;
}
# This function excludes weird networks
# rfc1918, class D, class E, too long and too short prefixes
function avoid_martians()
prefix set martians;
{
martians = [ 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} ];
# Avoid RFC1918 and similar networks
if net ~ martians then return false;
return true;
}
function avoid_crappy_prefixes()
{
if net.len < 8 then return false;
if net.len > 24 then return false;
return true;
}
####
# Protocol template
template bgp PEERS {
local as myas;
import all;
export all;
import limit 100000 action restart;
rs client;
}
# BGP output filter (based on communities)
function bgp_out_comm(int peeras)
{
if ! (source = RTS_BGP ) then return false;
if peeras > 65535 then
{
if (ro,0,peeras) ~ bgp_ext_community then return false;
if (ro,myas,peeras) ~ bgp_ext_community then return true;
if ((ro,0,myas) ~ bgp_ext_community) then return false;
if (ro,myas,myas) ~ bgp_ext_community then return true;
} else {
if ((0,peeras) ~ bgp_community) || ((ro,0,peeras) ~ bgp_ext_community) then
return false;
if ((myas,peeras) ~ bgp_community) || ((ro,myas,peeras) ~
bgp_ext_community) then return true;
if ((0, myas) ~ bgp_community) || ((ro,0,myas) ~ bgp_ext_community) then
return false;
if ((myas,myas) ~ bgp_community) || ((ro,myas,myas) ~ bgp_ext_community)
then return true;
}
return true;
}
function bgp_out(int peeras)
{
if !bgp_out_comm(peeras) then return false;
# Remove IXP related communities
bgp_community.delete([(0,*)]);
## bgp_community.delete([(myas,*)]);
bgp_ext_community.delete([(ro,0,*)]);
bgp_ext_community.delete([(ro,myas,*)]);
return true;
}
####
# Configuration of BGP peer follows
### AS3367 - Member1
filter bgp_in_AS3367
prefix set allnet;
int set allas;
{
if ! (avoid_martians()) then reject;
if (bgp_path.first != 3367 ) then reject;
# allas = [ 1234, 2345, 3456, 4567 ];
# if ! (bgp_path.last ~ allas) then reject;
# allnet = [ 12.34.0.0/16 , 23.45.0.0/16, 34.56.0.0/16, 45.56.0.0/16 ];
# if ! (net ~ allnet) then reject;
accept;
}
protocol bgp R3367 from PEERS {
description "Member 1 - peer 1";
neighbor 206.71.137.6 as 3367;
import filter bgp_in_AS3367;
export where bgp_out_comm(3367);
}
### AS6939 - Member1
filter bgp_in_AS6939
prefix set allnet;
int set allas;
{
if ! (avoid_martians()) then reject;
if (bgp_path.first != 6939 ) then reject;
#allas = [ 1234, 2345, 3456, 4567 ];
#if ! (bgp_path.last ~ allas) then reject;
#allnet = [ 12.34.0.0/16 , 23.45.0.0/16, 34.56.0.0/16, 45.56.0.0/16 ];
#if ! (net ~ allnet) then reject;
accept;
}
protocol bgp R6939 from PEERS {
description "Member 1 - peer 2";
neighbor 206.71.137.7 as 6939;
import filter bgp_in_AS6939;
export where bgp_out_comm(6939);
}
### AS42 - Member1
table T42;
filter bgp_in_AS42
prefix set allnet;
int set allas;
{
if ! (avoid_martians()) then reject;
if (bgp_path.first != 42 ) then reject;
allas = [ 42, 187, 16686, 20144, 32978, 35160, 52306, 10886 ];
# if ! (bgp_path.last ~ allas) then reject;
# (PCH prefer us to use the following instead)
allnet = [ 64.68.195.0/24,
64.68.196.0/24,
65.22.4.0/23 {23,24},
70.40.0.0/20 {20,24},
72.0.48.0/20 {20,24},
72.42.112.0/20 {20,24},
74.63.16.0/20 {20,24},
114.69.222.0/24,
156.154.96.0/24,
156.154.99.0/24,
189.201.244.0/23,
192.203.230.0/24,
194.0.17.0/24,
194.0.27.0/24,
194.0.36.0/24,
194.0.42.0/24,
194.0.47.0/24,
194.117.56.0/21 {21,24},
198.182.167.0/24,
199.4.137.0/24,
199.7.64.0/24,
199.7.77.0/24,
199.7.82.0/23,
199.7.83.0/24,
199.43.132.0/24,
199.115.156.0/23 {23,24},
199.182.32.0/24,
199.182.40.0/24,
199.249.112.0/20 {20,24},
199.254.171.0/24,
200.16.98.0/24,
200.108.148.0/24,
203.119.88.0/23,
204.61.216.0/23,
199.7.91.0/24,
204.19.119.0/24,
204.26.57.0/24,
144.254.254.0/24,
207.34.6.0/23 {23,24},
206.51.254.0/23 {23,24},
149.112.112.0/24,
149.112.149.0/24,
205.132.46.0/23 {23,24},
170.210.180.0/24,
65.22.19.0/24,
65.22.23.0/24,
65.22.27.0/24,
65.22.31.0/24,
65.22.35.0/24,
65.22.39.0/24,
65.22.43.0/24,
65.22.47.0/24,
65.22.51.0/24,
65.22.55.0/24,
65.22.59.0/24,
65.22.63.0/24,
65.22.67.0/24,
65.22.71.0/24,
65.22.79.0/24,
65.22.83.0/24,
65.22.87.0/24,
65.22.91.0/24,
65.22.95.0/24,
65.22.99.0/24,
65.22.103.0/24,
65.22.107.0/24,
65.22.111.0/24,
65.22.115.0/24,
65.22.119.0/24,
65.22.123.0/24,
65.22.127.0/24,
65.22.131.0/24,
65.22.135.0/24,
65.22.139.0/24,
65.22.143.0/24,
65.22.147.0/24,
65.22.151.0/24,
65.22.155.0/24,
65.22.159.0/24,
65.22.163.0/24,
65.22.171.0/24,
65.22.175.0/24,
65.22.179.0/24,
65.22.183.0/24,
65.22.187.0/24,
65.22.191.0/24,
65.22.195.0/24,
65.22.199.0/24,
65.22.203.0/24,
65.22.207.0/24,
65.22.211.0/24,
65.22.215.0/24,
65.22.219.0/24,
65.22.223.0/24,
65.22.227.0/24,
65.22.231.0/24,
65.22.235.0/24,
65.22.239.0/24,
65.22.243.0/24 ];
if ! (net ~ allnet) then reject;
accept;
}
# protocol pipe P42 from PIPES {
# description "Packet Clearing House";
# peer table T42;
# import filter bgp_in_AS42;
# export where bgp_out(42);
#}
protocol bgp R42 from PEERS {
description "Member 1 - peer 3";
neighbor 206.71.137.4 as 42;
table T42;
}
### AS3856 - Member1
table T3856;
filter bgp_in_AS3856
prefix set allnet;
int set allas;
{
if ! (avoid_martians()) then reject;
if (bgp_path.first != 3856 ) then reject;
allas = [ 3856 ];
if ! (bgp_path.last ~ allas) then reject;
accept;
}
#protocol pipe P3856 from PIPES {
# description "Packet Clearing House";
# peer table T3856;
# import filter bgp_in_AS3856;
# export where bgp_out(3856);
#}
protocol bgp R3856 from PEERS {
description "Packet Clearing House - peer 1";
neighbor 206.71.137.5 as 3856;
table T3856;
}
### AS5645 - Member1
filter bgp_in_AS5645
prefix set allnet;
int set allas;
{
if ! (avoid_martians()) then reject;
if (bgp_path.first != 5645 ) then reject;
#allas = [ 1234, 2345, 3456, 4567 ];
#if ! (bgp_path.last ~ allas) then reject;
#allnet = [ 12.34.0.0/16 , 23.45.0.0/16, 34.56.0.0/16, 45.56.0.0/16 ];
#if ! (net ~ allnet) then reject;
accept;
}
protocol bgp R5645 from PEERS {
description "Member 1 - peer 5";
neighbor 206.71.137.8 as 5645;
import filter bgp_in_AS5645;
export where bgp_out_comm(5645);
}
### AS55195 - Member1
filter bgp_in_AS55195
prefix set allnet;
int set allas;
{
if ! (avoid_martians()) then reject;
if (bgp_path.first != 55195 ) then reject;
#allas = [ 1234, 2345, 3456, 4567 ];
#if ! (bgp_path.last ~ allas) then reject;
#allnet = [ 12.34.0.0/16 , 23.45.0.0/16, 34.56.0.0/16, 45.56.0.0/16 ];
#if ! (net ~ allnet) then reject;
accept;
}
protocol bgp R55195 from PEERS {
description "Member 1 - peer 5";
neighbor 206.71.137.53 as 55195;
import filter bgp_in_AS55195;
export where bgp_out_comm(55195);
}