Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
KADNODE(1)			 Kadnode Manual 		      KADNODE(1)

NAME
     kadnode - P2P name resolver daemon

SYNOPSIS
     kadnode [--announce \domain\] [--daemon] [...]

     kadnode-ctl [...]

DESCRIPTION
     KadNode  is  a  small P2P DNS resolver. It supports authentication based on
     x509 certificates and public key queries as base32 and hexadecimal strings.

JOIN THE SWARM
     KadNode needs to know at least one active peer to join / bootstrap into the
     swarm. There are three ways to achieve this:

     1.  Provide one or more peers to the command line arguments. These could be
	 public BitTorrent trackers, or other KadNode instances: kadnode  --peer
	 bttracker.debian.org --peer 192.168.1.1

     2.  Ping  a peer using the KadNode console if present: kadnode-ctl dht-ping
	 bttracker.debian.org

     3.  Use the local peer discovery feature. Just start KadNode  and	it  will
	 try to discover other KadNode nodes in the local network.

     Also  provide  a  --peerfile  argument  to let KadNode load its peerlist on
     startup and store on every 24h and shutdown. This ensures successful  boot-
     strapping on next startup.

AUTHENTICATION
     KadNode  provides	two  authentication schemes. One works via x509 certifi-
     cates and TLS. The other one uses	raw  secret/public  keys  and  is  hence
     called bob.

   Via TLS
     Typically there are two KadNode instances involved.

     One  node announces a domain, e.g. mynode.p2p. The other node looks for the
     IP address of the announcing node. Authentication happens via TLS, which in
     turn uses X509 certificates.

	 kadnode --announce mynode.p2p --tls-server-cert mynode.crt,mynode.key

     As an alternative, ownership can be proven using an HTTPS server running on
     the same host. In this case, KadNode itself does not need certificates, but
     needs to announce the HTTPS port:

	 kadnode --announce mynode.p2p:443

     The other node doing the lookup for mynode.p2p needs to have access to  the
     root certificate that has been used to sign mynode.crt. These can be a com-
     mon web browsers certificates:

	 kadnode --tls-client-cert /usr/share/ca-certificates/mozilla

     Own certificates authorities can be created and used, of course.

     Note:  --announce is optional in many cases as domains from certificate and
     key files are announced automatically.

   Via BOB
     First create an elliptic curve secret key file:

	 kadnode --bob-create-key mysecretkey.pem
	 Generating secp256r1 key pair...
	 Public key: c492192ac20144ed2a43d57e7239f5ef5f6bb418a51600980e55ff565cc916a4
	 Wrote secret key to mysecretkey.pem

     Now make the secret key load on KadNode startup: kadnode --bob-load-key my-
     secretkey.pem

     Any	 reachable	   node 	can	    now 	 resolve
     c492192ac20144ed2a43d57e7239f5ef5f6bb418a51600980e55ff565cc916a4.p2p to the
     IP address of the announcing host. There is no need to share any additional
     information beforehand.

No Authentication
     KadNode  also  allows to just lookup a hexadecimal string and to get IP ad-
     dresses as return. This is the plain use of the DHT. The hexadecimal string
     will be cut down or filled up with zeros internally to fit the size the DHT
     uses (currently 20 bytes).

OPTIONS
     *	 --announce domain[:port]
	 Announce a domain and an optional port via the DHT.
	 This option may occur multiple times.

     *	 --peerfile file
	 Import peers for bootstrapping and write good peers
	 to this file every 24 hours and on shutdown.

     *	 --user name
	 Change the UUID after start.

     *	 --port port
	 Bind the DHT to this port.
	 Default: 6881

     *	 --config file
	 Provide a configuration file with one command line
	 option on each line. Comments start after '#'.

     *	 --ifname interface
	 Bind to this specific interface.

     *	 --dht-isolation-prefix prefix
	 Only peer with nodes that use the same prefix (base16).
	 This allows an isolated swarm of selected nodes.

     *	 --fwd-disable
	 Disable UPnP/NAT-PMP to forward router ports.

     *	 --daemon
	 Run in background.

     *	 --query-tld domain
	 Top level domain used to filter queries to be resolved by KadNode.
	 Default: p2p

     *	 --verbosity level
	 Verbosity level quiet, verbose or debug.
	 Default: verbose

     *	 --pidfile file-path
	 Write process pid to a file.

     *	 --lpd-disable
	 Disable Local Peer Discovery (LPD).

     *	 --cmd-disable-stdin
	 Disable the local control interface.

     *	 --cmd-path path
	 Bind the remote control interface to a unix socket.
	 Default: /tmp/kadnode/kadnode_cmd.sock

     *	 --dns-port port
	 Bind the DNS server interface to this local port.
	 Default: 3535

     *	 --dns-server address
	 IP address of an external DNS server. Enables DNS proxy mode.
	 Default: disabled

     *	 --dns-proxy-enable
	 Enable DNS proxy mode. Uses /etc/resolv.conf by default.

     *	 --dns-proxy-server ip-address
	 Use IP address of an external DNS server instead of /etc/resolv.conf.

     *	 --nss-path path
	 Bind the "Name Service Switch" to a unix socket.
	 Default: /tmp/kadnode/kadnode_nss.sock

     *	 --tls-client-cert path
	 Path to file or folder of CA root certificates.
	 This option may occur multiple times.

     *	 --tls-server-cert path,path
	 Add a comma separated server certificate file path and key file path.
	 This option may occur multiple times.
	 Example: kadnode.crt,kadnode.key

     *	 --bob-create-key file
	 Write a new secp256r1 secret key in PEM format to the file.
	 The public key will be printed to the terminal before exit.

     *	 --bob-load-key file
	 Read a secret key in PEM format and announce the public key.
	 This option may occur multiple times.

     *	 --ipv4, -4
	 Enable IPv4 only mode for the DHT.

     *	 --ipv6, -6
	 Enable IPv6 only mode for the DHT.

     *	 -h, --help
	 Print the list of accepted options.

     *	 -v, --version
	 Print program version and included features.

   KadNode Console Commands
     When not started in background, KadNode accepts a variety of commands  from
     standard input.

     *	 status
	 Print various status information. This includes DHT identifier,
	 uptime, traffic, number of searches and announcements.

     *	 lookup query
	 Lookup a domain, base16 or base32 string.
	 The .p2p TLD is optional.

     *	 announce-start query[:port]
	 Start to announce a query.

     *	 announce-stop query
	 Remove an announcement.

     *	 announcements
	 List all announcements.

     *	 searches
	 List all searches.

     *	 bob-keys
	 List bob keys.

     *	 help
	 Print detailed help.

     Internal commands:

     *	 port-forwardings
	 List the port forwardings

     *	 constants
	 List internal constants.

     DHT specific commands:

     *	 dht-ping ip-address[:port]
	 Ping another DHT peer. Can be used to bootstrap.

     *	 dht-blocklist
	 List blocked IP addresses.

     *	 dht-peers
	 Print IP addresses of all peers.

     *	 dht-buckets|dht-searches|dht-storage
	 Print various DHT internal data structures.

KadNode External Console
     KadNode  allows  a  limited  set  of commands to be sent from any user from
     other consoles.

     kadnode-ctl [-p path] [status|lookup|...]

     *	 -p path
	 Unix socket used to connect to the command shell of a local KadNode in-
	 stance (Default: /tmp/kadnode.sock).

     *	 -h
	 Print this help.

Name Service Switch (NSS)
     Kadnode can intercept system-wide DNS lookups via NSS. This is need  to  be
     able to use kadnode links in the web browser or for command line tools like
     ssh. For this, /etc/nsswitch.conf need to be configured:

     *	 Copy  libnss_kadnode.so.2  to /lib/. Other libnss_*.so files are likely
	 to be there as well.

     *	 Edit /etc/nsswitch.conf to include kadnode in the  hosts:  line  before
	 entry dns: hosts: kadnode dns

Automatic Port Forwarding
     If  KadNode  runs on a computer in a private network, it will try to estab-
     lish a port forwarding for the DHT port and ports used  for  announcements.
     Port  forwarding  only works if UPnP/NAT-PMP is compiled into KadNode (fea-
     tures "natpmp" and "upnp") and it is enabled by the gateway/router. This is
     useful to make a local service (e.g. a web server) reachable from	the  In-
     ternet without the need to configure port forwardings manually.

Compile Time Features
     The  KadNode  version  is followed by a list of the features that were com-
     piled in. E.g.:

	 $ kadnode -v
	 kadnode 2.4.0 ( bob cmd debug dns lpd nss tls )

     *	 bob: Support for simple public key authentication (secp256r1).

     *	 cmd: Remote command line support (kadnode-ctl).

     *	 debug: Enable debug support. For development only.

     *	 dns: KadNode offers a local DNS server interfaces.

     *	 lpd: Local Peer Discovery. Find DHT clients on the local network.

     *	 nss: Name Service Switch. Needed to intercept	queries  on  the  system
	 level.

     *	 tls: Transport Layer Security support. Authenticate via HTTPS.

LICENSE
     MIT/X11

mwarning			  October 2024			      KADNODE(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=kadnode&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help