starla
v0.3.1 AGPL-3.0 rust 2024

01 · overview

A drop-in RIPE Atlas probe,
written in Rust.

starla is an alternative unofficial implementation of the RIPE Atlas software probe. Same wire protocol, same result format. Distributed as a single statically-linked binary that runs on Linux, macOS, and Windows — on bare metal, in a container, or as a Nix module.

amd64 · arm64 linux · macOS · windows ~4 MB binary zero local ports

01What it is

RIPE Atlas is a global measurement network: thousands of probes run scheduled ping, traceroute, DNS, HTTP, TLS, and NTP measurements from their vantage points and ship the results back to the RIPE NCC. The reference probe is a daemon originally written in C, intended for embedded hardware.

starla is the same daemon, rewritten as one Rust binary. It connects to the same controller infrastructure, accepts the same CRONLINE and ONEOFF commands, and produces RESULT lines that are byte-compatible with the reference probe's output (field order, spacing, numeric precision included).

Same wire protocol. Different runtime — one binary, no OpenSSH, no subprocesses, no listening ports.

02Features

measurements

All six measurement types

Ping, traceroute, DNS, HTTP, TLS, NTP. RESULT line format byte-compatible with the reference probe.

pingtracedns httptlsntp
transport

Pure-Rust SSH (russh)

No OpenSSH dependency, no subprocess fan-out. One async runtime, one binary.

network

No local listening ports

All communication flows through the SSH tunnel; commands arrive over a reverse tunnel and uploads go out via direct-tcpip channels.

packaging

Container, .deb, .rpm, NixOS, brew, MSI

Multi-arch (amd64/arm64). Minimal container image — binary plus CA certs. NixOS & Home-Manager modules with systemd hardening.

observability

Optional Prometheus exporter

Measurement counts, queue depth, upload latency, SSH state. Configurable listen address.

storage

Bounded in-memory result queue

Configurable capacity. Drops oldest first when full or when the controller link goes dark.

03Quick start

Pick a runtime. Each ships with sensible defaults; configuration is optional.

shelldocker · podman
# persistent state, raw sockets for ping/trace docker run -d --name starla \ -v starla-state:/state \ --cap-add NET_RAW \ ghcr.io/ananthb/starla:latest
nixflake input + module
inputs.starla.url = "github:ananthb/starla"; # in your nixos config: imports = [ starla.nixosModules.default ]; services.starla.enable = true;
shellapt
curl -LO https://github.com/ananthb/starla/releases/latest/download/starla_amd64.deb sudo dpkg -i starla_*.deb sudo systemctl enable --now starla
shelldnf
curl -LO https://github.com/ananthb/starla/releases/latest/download/starla.x86_64.rpm sudo dnf install ./starla*.rpm sudo systemctl enable --now starla
shellhomebrew
brew install ananthb/starla/starla brew services start starla # optional GUI tray applet brew install --cask ananthb/starla/starla-tray
shellrelease tarball
curl -LO https://github.com/ananthb/starla/releases/latest/download/starla-amd64.tar.gz tar xzf starla-amd64.tar.gz sudo ./starla/starla

Full options, configuration, and signature verification are in the installation guide.

04How it works

On first run, starla generates an SSH key pair and registers with a RIPE Atlas registration server. After registration it opens a single long-lived SSH connection to the assigned controller and receives measurement schedules over a reverse-tunneled telnet stream. Results are uploaded back through SSH direct-tcpip channels.

Probe state (SSH keys, probe ID, known hosts) is persisted in the state directory and survives restarts. Pending result uploads live in a bounded in-memory queue and do not.

See architecture for the data flow, or protocol for the wire-level details.

05Register your probe

After first start, copy the public key from the log output (or probe_key.pub in the state directory) and paste it into the application form at atlas.ripe.net/apply/swprobe. starla retries in the background; once approved, it connects and begins running measurements.

note

Each probe is bound to its SSH key. If you lose the state directory, generate a new key and re-apply — old probes can't be recovered.