Babel FAQ

General questions

How do I get help?

If this FAQ didn't solve your problem, please feel free to ask on the Babel-users mailing list.

You may browse the archives on Alioth or at mail-archive.com.

How do I report a bug? How do I contribute?

Send your bug reports to the Babel-users mailing list (no subscription required) or submit them to the babeld bug tracker.

Send your improvements to the Babel-users mailing list.

What is Babel? What is babeld?

Babel is a routing protocol that is designed to be efficient and robust on both normal wired networks (say, a bunch of Ethernets connected together) and on wireless networks. It is therefore particularly suitable for building hybrid networks — networks that are composed of both wired andn wireless links.

The reference implementation of Babel is called babeld. There are other implementations of Babel, listed on the Babel page.

What is Babel-Z?

Babel-Z was an extension to the Babel protocol that was meant to take radio interference into account when choosing routes. We have never been able to demonstrate that it actually improves performance, and we are in the process of phasing it out.

The Babel-Z protocol extensions are described in Diversity Routing for the Babel Routing Protocol. You may also want to have a look at some information about Babel-Z.

What is Babel-RTT?

Babel-RTT is an extension to the Babel protocol that is able to automatically compute link latency and include it in its metric computation. This is particularly useful in overlay networks (networks built of tunnels), where a single hop can span much of the known universe.

The Babel-RTT protocol is supported by the babeld binary — please see the max-rtt-pentalty parameter in the manual page.

Usage

Which implementation of Babel should I use?

You should use either babeld or BIRD. Babeld is a small standalone binary that requires little configuration, while BIRD is a competently done, well-documented routing suite that integrates multiple distinct protocols with a consistent configuration interface.

The implementation in FRR is derived from an older version of the babeld code, and has not been kept up-to-date. It is not recommended.

How do I perform redistribution with babeld?

Using the redistribute directive in the configuration file. For example,

redistribute ip 192.186.4.0/24

or

redistribute if eth0

By default, routes with protocol boot, such as the ones installed by DHCP, are ignored. In order to redistribute such routes, you need to specify the protocol explicitly:

redistribute if eth0 proto 3

How do I use MAC authentication?

Please see this MAC authentication tutorial.

How do I configure a stub router?

A stub router is a router that has only one Babel interface, and that only installs default routes. For various reasons, OSPF and EIGRP have specific configuration options for stub routers, which Babel doesn't need.

The most efficient way is to configure the upstream router of your stub router to not announce any non-default routes. Suppose that A is your stub router, and that router B speaks to it over an interface eth1; then on B say something like:

out if eth1 ip 0.0.0.0/0 ge 1 deny
out if eth1 ip ::/0 ge 1 deny

If you cannot reconfigure the upstream router B (for example because the link is shared with non-stub routers), you can discard the extraneous routes on A itself:

in ip 0.0.0.0/0 ge 1 deny
in ip ::/0 ge 1 deny

If you are running IPv6 only, sbabeld is a stub-only implementation of Babel.

How do I enable RTT-based routing with babeld?

With babeld, say

interface tun42 type tunnel which is a shortcut for

class="displaycode">interface tun42 timestamps true max-rtt-penalty 96

Troubleshooting

What tools are there for debuginng Babel networks?

Network monitors  Tcpdump groks Babel starting with version 4.2.1. Wireshark has support since version 1.6.0.

Monitoring interface  You can ask babeld to dump its internal tables. With the standalone daemon, send a HUP1 signal to the daemon to get it to dump its tables to the log file. Alternatively, run babeld with the flag "-g 33123", and run telnet ::1 33123.

I am trying to simulate a wireless environment using firewall rules, and Babel doesn't find the right routes

The babeld daemon automatically detects wired interfaces, and makes a number of optimisations that are not correct for wireless interfaces. Your firewall rules probably broke the assumptions that make these optimisations correct on wired links.

You may disable these optimisations by running babeld with the -w flag, or by saying something like

interface eth0 wired false
in the /etc/babeld.conf file.

I'm trying to run Babel over a BATMAN interface, and Babel chooses the wrong routes

Please upgrade to 1.4.0 or later, which recognises BATMAN interfaces automatically.

I'm using tunnels and Babel chooses the wrong routes

Babeld version 1.5.0 and later has explicit support for tunnels, but it is not enabled by default. Just say:

interface tun-42 type tunnel

You should do that on both sides of the tunnel.

Babel is still choosing the wrong routes

If everything else fails, you can manually tweak babeld's metrics by using filtering rules. For example, the following will cause babeld to deprecate the link towards the host with link-local address fe80::dead:beef:

in neigh fe80::dead:beef metric 512

If you want to forbid this link altogether, say:

in neigh fe80::dead:beef deny

In order to avoid all routes that go through a given interface, say:

in if wlan1 metric 512

Back to the Babel page.