Skip to main content

IP, LAN and I2P

The fastest way to put two Reticulum nodes in contact is over an IP link. TCP and UDP carry frames between hosts that already have a route to each other; AutoInterface finds peers on the same LAN with no configuration; Backbone scales to thousands of concurrent transport peers; I2P can hide the IP addresses on either end from each other. All five run over the same socket layer and can be active on a node at once.

For protocol-level detail (header formats, IFAC, mode semantics) see the Reticulum manual.

TCPClientInterface

A simple outbound TCP socket — what you use to dial a public Ratspeak server, another public hub, or a friend's transport node.

[[Emerald]]
type = TCPClientInterface
enabled = yes
target_host = 2.ratspeak.org
target_port = 4242

target_host and target_port are required (IPv4, IPv6, or hostname). kiss_framing = yes is only for an external KISS soundmodem and must never be set against a TCPServerInterface. i2p_tunneled = yes adjusts timeouts when the socket is going through a local I2P SAM tunnel. The interface auto-reconnects with backoff on drop, and multiple TCPClientInterface blocks dial in parallel.

TCPServerInterface

Accepts inbound TCP connections. Run this on a host with a routable address (or behind a port-forward).

[[Inbound]]
type = TCPServerInterface
enabled = yes
listen_ip = 0.0.0.0
listen_port = 4242
mode = gateway

listen_ip defaults to 0.0.0.0; use :: for IPv6 dual-stack. prefer_ipv6 = yes prefers AAAA over A on outbound resolution. Use mode = gateway when this listener is the client-facing entrypoint for other nodes. If the same machine also bridges a local LoRa or serial segment to a wider IP network, put gateway on the local/client-facing side and use boundary on the wider-network side when you need to constrain announce flow.

AutoInterface — zero-config LAN

AutoInterface uses IPv6 link-local multicast to find every other Reticulum node on the same broadcast domain, then talks to them over UDP. No address, no port, no peer list.

[[LAN]]
type = AutoInterface
enabled = yes
group_id = home

Discovery rides UDP 29716, data rides UDP 42671 — both must be open on the host firewall. Nodes only see each other if their group_id matches; one physical LAN can host as many isolated AutoInterface meshes as you have group names. discovery_scope (default link) accepts link, admin, site, organisation, or global and controls multicast TTL. discovery_port and data_port override the defaults if those ports are in use. devices whitelists specific NICs (eth0, wlan0); ignored_devices blacklists them.

Failure modes are predictable: managed switches that drop multicast, hotel/captive-portal Wi-Fi that isolates clients, and most commercial VPNs (no IPv6 multicast) all break it. On those networks, fall back to TCP.

BackboneInterface — high-throughput WAN

Backbone is HDLC framed over TCP with per-peer keepalive tuning, wire-compatible with TCPServerInterface / TCPClientInterface peers but scaling to thousands of concurrent connections per process. It runs on Linux, macOS, and Windows desktop; Linux additionally gets TCP_USER_TIMEOUT for fast detection of stuck connections. Mobile builds (iOS, Android) hide Backbone in the Ratspeak UI for now — use TCPServerInterface / TCPClientInterface there.

[[Backbone]]
type = BackboneInterface
enabled = yes
listen_on = 0.0.0.0
port = 4242
mode = gateway

listen_on and port set the bind address. An optional remote = host:port makes Backbone dial outbound as well. Use Backbone when you're a transport node fanning out to many clients, or when TCP is measurably the bottleneck. In the Ratspeak desktop UI, Backbone surfaces as an opt-in toggle on the standard TCP connect / host modals rather than a separate flow.

UDPInterface

Plain UDP, unicast or multicast. Useful for a known peer on a network where TCP is awkward, or a multicast group on a controlled segment.

[[Peer over UDP]]
type = UDPInterface
enabled = yes
listen_ip = 0.0.0.0
listen_port = 4242
forward_ip = 10.0.0.5
forward_port = 4242

For a multicast group, point both listen_ip and forward_ip at the same multicast address. Most operators reach for AutoInterface (LAN) or TCP (WAN) first — UDP shines when topology is static and overhead matters.

I2PInterface — IP-hiding transport

Reticulum carried over an I2P SAM tunnel. Private Reticulum and LXMF payloads are already encrypted above the transport; I2P adds transport anonymity at the IP layer — neither end sees the other's clearnet IP. Bring up i2pd first (the SAM API must be reachable locally, default 127.0.0.1:7656).

[[I2P]]
type = I2PInterface
enabled = yes
connectable = yes
peers = 5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq.b32.i2p

connectable = yes accepts inbound — the interface prints its own .b32.i2p address on first run, which is what you share with peers. peers is a comma-separated list of .b32.i2p addresses to dial. Set i2p_tunneled = yes on a local TCP interface that is being tunneled by I2P, so its timeouts adjust for tunnel latency.

First start is slow — tunnel construction takes minutes. Steady-state latency is 1–5 seconds per hop and throughput is well below direct TCP, but the link survives CGNAT, dynamic IPs, and most restrictive firewalls. Pair I2P with a reachable Offline Inbox/propagation node and the latency cost largely disappears for delay-tolerant messaging.

IFAC — per-interface authentication

Any interface above can be locked to peers that share a passphrase. Set network_name and passphrase on every node that should join — packets without a matching IFAC signature are dropped at ingress before the protocol sees them.

[[Private TCP]]
type = TCPServerInterface
listen_ip = 0.0.0.0
listen_port = 4242
network_name = our-mesh
passphrase = correct horse battery staple

Leave ifac_size unset unless you are deliberately tuning IFAC overhead; the default is chosen per interface. The upstream Reticulum manual defines explicit ifac_size values in bits, and normal users should not need to override it. IFAC is an authentication boundary, not a confidentiality boundary — private payloads are already encrypted above it. See the Reticulum manual for the full mode/IFAC matrix.

Public Ratspeak TCP servers

Adding a public Ratspeak TCP server gives you immediate reach across the existing Reticulum network. In the app, the public Ratspeak servers are labelled by friendly names:

NameEndpoint
Ruby1.ratspeak.org:4141
Emerald2.ratspeak.org:4242
Diamond3.ratspeak.org:4343

The legacy endpoint rns.ratspeak.org:4242 is an alias for Emerald.

In the app, "Official" means the server is managed by Ratspeak; "Unofficial" means it is operated by a third party.

Other public Reticulum hubs are independent of Ratspeak:

  • For wider Reticulum connectivity, use the current Reticulum connect/backbone information at reticulum.network/connect.html or a community directory you trust.

Hubs are convenient, not load-bearing. If you intend to be reachable long-term, run your own TCPServerInterface (or BackboneInterface on a desktop OS for higher peer counts) and announce yourself — the network gets healthier with every node that does.