Git Product home page Git Product logo

ansible-bird's Introduction

Ansible Role: Bird

This is a very "proprietary" role that will configure a server for BGP routing with a pre-configured transit. For now, it is IPv6 only.

This bird config was created by Wim. All credits goes to him. He runs alot of services, for example forhosting.nl or AS38230.

What this does

This role is very much custom configured to my needs. However, it could be easily adapted.

  • Installs bird and other useful packages (e.g. curl, mtr, htop)
  • Creates Loopback interfaces for routing (Routing prefix & Anycast)
  • Deploys OSPF neighbors (WILL NOT CONFIGURE TUNNELS)
  • Deploys transit BGP config with custom parameters including communities for both normal and anycast prefixes.
  • Deploys custom systctl rules
  • Modifies interfaces file to read Loopback configurations AFTER initial network.
  • Configures bird and enables systemd service

Limitations

I may fix these with time, tunnels for OSPF neighbors seems very hard.

  • IPv6 Only
  • Won't create tunnels for OSPF neighbors
  • Won't create IBGP sessions
  • Requires you to list the number of loopback interfaces loopback_interfaces in this example 1 through 4 as there are 4 interfaces in templates/bgp_interfaces.conf

Requirements

A system running Debian 10/11/12.

If you intend to use the OSPF configuration, it will need links created (either VPN or physical) with the name of the interface corresponding to the ADJACENT_ROUTERS dictionary

Role Variables

Group Vars:

Name Type Example
ROUTERASN string 136918
CASN string 65000
SHARECONFIG string config.conf
BIRDCONFIG string bird6.conf
PROTOCOLSCONFIG string protocols.conf
FILTERSCONFIG string filters.conf
TRANSITCONFIG string transit.conf
STATICCONFIG string static.conf
MYNETCONFIG string mynet.conf
ANYCASTCONFIG string anycast.conf
PFXMIN int 48
SUBNET string 10.40.0.0/16
loopback_interfaces list - 1\n- 2\n-3
sysctl_config dictionary net.ipv4.ip_forward: 1

Host Vars:

Name Type Example
TRANSITIP string 2600::
MYIP string 2a0e:46c4:22a2::
MYNET multi-line string 2a05:1082:5::/48, 2a0e:46c4:2269::/48, ...
TRANSITASN string 34927
TRANSIT_NAME string iFog
ROUTERID string 10.51.1.3
NODEID int 3
ADJACENT_ROUTERS dictionary at1: 6\nat2: 7
ANYCAST_ADDRESS multi-line string 2a05:1082:5::/48, 2a05:1082:1::/48
COMMUNITIES multi-line string bgp_path.prepend(136918)
COMMUNITIES_ANYCAST multi-line string bgp_path.prepend(136918)
CUSTOM_STATIC multi-line string route via ;
CUSTOM_TRANSIT multi-line string multihop 2;

Dependencies

There are no dependencies for this role

Example Playbook

HOST FILE:

    bgp_servers:
      hosts:
        AMS:
          TRANSITIP: "2a0c:9a40:1070::1"
          MYIP: "2a0e:46c4:22a2::"
          TRANSITASN: "34927"
          TRANSIT_NAME: "iFog_Transit"
          ROUTERID: "10.51.1.3"
          NODEID: "3"
          ADJACENT_ROUTERS:
            AMS: 6
            FRA: 5
            SGP: 100
          CUSTOM_STATIC: 
          COMMUNITIES: 
          COMMUNITIES_ANYCAST:  |
            bgp_path.prepend(136918);
            bgp_community.add((34927,9120)); # Do not export OF
            bgp_community.add((34927,9110)); # Do not export MFB FRA
            bgp_community.add((34927,9150)); # Do not export Asympto FRA
            bgp_community.add((34927,9560)); # Do not export LibertyGlobal
            bgp_community.add((34927,9480)); # Do not export RETN FRA
            bgp_community.add((34927,9500)); # Do not export DT FRA
            bgp_community.add((34927,9480)); # Do not export GTT FRA
            bgp_community.add((34927,9300)); # Do not export DE-CIX FRA
            bgp_community.add((34927,9310)); # Do not export KleyReX FRA
            bgp_community.add((34927,9320)); # Do not export LocIX FRA
            bgp_community.add((34927,9340)); # Do not export EVIX FRA
            bgp_community.add((34927,9390)); # Do not export DE-CIX MUC FRA
            bgp_community.add((34927,9400)); # Do not export LocIX DUS FRA
            bgp_community.add((34927,9410)); # Do not export DE-CIX DUS FRA
            bgp_community.add((34927,9420)); # Do not export DE-CIX HAM FRA
            bgp_community.add((34927,9500)); # Do not export DE-CIX MAD FRA
            bgp_community.add((34927,9450)); # Do not export STACIX FRA
            bgp_community.add((34927,9630)); # Do not export FogIXP
            bgp_community.add((34927,9570)); # Do not export WD6 

PLAYBOOK:

- hosts: bgp_servers
  become: true
  vars:
    ROUTERASN: "136918"
    CASN: "136918"
    SHARECONFIG: "config.conf"
    BIRDCONFIG: "bird6.conf"
    PROTOCOLSCONFIG: "protocols.conf"
    FILTERSCONFIG: "filters.conf"
    TRANSITCONFIG: "transit.conf"
    STATICCONFIG: "static.conf"
    MYNETCONFIG: "mynet.conf"    
    PFXMIN: "48"
    SUBNET: "10.40.0.0/16"
    loopback_interfaces:
      - 1
      - 2
      - 3
      - 4
    systctl_config:
      net.ipv4.icmp_errors_use_inbound_ifaddr: 0
      net.ipv4.fib_multipath_hash_policy: 1

License

BSD

Author Information

This role was created by James Ledger, I write about things on https://jamesledger.net

ansible-bird's People

Contributors

jamdoog avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.