Skip to content
Thomas Mangin edited this page Mar 6, 2026 · 10 revisions

Frequently Asked Questions

Getting Help

Where can I ask for help?


General

What is ExaBGP?

ExaBGP is a pure BGP protocol implementation. It does NOT manipulate the kernel routing table (RIB/FIB). It speaks BGP to routers and provides a simple API for your programs to control route announcements.

Is this code supported?

Yes. Report bugs on GitHub and they will be fixed.

What platforms are supported?

  • Linux: Primary deployment target
  • macOS: Fully supported (development platform)
  • FreeBSD/OpenBSD: Supported
  • Windows: Should work, but not actively tested

Connection Issues

ExaBGP does not listen for incoming connections

ExaBGP does not listen for incoming connections by default. You must specify the IP to listen to:

env exabgp.tcp.bind="127.0.0.1" exabgp.tcp.port=1790 exabgp config.conf

"could not connect to peer: timed out"

Check these in order:

  1. Network connectivity — can your machine reach the router? (firewall, routing)
  2. MD5 passwords — must match on both sides
  3. Multihop — you may need outgoing-ttl for non-directly connected peers
  4. FreeBSD users — check /etc/ipsec.conf has the correct password

"The client took over N seconds to send the OPEN, closing"

BGP Connection Collision Detection issue. Either:

  • Set ExaBGP's router-id higher than the peer's router-id, or
  • Configure your router for passive mode:
    • Cisco: neighbor X.X.X.X transport connection-mode passive
    • Juniper: set protocols bgp group <group> neighbor <address> passive

FRRouting / Quagga

FRRouting rejects the connection

ExaBGP rejects BGP OPEN messages with router-id 0.0.0.0 per RFC 6286. This is FRRouting's default. Fix:

router bgp 65000
  bgp router-id 192.168.1.1

IPv6

IPv6 routes cause the session to drop

Enable the IPv6 address family on your router:

# Juniper
set protocol bgp group mygroup neighbor <IP> family inet6 unicast
set protocol bgp group mygroup neighbor <IP> family inet unicast

If sending both IPv4 and IPv6 routes, you must explicitly enable both families.


Route Issues

Routes are not installed on the router

You may need to allow non-directly-connected next-hops:

# Juniper
set protocol bgp group mygroup neighbor <IP> accept-remote-nexthop

Does ExaBGP prepend the local AS to the AS-PATH?

  • eBGP: Yes, the local ASN is prepended automatically (prevents loops)
  • iBGP: The AS-PATH is sent as configured

Configuration

How do I reload the configuration?

Send SIGUSR1:

kill -USR1 $(pidof exabgp)

ExaBGP compares the old and new configurations, tears down removed peers, sets up new ones, and announces/withdraws changed routes.

What is the split feature?

route 10.0.0.0/16 next-hop 1.2.3.4 split /24;

This announces 256 individual /24 routes that make up the /16. Useful when you need more specific routes to override less specific ones.

Can I save the PID for scripts?

env exabgp.daemon.pid="/var/run/exabgp.pid" exabgp config.conf

Protocol

Juniper rejects hold-time below 20 seconds

Juniper requires hold-time >= 6 seconds (hidden command to lower it):

set minimum-hold-time 6

Why does ExaBGP support Graceful Restart?

For services announcing IPs without backup: during reboots, the service IP remains routed. Set graceful-restart to a value higher than your reboot time (default 180s is often too low for servers).

Can ExaBGP work behind NAT?

Yes. Set local-address to your LAN IP and router-id to the NAT's public IP.


TCP MD5

"This OS does not support TCP_MD5SIG"

macOS does not support TCP MD5 signatures. Use a different OS if you need MD5 authentication.

FreeBSD MD5 setup

FreeBSD requires MD5 keys to be configured via /etc/ipsec.conf. Add md5 kernel; to your ExaBGP config and follow the FreeBSD documentation.


Performance

How many peers can one instance handle?

Depends on route volume, but under normal use (even thousands of routes) a single instance works fine. Deployments with 160+ peers (low route volume) and single-peer with 20+ updates/second have been reported.

ExaBGP uses select() for non-blocking I/O. If concerned, run one instance per peer.


See Also

Clone this wiki locally