Go to file
Jack Hadrill 398cc7a7a4 Initial commit 2022-02-13 20:47:02 +00:00
AS1 Initial commit 2022-02-13 20:47:02 +00:00
AS2 Initial commit 2022-02-13 20:47:02 +00:00
BIRD on Docker.zip Initial commit 2022-02-13 20:47:02 +00:00
BIRD.zip Initial commit 2022-02-13 20:47:02 +00:00
Dockerfile Initial commit 2022-02-13 20:47:02 +00:00
README.md Initial commit 2022-02-13 20:47:02 +00:00
docker-compose.yml Initial commit 2022-02-13 20:47:02 +00:00

README.md

Notes

BGP operates on port TCP 179. This is exposed to host.

  • AS1 on 17901
  • AS2 on 17902

BGP requires peers to be on the same L2 network such that routes between routers can be established. However, a lot of route collectors (people who just hoover up information about the state of the internet), internet exchanges and ISPs expose TCP 179 publicly. Interaction with BGP can occur across the internet if this port is left unfirewalled, but the routes it establishes will only ever be functional across a L2 network.

The configuration for BIRD 1.6 differs slightly. The main difference is that IPv4 and IPv6 operate as two separate processes and as such are configured using separate configuration files.

To start:

$ docker-compose up -d

To destroy:

$ docker-compose down --rmi all

To interact:

$ docker ps
CONTAINER ID  IMAGE          COMMAND           CREATED         STATUS         PORTS                   NAMES
8e6ec23b0482  bgpdemo/bird   "/demo/start.sh"  30 minutes ago  Up 30 minutes  0.0.0.0:17901->179/tcp  AS1
636ea235359c  bgpdemo/bird   "/demo/start.sh"  30 minutes ago  Up 30 minutes  0.0.0.0:17902->179/tcp  AS2

$ docker exec -it AS1 /bin/bash

$$ ip route show
default via 192.168.179.254 dev eth0 
172.16.0.1 via 192.168.179.2 dev eth0 proto bird src 192.168.179.1 metric 32 
172.16.0.2 via 192.168.179.2 dev eth0 proto bird src 192.168.179.1 metric 32 
172.16.0.3 via 192.168.179.2 dev eth0 proto bird src 192.168.179.1 metric 32 
192.168.179.0/24 dev eth0 proto kernel scope link src 192.168.179.1

$$ ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.150 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=0.167 ms
^C
--- 172.16.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2061ms
rtt min/avg/max/mdev = 0.081/0.132/0.167/0.037 ms

$$ birdc show protocol all
BIRD 2.0.7 ready.
Name       Proto      Table      State  Since         Info
kernel1    Kernel     master4    up     22:58:19.431  
  Channel ipv4
    State:          UP
    Table:          master4
    Preference:     10
    Input filter:   ACCEPT
    Output filter:  (unnamed)
    Routes:         0 imported, 3 exported, 0 preferred
    Route change stats:     received   rejected   filtered    ignored   accepted
      Import updates:              0          0          0          0          0
      Import withdraws:            0          0        ---          0          0
      Export updates:              9          0          6        ---          3
      Export withdraws:            0        ---        ---        ---          0
...

Configuration

AS1

BGP port exposed on TCP 17901 ASN: AS1
IPv4: 192.168.179.1
IPv6: fd00::1
Announced routes:

10.0.0.1/32
10.0.0.2/32
10.0.0.3/32
fd00:dead:beef::1/128
fd00:dead:beef::2/128
fd00:dead:beef::3/128

AS2

BGP port exposed on TCP 17902 ASN: AS2
IPv4: 192.168.179.2
IPv6: fd00::2
Announced routes:

172.16.0.1/32
172.16.0.2/32
172.16.0.3/32
fd00:cafe:babe::1/128
fd00:cafe:babe::2/128
fd00:cafe:babe::3/128