Grenode utilise bird-lg, un looking glass pour Bird. Il est écrit en Python, et a été réalisé par Mehdi Abaakouk (de tetaneutral.net).
En pratique, nous utilisons un dépôt dérivé, quelques patches étant nécessaires au bon fonctionnement de l'outil.
Utilisation
Le looking glass est accessible publiquement à l'adresse https://lg.grenode.net.
Installation
bird-lg
a deux composants :
- un programme qui tourne sur ?batture, dont le but est de communiquer
avec
bird
et de lancer des ping/traceroute - un programme qui tourne sur ?outils, qui sert de frontend web pour les utilisateurs
Sur batture
Ajout d'un utilisateur dédié :
$ sudo adduser --disabled-login --disabled-password --gecos birdlg birdlg
# Pour pouvoir accéder aux sockets de contrôle de bird
$ adduser birdlg bird
Installation de pip (gestionnaire de paquet python), sans tirer tout
build-essentials
qui n'est pas utile pour nous :
$ sudo apt-get install --no-install-recommends python-pip
Installation de bird-lg, ainsi que de Flask (en utilisant pip en mode utilisateur) :
$ sudo su - birdlg
$ git clone git://github.com/zorun/bird-lg.git
$ pip install --user Flask
Configuration de lgproxy
:
$ cd bird-lg
$ cp lgproxy.cfg.example lgproxy.cfg
Contenu de la configuration :
DEBUG = False
LOG_FILE = "/home/birdlg/lgproxy.log"
LOG_LEVEL = "WARNING"
# Which IP/port to listen to for the frontend
BIND_IP = "::"
BIND_PORT = 5678
# Who can connect to the proxy to launch Bird commands
# outils.grenode.net
ACCESS_LIST = ["2001:912:400:100::20"]
# Location of Bird control sockets, example for Debian > wheezy
BIRD_SOCKET = "/run/bird/bird.ctl"
BIRD6_SOCKET = "/run/bird/bird6.ctl"
# Source IP for traceroute/traceroute6
IPV4_SOURCE = "91.216.110.6"
IPV6_SOURCE = "2001:912::6"
On n'écoute qu'en IPv6, seul ?outils viendra parler avec nous. Il pourrait être intéressant de limiter l'accès au niveau du firewall.
Sur outils
Le début est similaire :
$ sudo adduser --disabled-login --disabled-password --gecos birdlg birdlg
$ sudo apt-get install --no-install-recommends python-pip
$ sudo su - birdlg
$ git clone git://github.com/zorun/bird-lg.git
Installation des dépendances :
$ pip install --user Flask pydot dnspython
Configuration :
$ cat lg.cfg
DEBUG = False
LOG_FILE="/home/birdlg/lg.log"
LOG_LEVEL="WARNING"
DOMAIN = "grenode.net"
# Which backend routers to connect to
PROXY = {
"batture": 5678
}
# Used for bgpmap
ROUTER_IP = {
"batture" : [ "91.216.110.6", "2001:912::6" ]
}
AS_NUMBER = {
"batture" : "51083"
}
SESSION_KEY = 'something random'
Configuration d'Apache (d'après la documentation Flask) :
$ sudo apt-get install libapache2-mod-wsgi
$ cat /etc/apache2/site-enable/lg.grenode.net
<VirtualHost *:80>
ServerName lg.grenode.net
WSGIDaemonProcess lookingglass user=birdlg group=birdlg threads=5
WSGIScriptAlias / /home/birdlg/bird-lg/lg.wsgi
<Directory /home/birdlg/bird-lg>
WSGIProcessGroup lookingglass
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>