An open and community-driven project to maintain simple to use Smokeping targets with scripting to automatically generate/update your Targets file. See a demo in action here or check out the automatically generated INSTANCES.md.
In early 2023 we started offering IP transit services at Eranium, this is a different kind of beast compared to an internet exchange and many other factors come into play. Running an autonomous system with a variety of customers and endusers requires monitoring. A nice and visual way to monitor your network (destinations) is to use Smokeping. Read more about the Smokeping project here, it may look outdated but it still works great.
The goal of this project is to build and maintain a standardized list of targets for our Smokepings, free to use by all network operators or network enthusiasts. The aim is to have as many locations as possible.
This example assumes you have Smokeping installed using Docker, find out how here.
Download the latest Targets file and save it where Smokeping expects it, then replace Example with your company name:
wget -O /opt/smokeping/config/Targets https://raw.githubusercontent.com/eranium/smokeping-targets/refs/heads/main/config/Targets
If you want to generate your own Targets file, run php tools/build.php default SMOKEPING-NAME and the file will be created/updated in the config map.
In order to coordinate this, we've come up with a simple format for targets saved in JSON, so we can automate/script it. The directory structure is as follows:
targets
│
└───anycast.json
│
└───root.json
│
└───$CONTINENT
│ │
│ └───$COUNTRY.json
│ │ {$TARGET}
│ │ {$TARGET}
| | {$TARGET}
| Variable | Explanation |
|---|---|
anycast.json |
A fixed list of known and popular anycast targets. |
root.json |
A fixed list of the authoritative root servers. |
$CONTINENT |
Directory name based on two letter ISO 3166 continent code. |
$COUNTRY |
File containing JSON data, name based on two letter ISO 3166-1-alpha-2 country code. |
$TARGET |
One target array containing data, stored in a big array with JSON. |
An example JSON file for the Netherlands would be NL.json:
[
{
"name": "Example ISP",
"asn": 64512,
"ipv4": "0.0.0.0",
"ipv6": "::1",
"location": "City",
"category": "isp",
"smokeping": "https://example.com/smokeping"
}
]| Key | Explanation |
|---|---|
"name" |
Name of the network excluding company registration type. |
"asn" |
The network AS number formatted as integer. |
"ipv4" |
IPv4 address to test against, must be a reliable target without aggressive ratelimiting. |
"ipv6" |
IPv6 address to test against, if there is no IPv6, shame on them and set as false. |
"location" |
The location of the IP address, based on UN/LOCODE city name. |
"category" |
The category of this target, see the table below for clarification. |
"smokeping" |
If the network offers a smokeping, add URL here. If not, set it to false. |
| Category | Explanation |
|---|---|
root |
Authoritative root servers (only used in root.json) |
anycast |
Anycast network (only used in anycast.json) |
isp |
Providing internet access to eyeballs. |
carrier |
Provides connectivity to a network, like T1/2 operator. |
gov |
Government related network. |
edu |
Educational network like schools and universities. |
content |
Content oriented network like streaming and hosting. |
other |
Other or unknown networks. |
Feedback is as always welcome. Contributions in the form of pull requests are even better! Make sure to follow the format. If you don't have the knowledge or the data, you can also consider opening an issue here based on a template so we can try adding it.
This project includes an example script tools/build.php that generates the Targets file based on all the source data, you should be able to customize this if you want to generate a different format.
The ready to go Targets file contains a link back to this project, as it is community-driven, it would benefit us all if people contribute.
Mozilla Public License Version 2.0