cjdroute.conf(5)
β¨ cjdroute.conf(5) β the cjdns config file, explained by your fave β¨
okay so bestie, welcome to cjdroute.conf(5) from the Cjdns Reference π this is THE page for the file that makes your cjdns node actually do stuff. grab a snack, we're going in π
π NAME π
cjdroute.conf β the Cjdns configuration file. that's it, that's the name, iconic π
π¦ DESCRIPTION π¦
The cjdroute.conf file configures the cjdns routing engine, cjdns(8), generally through cjdroute(1). it's giving "control panel for your whole node" fr fr π
Now here's the cute part: the configuration is written in a variation of the JSON format that also accepts traditional C-like comments, like single line comments (//) and multiline comments (/* and */). and as if that wasn't enough, unused JSON values found in cjdroute.conf are ignored by cjdns and can be used as a form of JSON-compliant comments. yes bestie, you can leave lil notes for yourself πΈ
π CONFIGURATION π
"privateKey": "..."
Your node's private key. keep it secret π because your confidentiality and data integrity depend on it. no sharing, not even with me π
"publicKey": "..."
Your node's public key. it's based on your private key. it is fine for anyone to know this. go ahead, put it on your story πΈ
"ipv6": "..."
Your node's IPv6 address when it is on the network. it is generated by using the first 16 bytes of a double SHA-512 of your public key. all cjdns IPv6 addresses must begin with "fc" or else they are invalid. that's the vibe check, and fc is the only passing grade β¨
"authorizedPasswords": [...]
An array of passwords that may be used to connect (peer) to your node. your VIP list π«Ά
"password": "..."β a password which can be used to peer with your node."user": "..."β a human-readable string that identifies what password a peer is using on the admin interface. if omitted, the password will be identified by its position within the array (starting from 0).
Example:
"authorizedPasswords":
[
{ "password": "AnExamplePassword", "user": "Bob" },
{ "password": "YetAnotherExample", "user": "Alice" },
{ "password": "j3fus4r3gkhv80xdz1yqc0qvn1p91hr", "user": "Eve" }
]
"admin": {...}
An object which defines where to bind to the admin RPC server as well as the password for the admin RPC server. the two required strings are "bind", which should be in the format "IP:PORT", and "password", which should preferably be a long random string of characters. make it long, make it chaotic, make it unguessable π₯
"interfaces": {...}
An object that defines which interfaces cjdns will bind to and what peers to connect to. there are two different interfaces, UDPInterface and ETHInterface, both of which are arrays. within each array there are a variety of different options π
"bind": "..."β defines what the interface should bind to. in UDPInterface, the bind is anIP:PORTstring, such as"0.0.0.0:12345", while in ETHInterface the bind is a network interface, such as"eth0"."beacon": Integerβ this option is only found in ETHInterface and defines whether auto-connecting beacons should be sent or listened to. this is useful for a zeroconf local network π0β Disabled.1β Accept incoming beacons and try connecting to the sender.2β Accept incoming beacons and broadcast beacons to the local network.
"connectTo": {...}β defines which nodes cjdns should connect to with the specified interface. multiple nodes may be placed in a single"connectTo"as long as each are seperated by commas. if a node happens to be offline or become offline during runtime, cjdns will attempt to reconnect at regular intervals. the one difference in this option between UDPInterface and ETHInterface is that UDPInterface connects to an"IP:PORT"while ETHInterface connects to a MAC address. (yes, it really is spelled "seperated" up there, we don't gatekeep the original tea β)
UDPInterface Example:
"connectTo":
{
"1.2.3.4:54321":
{
"login": "login From Your Peer's authorizedPasswords",
"password": "password From Your Peer's authorizedPasswords",
"publicKey": "Your Peer's publicKey.k"
},
"5.6.7.8:46321":
{
"login": "cueball",
"password": "Correct Horse Battery Staple",
"publicKey": "Other Peer's publicKey.k"
}
}
"router": {...}
An object that holds configuration information on the router. the main character of your config, lowkey π
"interface": {...}
Defines the type of interface used for connecting to the cjdns network. it requires a "type" string, and optionally a "tunDevice" string. the "type" string defines the type of interface used, however only "TUNInterface" is supported at the moment. the "tunDevice" string defines the name of a persistent TUN device to use, which is helpful for starting cjdroute as its own user instead of root. so convenient, we love π«Ά
"ipTunnel": {...}
A system for tunneling ICANN IPv4 and ICANN IPv6 through cjdns. this is using the cjdns switch layer as a VPN carrier.
NOTE: Simply editing your configuration file is not sufficient to setting up an ipTunnel gateway. Please read through tunnel/README.md in the cjdns git tree for more information. seriously bestie, go read it, the config file alone is NOT enough π
"allowedConnections": [...]β nodes allowed to connect to us, specified by their public key, and what IP address(es) to give them. it is fine to only specify one address.
Example:
"allowedConnections":
[
{
"publicKey": "f64hfl7c4uxt6krmhPutTheRealAddressOfANodeHere7kfm5m0.k",
"ip4Address": "192.168.1.24",
"ip4Prefix": 24,
"ip6Address": "2001:123:ab::10",
"ip6Prefix": 0
},
{
"publicKey": "ydq8csdk8p8ThisIsJustAnExampleAddresstxuyqdf27hvn2z0.k",
"ip4Address": "192.168.1.25",
"ip4Prefix": 24
}
]
"outgoingConnections": [...]β an array of nodes to connect and ask for IP addresses.
Example:
"outgoingConnections":
[
"6743gf5tw80ExampleExampleExampleExamplevlyb23zfnuzv0.k",
"pw9tfmr8pcrExampleExampleExampleExample8rhg1pgwpwf80.k",
"g91lxyxhq0kExampleExampleExampleExample6t0mknuhw75l0.k"
]
"security": [...]
An array that defines what user to change to after startup and whether to exempt the Angel process from this user change. glowed up and secured π
"setuser": "username"β user to switch to after startup, for security purposes. default value is"nobody"."exemptAngel": Integerβ whether or not to exempt the Angel process from the user change. the Angel is a small isolated piece of code which exists outside of the core's strict sandbox but does not handle network traffic. this option must be enabled for ipTunnel to automatically set IP addresses for the TUN device.0β False1β True
"logging": {...}
Add or uncomment "logTo":"stdout" to have cjdns log to stdout rather than making logs available via the admin socket. for the girlies who want their logs in their face, live, streaming πΊ
"noBackground": Integer
If set to a non-zero value, cjdns will not fork to the background. recommended for use in conjunction with "logTo":"stdout". bestie combo, no cap π€
"dns": {...}
This section is used to configure the dns capabilities being added to cjdns. unfortunetly, there is no documentation for this DNS section at this time. we're all just out here guessing, and yes that's how it's spelled, we don't fix the lore π
"keys": [...]"servers": [...]"MinSignatures": Integer
πΈ FILES πΈ
/etc/cjdroute.confβ a common location for the configuration file. like, the classic spot, the usual suspect π
π SEE ALSO π
cjdroute(1)cjdns(8)
and that's the whole page, bestie π this was cjdroute.conf(5) from the Cjdns Reference, dated 2014-03-16, and it ate, periodt β¨ go forth and peer responsibly, mwah π§π
π¦ where this page comes from
- alpine 3.24: cjdns-doc 22.3-r0 Β· GPL-3.0-or-later
- arch rolling: cjdns 22.3-2 Β· GPL-3.0-or-later
- epel 9: cjdns 21.1-3.el9 Β· GPLv3 and MIT and BSD and ISC
- fedora 43: cjdns 21.1-16.fc41 Β· GPLv3 and MIT and BSD and ISC
- fedora 44: cjdns 21.1-16.fc41 Β· GPLv3 and MIT and BSD and ISC
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms