Subnets, Exits and Uplink
Make a machine a subnet router or an exit node, or link two machines over a serial cable.
Subnet Routers
A subnet router makes a private network that it is attached to reachable from the rest of the realm. Hosts on that network need nothing installed, so printers, cameras, PLCs and other devices that cannot run conflux become reachable too.
To make a machine a subnet router, pass --subnet to up or proxy, once for each entry.
$ sudo conflux up --subnet 192.168.1.0/24
In a container, or on a machine without
CAP_NET_ADMIN, run the router in proxy mode. It needs no port specs:$ sudo conflux proxy --subnet '*'
Each entry takes one of these forms:
| Entry | Offers |
|---|---|
192.168.1.0/24 | That private prefix. It must have no host bits set |
eth1 | The private networks on that interface, followed as they change, including through DHCP |
'*' | Every private network on every interface. The quotes stop the shell from expanding it. |
192.168.1.0/24@office | That prefix, offered only to peers whose taints are compatible with {office} |
eth1@office+lab | That interface, offered only to peers compatible with {office, lab} |
Entries follow these rules:
- A private network is one in
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10orfc00::/7. For the public internet, use an exit node. - After
@, name only taints that this machine carries. - A list holds at most 64 entries of up to 255 bytes each. Together, the entries can use at most 16 distinct sets of taints.
- If an entry matches no network the machine is attached to, the anchor stops instead of advertising it. Conflux retries, so it picks up an interface that comes up later.
- To stop forwarding, pass
--no-subnet.
Refused entries
| Message | What to do |
|---|---|
subnet 192.168.1.7/24 has host bits set; did you mean 192.168.1.0/24 | Write the network, not an address in it. |
subnet 8.8.8.0/24 is not a private network | Anchor forwards private networks only. For the internet, use an exit node. |
subnet "a,b" contains a comma | Pass --subnet once for each entry. |
subnet "X@lab" is bound to "lab", which this machine is not in | Name only taints this machine carries. The message lists them. |
N subnets, and anchor serves at most 64 | Use fewer entries, or an interface name that covers several networks. |
Host Setup
A proxy machine needs no host setup. The anchor forwards traffic from its own process, so the destination sees this host's address.
A TUN machine forwards through the host, and the setup depends on the platform:
- Linux. Anchor sets up the host when it starts and undoes the changes when it stops. It turns on IP forwarding, adds NAT for traffic from the realm, clamps the TCP MSS and lets its interface through a firewall that drops forwarded traffic. This needs
nfton kernel 5.2 or later, oriptableswithipsetandip6tables, and a writable/proc/sys. - macOS, the BSDs, Windows. Anchor changes nothing. When it starts, it prints the commands for that host: forwarding, a NAT rule and MSS clamping. On macOS and the BSDs, the NAT rule and the clamping go in
pf.conf.
Subnet Orders
On a sovereign network, a member with the subnets power can replace a router's list while the router runs. The guardian's root node, its own anchor in the realm, is one such member.
The most recent list takes effect, and anchor keeps it across every restart and reboot. It stays in force until you run up or proxy with --subnet or --no-subnet. Conflux tells you when that happens.
sudo conflux status shows whose list is in force:
forwarding 10.9.0.0/24@lab — set by an order from anchor… at 2026-10-06T09:00:00Z, in place of conflux.json's; --subnet or --no-subnet sets it again
To send the order, see the CLI Reference.
Exit Nodes
An exit node lets the rest of the realm send internet traffic through its connection. Serve an exit from a machine with a connection you trust. Use an exit on a machine whose own internet traffic should leave through it:
$ sudo conflux up --serve-exit # be a way out to the internet for the realm $ sudo conflux up --use-exit # send this machine's own internet over the overlay
sudo conflux status and the output of up show an exit row only when the machine serves or uses an exit:
exit serving a way out to the public internet for the realm exit sending this machine's internet traffic over the overlay
Exits follow these rules:
- A machine can serve an exit or use one, but not both. Neither is on until you ask for it. If you ask for both, conflux refuses and suggests
--no-use-exitor--no-serve-exit. - Both settings also work with
proxy. In proxy mode,--use-exitcovers only the anchor's own traffic, because nothing else on the host can see the overlay. - Conflux never takes either setting from a manifest, so a file alone cannot make a machine an exit node. To turn the settings off, pass
--no-serve-exitor--no-use-exit. - On Linux in TUN mode, anchor sets up the host for forwarding, as for a subnet router. See Host Setup.
Serial Uplink
An uplink connects an anchor to its realm over a serial cable instead of the host's network. Use it to link two machines that have no IP network between them.
Give each machine the device that its end of the cable is attached to. On an uplink, the anchor binds no UDP socket and advertises no address.
An anchor reaches its realm over a UDP socket on the host's network or over one uplink, never both. A link carries one peer, so the two machines on the cable reach only each other, and nothing over IP can reach them. Enrol each machine while it still has internet access, then move it onto the cable.
A link is point to point and carries one peer. An anchor uses either the host's network or one uplink, never both. Two machines on a cable therefore reach only each other, and nothing over IP can reach them.
Enrolment and renewal use HTTPS, which the cable cannot carry. On the first machine, run
upwith the device and copy the taint it mints. On the second machine, pass that taint:$ sudo conflux up --uplink /dev/ttyUSB0:115200 --taint brhk-2mq9-tzva-6pjs-k4xe-nw7d-qf --no-ipv4 Starting. anchor anchor6btpa3gn6w4stipba4hekzho7caw6srfyy5puvbz7mfanaiept5a overlay fd80:c4b9:99ae:4411:c531:fd4f:754f:f08a/48 uplink /dev/ttyUSB0:115200 — no socket bound, no address advertised interface anchor0 taint brhk-2mq9-tzva-6pjs-k4xe-nw7d-qf credential valid until 2026-10-06T06:35:43Z (29d 23h) service active (systemd: conflux.service, enabled at boot) Reachable from any machine that runs: conflux up --taint brhk-2mq9-tzva-6pjs-k4xe-nw7d-qf
Uplinks follow these rules:
- Give the device as
/dev/ttyUSB0to keep its line settings, or as/dev/ttyUSB0:115200to set its speed. Set the same speed on both ends. Conflux refuses thefd:Nform. - Uplinks work on Unix only. On Windows, conflux refuses the flag with this message:
anchor has no way to open a link on Windows, so --uplink cannot be used here. - The setting persists, so a later
upwithout the flag keeps the link. To return to the host's network, pass--no-uplink. - Conflux refuses
--portand an explicit--lan-discovery yeswith an uplink, because there is no socket to give a port and no host network to search. - Both modes work over a cable, and so does --subnet.
Line speed
| Line speed | Handshake | |
|---|---|---|
| 115200 baud | About 2 s | Comfortable |
| 57600 baud | About 4 s | Fine |
| 19200 baud | About 12 s | Usable. Conflux warns below this |
| 9600 baud | About 25 s | Marginal against a 60-second idle timeout |
| LoRa and other duty-cycled radios | Hours | No |
Below 19200 baud, conflux warns but does not refuse, because a slow link that completes the handshake still works. The handshake is large because it carries post-quantum certificates in both directions.
Dropped links
Conflux watches the device and reopens it at once if it disappears. A link that carries nothing for ninety seconds is treated as ended and reopened, after a wait of one to thirty seconds.
sudo conflux status counts the reopens:
uplink 3 reopens, last 2026-09-08T11:04:12Z
A count that keeps rising points to a problem with the cable, a connector or the machine at the other end. To work through the checks, see Uplink Problems.