[Babel-users] babel export routes from bird to routing table?

Christof Schulze christof.schulze at gmx.net
Mon Jan 2 08:09:38 UTC 2017


Hello Juliusz,

>> At a later stage I would like to announce different default-routes at
>> different places in the mesh network.
>Why?
I am working on integrating babel into gluon, which is a framework for 
building freifunk-firmwares.
Freifunk is a project where large, mostly wifi, mesh networks are built to 
enable open wifi access throughout a city. In Frankfurt the Freifunk 
Network consists of roughly 500 concurrent cheap wifi routers. Besides 
wifi about 2/3 of these routers are running vpn connections to one of a 
few servers to get parts of the network connected that do not have a 
direct wifi connection.

At the moment batman is used as mesh protocol for this network. Batman 
works but has the drawback that we are reaching the limits of what the 
protocol can handle due to saturation effects on relatively small VPN 
Uplinks on DSL. Mostly little packets saturate the links without even 
using a lot of bandwidth. There is not much room for scaling to more 
network nodes. The current network can be seen here: Http://map.ffm.freifunk.net

I, among others who are also working on this, am very interested in 
trying a layer 3 mesh network in the hope that the resulting network 
will scale significantly better.

The architecture of the network currently mandates that all traffic that 
is directed towards the internet is passed through the VPN-links to the 
central servers and then routed either directly or through a VPN link 
into the internet. Again, this is a solution that works but it is not 
ideal. We are hoping to build a de-central mesh network yet for the 
moment we have to rely on central dhcp-servers and central routing 
towards the internet.

Running an l3-mesh might provide other solutions like locally announcing 
public ipv6 prefixes and routing traffic directly. For that a smart 
RA-filter must be implemented that allows for the best (whatever that 
means) RAs to reach clients. Those would then use local connections for 
their internet routing needs and central infrastructure would not be 
necessary any more.

A short status of the project (sorry it is german only) is collected 
here: https://wiki.ffm.freifunk.net/firmware:babel
In Short: the network is actually working in a lab environment (babel, 
mmfd, l3roamd) we yet have to put work into monitoring and fixing 
mtu-issues. The network is IPv6-only at the moment though there is work 
on getting a distributed dhcp server integrated, which is already 
working in a lab environment as well. For now I am hoping that building 
an IPv6-only network will suffice, knowing that some kind of translation 
is necessary at some point in the network to reach IPv4-only parts of 
the internet (pretty much everything besides google).

The basic principles of the network are covered here: 
Https://www.nilsschneider.net/2016/04/10/babel-in-gluon.html

This is a quick run-through on what I am hoping to achieve. In the end 
there will likely still be gateways but they will be one of many 
different exit points towards the internet and the wifi network will 
work without a connection to a gateway. 

      VPN/GRE
         |
      Gateway
         |
         |
Uplink -Node1 --- Node 2 --- Client

In a scenario where Internet Access is provided through the Prefix 
shared by the Gateway (let's call that G) and through a locally shared 
prefix (lets call that P) on Node1 the Ras from Node1 should pass the 
wifi-mesh-only Node2 and reach the client by means of a custom software 
that will be called prefixd. At the moment source based routing is used 
on gateways only.
At the moment Clients use IP-Addresses within G. In the future, clients 
should use IP-Addresses within G and P, using P as means of reaching the 
Internet. There may be a couple more locally shared public prefixes 
available to the client too, which it may or may not use.
It seems to be that Source Based Routing may not be necessary on Node1 
even though that would lead to asymmetric traffic flows. Fortunately 
IPv6 should be able to handle this correctly.

>> It seems to me like I might be better off not using table 12 as an
>> import-route so any static default routes on the gateway-side will not
>> interfere with whatever babeld is announcing. What do you think?
>
>That you should tell us what you're trying to achieve, so we can think
>together how best to meet your requirements.  I suspect you need
>source-specific routing, but since I don't know what you're trying to do,
>it's difficult to say.
Having considered all of the above it seems that I only need to add 
another default-route on Node1. In an ideal world the client would also 
pick prefix P for traffic directed towards the internet and Node2 would 
help the client to do that.
A solution with Source Based Routing seems possible too, which would 
prevent connections with unexpected IP prefixes to show up in the Uplink 
of Node1. This would probably require me to set up a different routing 
table for each Prefix dynamically. This mechanism would have to consider 
G, P and all other locally shared global prefixes (P1-Pn) that are 
announced in proximity of Node 1. So it seems a lot more complicated.

Sorry for this lengthy reply to your short question. This may not even 
be a babel question any more because it is more about routing, but maybe 
babel can assist to make the right routing decisions.


Christof
-- 
()  ascii ribbon campaign - against html e-mail
/\  against proprietary attachments

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/babel-users/attachments/20170102/6b152298/attachment.sig>


More information about the Babel-users mailing list