Run a public DarkIRC node
A public node accepts inbound P2P connections and advertises a reachable address. A clearnet address exposes the node’s IP or hostname to peers. Use the Tor guide if that is not acceptable.
First follow the normal-node or
archive-node guide. Stop DarkIRC before editing
~/.config/darkfi/darkirc_config.toml.
Clearnet tcp+tls
This example listens on the conventional DarkIRC P2P port. Replace the advertised hostname, open TCP port 9600 in the firewall, and configure router port forwarding if necessary.
[net]
active_profiles = ["tcp+tls"]
outbound_connections = 8
inbound_connections = 64
[net.profiles."tcp+tls"]
seeds = ["tcp+tls://lilith0.dark.fi:9600", "tcp+tls://lilith1.dark.fi:9600"]
inbound = ["tcp+tls://0.0.0.0:9600", "tcp+tls://[::]:9600"]
external_addrs = ["tcp+tls://chat.example:9600"]
Remove the IPv6 listener if the host has no working IPv6 route. An
external_addrs value must resolve to this host and be reachable from outside
its LAN. Do not advertise 0.0.0.0, [::], loopback, or a private address.
The complete clearnet example is
bin/darkirc/config/darkirc-clearnet.toml.
Multi-transport bridge
A bridge can accept both clearnet and Tor connections. Each inbound transport needs a reachable external address:
[net]
active_profiles = ["tcp+tls", "tor"]
outbound_connections = 8
inbound_connections = 64
[net.profiles."tcp+tls"]
seeds = ["tcp+tls://lilith0.dark.fi:9600", "tcp+tls://lilith1.dark.fi:9600"]
inbound = ["tcp+tls://0.0.0.0:9600"]
external_addrs = ["tcp+tls://chat.example:9600"]
[net.profiles."tor"]
seeds = [
"tor://g7fxelebievvpr27w7gt24lflptpw3jeeuvafovgliq5utdst6xyruyd.onion:9600",
"tor://yvklzjnfmwxhyodhrkpomawjcdvcaushsj6torjz2gyd7e25f3gfunyd.onion:9600",
]
inbound = ["tor://127.0.0.1:9601"]
The tor:// inbound form asks the built-in Arti transport to create an
ephemeral onion service. Its onion address changes when the service is
recreated and does not need a manual external_addrs entry. For a stable onion
address, use the static Tor setup.
Set mixed_profiles only when deliberately routing one endpoint scheme through
another active transport. It is not required merely to enable two profiles.
UPnP IGD
UPnP can request a router port mapping and discover the external address. It increases trust in the local router and must be enabled at compile time. Build with all features:
% cargo build --release --all-features --package darkirc --bin darkirc
This writes target/release/darkirc; run or install that binary so the
feature-enabled build is the one actually used.
Then add the query to a clearnet listener:
[net.profiles."tcp+tls"]
inbound = ["tcp+tls://0.0.0.0:9600?upnp_igd=true"]
Optional URL parameters include upnp_igd_lease_duration,
upnp_igd_timeout, upnp_igd_description, and
upnp_igd_ext_addr_refresh. Verify the mapping from another network; a log
message or local router entry alone does not prove reachability.
Verify the node
Restart DarkIRC, wait for Event Graph sync, and inspect sessions with dnet
after enabling p2p.get_info as described in the
dnet guide.
Test every advertised URL from a separate network using the
ping utility. An archive is
useful to peers only while it remains reachable and retains complete message
bodies (fast_mode = false).