RFC 6835 : LISP Internet Groper (LIG) http://www.bortzmeyer.org/6835.html
---------------------------- Auteur(s) du RFC: D. Farinacci, D. Meyer (Cisco) ---------------------------- De même que dig est la référence, connue de tous, des outils de déboguage du DNS, le nom de *lig* va peut-être devenir célèbre dans le monde des opérateurs réseaux. lig est également un outil de déboguage : il sert à interroger la base de correspondance identificateur->localisateur du protocole de routage LISP (RFC 6830, et sans lien avec le langage de programmation). En quoi consiste LISP ? C'est une architecture de séparation de l'identificateur et du localisateur <http://www.bortzmeyer.org/separation-identificateur-localisateur.html> sur l'Internet (RFC 6830). Actuellement, l'adresse IP sert à deux choses : elle identifie une machine unique dans l'Internet (*identificateur*), et elle indique où envoyer les paquets à destination de cette machine (*localisateur*). LISP sépare ces deux fonctions. Et, comme toute architecture de séparation identificateur/localisateur, LISP nécessite une *correspondance* ("mapping") entre les deux. Si on n'a que l'identificateur (EID - "Endpoint ID" - dans la terminologie LISP), il faut trouver le localisateur (RLOC - "Routing Locator" - en termes LISP) pour pouvoir envoyer les paquets. C'est le rôle du système de correspondance. Et lig permet d'interroger cette base de correspondances, pour voir son contenu et déboguer ainsi des problèmes. Il existe plusieurs systèmes possibles pour cette correspondance, comme les très expérimentaux CONS ou NERD. Mais le plus répandu est le système officiel, *ALT* (RFC 6836). Comme il existe un protocole standard de communication avec le système de correspondance, « LISP Map-Server » (dont l'interface est normalisés dans le RFC 6833), lig va pouvoir interroger tous les systèmes, ALT et les autres. Voici un exemple simple, où on demande le RLOC de l'EID 153.16.4.1 : % lig 153.16.4.1 Send map-request to eqx-ash-mr-ms.rloc.lisp4.net for 153.16.4.1 ... Received map-reply from 216.129.110.58 with rtt 0.11500 secs Mapping entry for EID '153.16.4.1': 153.16.4.0/24, via map-reply, record ttl: 1440, auth, not mobile Locator State Priority/Weight 216.129.110.58 up 1/100 Et on trouve que c'est 216.129.110.58, qui va donc recevoir les paquets encapsulés à destination de 153.16.4.1. Pour suivre le RFC, ou même simplement cet article, il vaut mieux apprendre par cœur le vocabulaire, en section 2. Les termes que je trouve les plus importants : * Map-Server: un élement de l'infrastructure réseau qui connait la correspondance entre identificateurs (EID) et localisateurs (RLOC). C'est typiquement une grosse machine qui sera dans le réseau de l'opérateur et utilisera les systèmes cités plus haut (comme ALT) pour publier son bout de la base des correspondances. Chaque Map-Server ne connait qu'une partie de la base, celle-ci étant distribuée. * Map-Resolver: c'est le composant qui interroge les Map-Servers. Il sera sans doute séparé de l'ITR (voir plus loin), son client. C'est ce Map-Resolver qu'interroge lig. * RLOC: le "Routing LOCator" est l'adresse IP de l'ETR (voir plus loin). Une fois le RLOC connu, grâce au Map-Server, l'ITR peut lui envoyer les paquets LISP. (Le RLOC peut être vu comme le localisateur de la destination. LISP, contrairement à HIP <http://www.bortzmeyer.org/hip-resume.html>, n'est pas de bout en bout mais est une solution dans l'infrastructure, qui n'implique que les routeurs. Donc, le localisateur est attaché à un routeur, pas à la destination.) * EID: le "Endpoint Identifier" identifie la destination. On l'a typiquement trouvé dans le DNS. * "EID-to-RLOC cache": les protocoles permettant de gérer la base des correspondances entre EID et RLOC sont typiquement assez complexes, et on ne souhaite pas les faire tourner sur un routeur, qui a d'autres responsabilités. Ils vont donc être exécutés sur le Map-Server, que le routeur va interroger via le Map-Resolver. Mais ce trafic d'interrogation va être intense, potentiellement une requête à chaque paquet que le routeur transmettra. Le routeur doit donc avoir un cache des correspondances les plus récentes. Contrairement à la base que stocke le Map-Server, ce cache est de petite taille, incomplet, et change très vite (les entrées y sont typiquement créées et détruites avec les flux réseau). * ITR : l'"Ingress Tunnel Router" est le routeur d'entrée du tunnel LISP (rappelons que LISP fonctionne en encapsulant les paquets IP dans un tunnel qui va de l'ITR à l'ETR). * ETR : l'"Egress Tunnel Router" est le routeur de sortie du tunnel LISP. * xTR ; lorsqu'on souhaite parler ensemble des ITR et des ETR, on utilise souvent le terme de xTR. Par exemple, « Un déploiement possible de LISP est de mettre les xTR dans le routeur directement connecté au client. » La section 3 donne le principe général de fonctionnement de lig et sa syntaxe. lig se comporte un peu comme un ITR qui a reçu un paquet IP dont la destination est un EID, et qui se demande à quel RLOC envoyer le paquet. lig prend donc en argument un EID, fabrique un paquet LISP de type Map-Request, l'envoie, et attend une réponse Map-Reply. Là, contrairement au routeur, il se contentera d'afficher cette réponse à l'utilisateur. Il indiquera également le RTT de la requête et l'état de l'ETR (LISP surveille en permanence l'état des tunnels, cf. RFC 6830, section 6.3 « "Reachability" », pour éviter d'envoyer les paquets à un trou noir). Outre l'EID, lig prend deux paramètres optionnels, l'EID source (au cas où la réponse en dépendrait) et l'adresse d'un Map-Resolver à interroger (dans le premier exemple, le résolveur était indiqué via la variable d'environnement LISP_MAP_RESOLVER). On peut se servir de lig, comme dans l'exemple plus haut, pour savoir quel est le localisateur d'un EID donné, mais on peut aussi l'utiliser pour se "liguer" soi-même, en interrogeant les serveurs pour vérifier que le site où on est a bien enregistré son préfixe EID. La section 4 présente les deux implémentations de lig actuelles. Celle présente dans les routeurs Cisco (dans des versions expérimentales du code, seulement) est en section 4.1. La syntaxe générale (où les crochets indiquent une mention facultative) et où les termes entre chevrons sont des variables) est lig <destination-EID> [source <source-EID>] [to <Map-Resolver>]. Un exemple d'utilisation, tiré du RFC, est : router# lig abc.example.com Send map-request to 10.0.0.1 for 192.168.1.1 ... Received map-reply from 10.0.0.2 with rtt 0.081468 secs Map-cache entry for abc.example.com EID 192.168.1.1: 192.168.1.0/24, uptime: 13:59:59, expires: 23:59:58, via map-reply, auth Locator Uptime State Priority/Weight Packets In/Out 10.0.0.2 13:59:59 up 1/100 0/14 Et si on veut tester son propre EID (se liguer soi-même), sans avoir à le taper, on peut remplacer le <destination-EID> par self (ou self6 pour IPv6). Par exemple : router# lig self Send loopback map-request to 10.0.0.1 for 192.168.2.0 ... Received map-reply from 10.0.0.3 with rtt 0.001592 secs Map-cache entry for EID 192.168.2.0: 192.168.2.0/24, uptime: 00:00:02, expires: 23:59:57 via map-reply, self Locator Uptime State Priority/Weight Packets In/Out 10.0.0.3 00:00:02 up 1/100 0/0 En section 4.2 figure la version en logiciel libre de lig, qui tourne notamment sur machines Unix et est disponible en https://github.com/davidmeyer/lig. Sa syntaxe est un peu différente, lig [-m <Map-Resolver>] <destination-EID>. Elle ne permet pas de sélectionner l'adresse source. Voici un exemple sur une machine Debian : % lig -m l3-london-mr-ms.rloc.lisp4.net 153.16.10.254 Send map-request to l3-london-mr-ms.rloc.lisp4.net for 153.16.10.254 ... Received map-reply from 173.36.254.163 with rtt 0.23900 secs Mapping entry for EID '153.16.10.254': 153.16.10.0/24, via map-reply, record ttl: 1440, auth, not mobile Locator State Priority/Weight 173.36.254.163 up 1/100 On y voit que les paquets à destination de l'EID 153.16.10.254 doivent être encapsulés dans LISP par l'ITR et transmis à l'ETR en 173.36.254.163. Si vous essayez avec une adresse qui n'est *pas* un EID, vous recevez une réponse négative ("Negative cache entry") : % lig -m l3-london-mr-ms.rloc.lisp4.net 10.1.2.3 Send map-request to l3-london-mr-ms.rloc.lisp4.net for 10.1.2.3 ... Received map-reply from 195.50.116.18 with rtt 0.01200 secs Mapping entry for EID '10.1.2.3': 10.1.0.0/16, via map-reply, record ttl: 15, not auth, not mobile Negative cache entry, action: forward-native Et si vous ne recevez rien : % lig -m l3-london-mr-ms.rloc.lisp4.net 153.16.10.254 Send map-request to l3-london-mr-ms.rloc.lisp4.net for 153.16.10.254 ... Send map-request to l3-london-mr-ms.rloc.lisp4.net for 153.16.10.254 ... Send map-request to l3-london-mr-ms.rloc.lisp4.net for 153.16.10.254 ... *** No map-reply received *** Alors le plus probable est que vous êtes derrière un pare-feu fasciste qui bloque les réponses. Pensez à autoriser le port UDP 4342, par exemple sur Linux : # iptables --insert INPUT --protocol UDP --sport 4342 -j ACCEPT (ou peut-être, sur un pare-feu avec état, l'état RELATED mais je n'ai pas testé.) tcpdump ne connait pas encore LISP donc vous ne verrez que deux paquets non analysés (notez que la réponse est venue d'une autre adresse IP que celle interrogée...) : 14:56:11.873961 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 88) 217.70.190.232.50793 > 206.223.132.89.4342: UDP, length 60 14:56:12.051870 IP (tos 0xc0, ttl 110, id 31203, offset 0, flags [none], proto UDP (17), length 80) 173.36.254.162.4342 > 217.70.190.232.57375: UDP, length 52 On peut aussi utiliser un "looking glass" (cf. section 5) comme http://lispmon.net/lig.cgi, pour interroger sur un EID particulier. Si on veut une vision générale de l'état de LISP, on peut regarder http://www.lisp4.net/status (état des résolveurs) et http://www.lisp4.net/lisp-site (liste de sites LISP et de résolveurs). --------------------------- Liste de diffusion du FRnOG http://www.frnog.org/