在同一台服务器上运行 ExaBGP 和 BIRD

不得不说人一穷鬼点子就特别的多。

准备工作

分别给 BIRD 和 ExaBGP 分配两个 IP:

BIRD: 169.254.32.32/32
ExaBGP: 169.254.64.64/32

1
2
3
/etc/network/interfaces.d/ifcfg-eth0:bird
iface eth0:bird inet static
address 169.254.32.32/32
1
2
3
/etc/network/interfaces.d/ifcfg-eth0:exabgp
iface eth0:exabgp inet static
address 169.254.64.64/32

以下使用 134671 为己方 ASN,12.34.56.78 为己方 IP 地址。

ExaBGP

安装

1
2
sudo apt-get -y install exabgp
sudo sed -i /etc/default/exabgp -e 's/EXABGPRUN="no"/EXABGPRUN="yes"/'

配置监控

1
sudo wget -O /etc/exabgp/watchdog.sh https://gist.github.com/ym/67dc9b350f2fec254d7ec4ea03fbd273/raw/25e6b6081277a68c79bd11e0b874455c790a740e/watchdog.sh

其中 URLS 为需要监控的 URL,ROUTES 为需要宣告的 IP 段,自己修改即可。

配置 ExaBGP

编辑 /etc/exabgp/exabgp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
neighbor 169.254.32.32 {
router-id 169.254.64.64;
local-address 169.254.64.64;

local-as 134829;
peer-as 134829;

family {
inet4 unicast;
}

process service-watchdog {
run /etc/exabgp/watchdog.sh;
}
}

配置完成后 sudo service exabgp restart 重启服务

BIRD

然后把 BIRD 的监听端口修改一下:

1
2
listen bgp address 12.34.56.78;    # 与上游 Peer 通讯的 IP
listen bgp address 169.254.32.32; # 与 ExaBGP 通讯的 IP

并增加 ExaBGP 的 Peer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
protocol bgp ibgp_exabgp_local {
import all;
export filter {
if bgp_path.last ~ [ 134671 ] then {
bgp_next_hop = 12.34.56.78;
accept;
}
reject;
};

local as 134671;
neighbor 169.254.64.64 as 134671;
source address 169.254.32.32;
}

增加完成后 sudo birdc configure 即可。

完成

1
2
3
4
5
6
7
8
# sudo birdc show route protocol ibgp_exabgp_local all
BIRD 1.4.0 ready.
172.81.109.0/24 unreachable [ibgp_exabgp_local 2016-04-26 from 169.254.64.64] ! (100/-) [i]
Type: BGP unicast univ
BGP.origin: IGP
BGP.as_path:
BGP.next_hop: 169.254.64.64
BGP.local_pref: 100