Skip to content

Running a node with dhtnode

Adrien Béraud edited this page Mar 12, 2023 · 34 revisions

dhtnode is a command-line utility included with OpenDHT to run, control and monitor an OpenDHT node.

Running a node using Docker

docker run -d -p4222:4222/udp ghcr.io/savoirfairelinux/opendht/opendht-alpine dhtnode -b bootstrap.jami.net -p 4222 -s

Then you can use your node as a bootstrap for any services that use opendht. Port 4222 will be used.

Using the systemd service (GNU/Linux with systemd)

On Debian and derivatives you might use the official DebianBadge package

OpenDHT includes a systemd service for dhtnode starting from version 1.3.4. To use it, build OpenDHT using CMake with the argument -DOPENDHT_SYSTEMD=On.

See Build the library for details about how to build OpenDHT.

Once installed, start the dhtnode service using:

systemctl start dhtnode

Or enable dhtnode to run automatically on startup using:

systemctl enable dhtnode

Note: The default bootstrap server and port (DHT_ARGS) are specified in the /etc/dhtnode.conf file. It is also possible to change the default value of DHT_ARGS via tools/systemd/dhtnode.conf prior to compilation.

Running dhtnode directly

dhtnode [-p local_port] [-b bootstrap_host:port] [-n netid] [-i] [-D] [-f] [-v [-l logfile|-L]] [-s|-d]

  • -b allows to specify a bootstrap node address (can be any running node of the DHT network)
  • -p allows to specify the local UDP port to bind (optional). If not set, will use any available port. Note that the default OpenDHT port (to ideally use for public nodes) is 4222
  • -n allows to specify a network id (integer). Nodes with different network ids won't talk to each other. Defaults to the main public network (network id 0)
  • -D enables the multicast automatic local peer discovery mechanism
  • -f allows to specify a file path to persist/load the node state (routing table and values)
  • -v enables logging, to standard output by default
  • -L logs to syslog
  • -l logs to a specified file path
  • -s enables service mode (non-forking daemon)
  • -d enables daemon mode (forking daemon, -v logs to syslog by default)
  • -i enables generating a DHT "identity" with the node (RSA key pair, and certificate published on the DHT). Required to perform cryptographic operations (encrypt/sign values) if no private key file is provided.
  • --save-identity save generated identity (certificate and private key) to given file prefix
  • --privkey load identity private key from given file. Required to perform cryptographic operations if no identity is generated.
  • --privkey-password use private key password when loading and saving a private key from file.
  • --certificate load identity certificate from given file. If specified, the certificate is published on the DHT.
  • --proxyserver specify a port to run a proxy server
  • --proxyclient use the proxyserver specified

for instance:

dhtnode -b bootstrap.jami.net:4222 will run a node and use bootstrap.jami.net port 4222 as a bootstrap node.

dhtnode -b bootstrap.jami.net:4222 --proxyserver 8000 will run a node with a proxy server available on port 8000.

dhtnode --proxyclient dhtproxy.jami.net:80 will run a node using dhtproxy.jami.net port 80 as a proxy.

Commands

help

Show a command list with usage.

b {node_hostname:port}

Bootstrap/ping a DHT node. Similar to providing -b host:port as a command line parameter.

g {key}

Get values for {key} (the key is a 40 hexadecimal characters string).

l {key}

Listen for value changes at {key} (the key is a 40 hexadecimal characters string).

p {key} {string_value}

Put the text value {string_value} at {key}.