I created a bot to
answer BGP
queries over the fediverse (decentralized
social
network, best known implementation being Mastodon). What for? Well,
mostly for the fun, but also because I need from time to time to
find out the origin AS for an IP address or
prefix, and I don't have a direct access to a DFZ router. This article is
to document this project.
The idea was originally suggested during my lightning talk at RIPE 76 meeting in
Marseille.
First, how to use it. Once you have a
Fediverse account (for Mastodon, see
https://joinmastodon.org/
), you
write to @bgp@mastodon.gougere.fr
. You just tell it
the IP address (or IP prefix) you want to know about and it
replies with the actually announced prefix and the origin
AS. There are also links to the RIPE Stat
service, for more details. Here is an example, with the answer:
The bot replies with the same level of confidentiality as the
query. So, if you want the request to be private, use the "direct"
mode. Note that the bot itself is very indiscreet: it logs
everything, and I read it. So, your direct messages will be
private only from third parties, not from the bot
administrator.
If you are a command-line fan, you can use the madonctl tool to
send the query to the bot:
% madonctl toot "@bgp@mastodon.gougere.fr 2a01:e34:ec2a:94a0::4"
You can even make a shell function:
# Definition (in a startup file)
whichasn() {
madonctl toot --visibility direct "@bgp@mastodon.gougere.fr $1"
}
# Usage
% whichasn 2001:67c:2218:e::51:41
You can also, instead of an IP address, just send "info" and the
bot will reply with details about the number of prefixes and AS it knows.
There is also a more classical (non-fediverse) Web interface, at
https://bgp.bortzmeyer.org/IPADDRESS
. For
instance, with curl :
% curl https://bgp.bortzmeyer.org/159.89.230.222
159.89.224.0/20 1406
Note that, unlike the fediverse interface, the Web interface is
not really necessary, you could use other online services such
as
RIPE
Stat. Here is an example with RIPE Stat (we use
jq to parse the resulting JSON):
% curl -s https://stat.ripe.net/data/routing-status/data.json\?resource=185.49.140.0 | jq .data.resource
"185.49.140.0/22"
Now, the implementation of the bot. (You can get all the files
at https://framagit.org/bortzmeyer/fediverse-bgp-bot/
.)
The code is derived from my DNS
bot so I won't repeat here most of the stuff, only the
BGP-specific things.
The bot backend could call directly the RIPE stat API
mentioned above. But there is a limit in the number of requests
and, if the bot is popular, it could be blacklisted. Same thing for
other online services. Hence my choice of getting the raw RIS dumps. Parsing
them and serving them to the bot is done by the WhichASN
daemon.
Other useful services and readings for the
BGP fans:
- We rely on the excellent RIS
(Routing Information Service), which collects and stores
BGP information, before making them available to the
public.
- There are other ways to access RIS data, such as RIPE Stat or RIS Live.
- The RouteViews project has
several
useful tools, such as a DNS
interface. It would solve the rate-limiting issue but,
unfortunately, it works only with
IPv4.
- I also like the Qrator API (but you
need to register).
- I could also have used BGPstream.
- There are also several whois
servers distributing BGP information such as
whois.cymru.com
or whois.bgpmon.net
.