Skip to content

Different announcements for one prefix through a mux

Italo Cunha edited this page Aug 29, 2017 · 1 revision

Problem

One cannot announce multiple routes to the prefix to one mux with the default client. Taking AMS-IX as an example, where we have BIT and Coloclue as transit providers, we cannot poison AT&T on the announcement through BIT and poison Verizon on the announcement through Coloclue.

Solution

The solution is to announce multiple routes to the same prefix through the mux. The mux will correctly forward its best route upstream. To implement the case above, we need to set make announcements setting the poisonings as well as BIT's and Coloclue's communities, to choose which route gets exported through each transit provider.

Implementation

The easiest way to achieve the above is to set two different clients on different machines. This is because clients make changes to global network resources on the machine where they run.

If you absolutely need to run two clients on the same machine, you need to do the following:

  • Update OpenVPN configuration files in configs/openvpn so each client uses different TAP devices and different local port numbers.
  • Add source address directives to BGP protocol configurations in bird.conf. The IP address needs to match the IP in the OpenVPN tunnel the session will be established over. (Note that this requires bringing the OpenVPN tunnel up, checking its IP address (allocated dynamically), then updating bird.conf.) This is so different sessions through different OpenVPN tunnels behave as expected and so routes are exported with the correct next-hop.
  • Add a global router id directive in bird.conf to avoid BGP session conflicts at the mux.
  • Add global listen bgp <address> port 179 directives to bird.conf so BIRD does not listen on all local addresses (which would prevent two instances from running simultaneously). The addresses need to match those in the OpenVPN tunnels.
  • Change the table number in the kernel protocol. This is to avoid multiple BIRD instances from trying to control the same table.