In our test case we will deploy two machines: 10.0.3.114 for exabgp (it announce /32 prefix for blackholing on core router side) and 10.0.3.115 (it emulates core router). We will do this work on Debian 8 Jessie.
Install exabgp:
1 |
pip install exabgp |
Create ExaBGP configuration:
1 |
vim /etc/exabgp_blackhole.conf |
Here you can find example for exabgp configuration:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
group Core_v4 { hold-time 180; local-as 65001; peer-as 1234; router-id 10.0.3.114; graceful-restart 1200; static { route 10.10.10.1/32 next-hop 10.0.3.114 community 65001:666; } neighbor 10.0.3.115 { local-address 10.0.3.114; description "Quagga"; } } |
We specify current machine IP as next hop because without it Quagga ignores it: 10.0.3.114 rcvd UPDATE about 10.10.10.1/32 — DENIED due to: martian next-hop;
Start exabgp:
1 |
env exabgp.daemon.user=root exabgp.daemon.daemonize=true exabgp.daemon.pid=/var/run/exabgp.pid exabgp.log.destination=/var/log/exabgp.log exabgp /etc/exabgp_blackhole.conf |
I recommend you to open log file and look at it:
1 |
tail -f /var/log/exabgp.log exabgp |
Now we will install Quagga.
Install package:
1 |
apt-get install -y quagga |
Enable BGP daemon in Quagga:
1 |
vim /etc/quagga/daemons |
And change following lines:
1 2 |
zebra=yes bgpd=yes |
Then you should create config files and fix permissions for they:
1 2 3 4 5 6 |
touch /etc/quagga/zebra.conf touch /etc/quagga/bgpd.conf touch /etc/quagga/quagga.conf chown quagga:quagga /etc/quagga/bgpd.conf chown quagga:quagga /etc/quagga/zebra.conf chown quagga:quagga /etc/quagga/quagga.conf |
Create BGP configuration:
1 |
vi /etc/quagga/bgpd.conf |
Example for configuration (please be aware! It’s not suitable for production):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
hostname SoftBGP password zebra987 enable password zebra987 log file /var/log/quagga/bgpd.log debug bgp events debug bgp filters debug bgp fsm debug bgp keepalives debug bgp updates router bgp 1234 bgp router-id 10.0.3.115 bgp log-neighbor-changes neighbor 10.0.3.114 remote-as 65001 |
Apply configuration:
1 |
/etc/init.d/quagga restart |
Wow! We see this announce in Quagga:
1 2 3 4 5 6 7 8 9 |
/usr/bin/vtysh -d bgpd -c "show ip bgp summary" BGP router identifier 10.0.3.115, local AS number 1234 RIB entries 1, using 112 bytes of memory Peers 1, using 4568 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.0.3.114 4 65001 12 18 0 0 0 00:01:12 1 Total number of neighbors 1 |
Check announced subnets from exabgp:
1 2 3 4 5 6 7 8 9 10 |
/usr/bin/vtysh -d bgpd -c "show ip bgp" BGP table version is 0, local router ID is 10.0.3.115 Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 10.10.10.1/32 10.0.3.114 0 65001 i Total number of prefixes 1 |
This guide prepared from more detailed and complex: https://www.m00nie.com/2014/01/bgp-rtbh-setup-using-exabgp/