hacdc-wiki/Old Pages/Old Wiki/Babel.md
2024-07-07 13:53:31 -04:00

188 lines
6.2 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Available in most Linux distributions (including Arch, Debian, OpenWRT).
# Features
Distance vector routing protocol:
- Direction in which a packet should be forwarded.
- Interface to which a protocol should be sent
- Direction == address of next hop and exit interface
- Distance from destination
- Cost of reaching destination is computed using various metrics
<!-- -->
- Designed for both wireless (in ad-hoc mode) and wired network routing.
- Designed with mobile nodes in mind.
- Can route both IPv4 and IPv6 simultaneously and transparently. Doesn't
care which layer 3 protocols are running on top of it.
- Converges rapidly.
- Triggered updates.
- Explicit requests for routing information rather than continual
broadcasting.
<!-- -->
- Uses link quality metrics.
- Metric: packet loss, interference (optional) and RTT (optional).
- History sensitive to avoid route flapping.
<!-- -->
- Does not optimize route tables immediately, more concerned with
stability than slim tables. Premature optimization is the root of all
coders' anguish, and all that.
- This is used to cure route starvation.
- Used to choose feasibility of a particular route.
- Every route carries a sequence number that never decreases and is
propagated unchanged through the network.
- Only the route's source can ever increment that number.
- If the sequence number is more recent that the feasibility distance
maintained by the receiving node, or if it's equally recent but the
metric is smaller, then that particular route will be selected.
- Routes become feasible again after the sequence number is incremented.
- Ideal for embedded systems due to the properties inherent of DVRPs.
<!-- -->
- Most routing loops are avoided, remaining routing loops are transient,
disappear in time proportional to the diameter of the loops.
- Routers take note of loops and ensure that they do not recur.
<!-- -->
- Highly mobile nodes may elect to use shorter time constants, to
reflect their changing environment more accurately.
<!-- -->
- Nodes periodically broadcast HELLO packets. Nodes also respond to
HELLO broadcasts from neighboring nodes with I HEARD YOU packets.
These are used to calculate link costs.
- Periodically, every node B broadcasts a routing update D(B).
Every neighboring node A checks to see if B is its next hop. If so,
`   NH(A) = B`
`   D(A) = C(A, B) + D(B)`
otherwise,
`   if (C(A, B) + D(B)) < D(A)`
`       the received route is a better one`
`       NH(A) = B`
`       D(A) = C(A, B) + D(B)`
For any node A:
`   estimated distance to node S = D(A)`
`   next hop router to node S = NH(A)`
Initially, D(S) == 0, D(A) == infinity, NH(A) == UNDEFINED
If a route has to be retracted for any rason, babeld flags that route as
UNREACHABLE for a few minutes. Even if the route comes back it won't be
used until that timer is up. This is usually the worst case propagation
time for the route to a particular node C.
Every Babel router gets a unique ID, a string of 8 octets.
- Transmitted over UDP.
- Sent with a unicast source address to a multicast address (usually).
- Known neighbors get both multicast and unicast (directed to a
particular node).
# Usage
How to use babeld: Put the NIC into ad-hoc mode:
`   iwconfig wlan0 mode ad-hoc channel X essid "mesh"`
`   ifconfig wlan0 up`
All nodes need to have unique IP addresses. IPv4 at least, IPv6 if you
have it.
`   ifconfig wlan0 192.168.13.37/32`
``    ifconfig wlan0 `generate-ipv6-address -r`/128 ``
Start babeld:
`   babeld wlan0`
If there are multiple network interfaces:
`   babeld wlan0 eth1 eth2 ppp0 ...`
If a specific network gateway router exists, set it:
`   route add default gw 1.2.3.4 dev eth1`
These are often set on a per-node basis. For example, babeld is running
on a laptop with both wireless and wired interfaces.
Then redistribute routes through the mesh:
`   babeld -C 'redistribute metric 128' eth1`
It is possible to redistribute the routes associated only with a
particular network interface:
`   babeld -C 'redistribute if eth2 metric 128' eth1`
Other babeld options:
`   -h `<sec>`: interval in seconds between HELLO broadcasts over wireless.`
`       Default: 4 sec.`
`   -H `<sec>`: as -h, only for wired interfaces.`
babeld is not designed for security. An attacker that is link-local can
inject packets, just like ARP. Local firewalls, if applicable, should be
configured to allow Babel packets. Default: 6697/UDP
# Accessories
## AHCPD
AHCP can also be used to configure routing when using babeld:
`   `[`http://www.pps.jussieu.fr/~jch/software/ahcp/`](http://www.pps.jussieu.fr/~jch/software/ahcp/)
Arch Linux package downloaded, compiled, and ready to install.
Automagically configures IPv6 and IPv4/IPv6 networks when babeld is
used. Implements router discovery. Replaces DHCP. Configures IPv?
addresses, DNS, NTP. Does not configure default routes, that's babeld's
job.
Setting up an authoritative AHCP server:
`   Configure /etc/ahcpd.conf appropriately.`
`   ahcpd -c /etc/ahcpd.conf -D wlan0`
Does not need to run as root, only needs to be able to write a pidfile
and the lease database. If the server can sync its clock using NTP, it
will. If it can't it will only give short leases and be careful with
releasing them. Multiple servers can run on the same mesh so long as
they work different IPv4 netblocks.
Other options:
`   -t `<sec>` - time in second that leases are offered for.`
`   -L /path/to/log - Specify a logfile.  By default, /var/log/ahcpd.log`
kill -USR1 to print server status to logfile. kill -USR2 checks for
interface status changes, then reopens logfile.
Running an AHCP client:
`   ahcpd wlan0`
Designed for mesh networks. Doesn't set default gateway, netmask, or
on-link prefixes for IPv6.
## WebGUI
haxwithaxe doesn't know how this works yet but it looks really cool.
[babelweb](http://babelweb.wifi.pps.univ-paris-diderot.fr:8080)
git clone git://git.wifi.pps.univ-paris-diderot.fr/babelweb.git