A DNS server providing self-sovereign and censorship-resistant domain names. It resolves records hosted on the Mainline DHT, the biggest DHT on the planet with ~15M nodes that services torrents since 15 years.
Use one of the hosted DNS servers to try out pkdns quickly.
tar -xvf tarfile.tar.gz
.pkdns -f 8.8.8.8
.127.0.0.1
.Make sure you have the Rust toolchain installed.
git clone https://github.com/pubky/pkdns.git
.cd pkdns
.cargo run --package=pkdns -- -f 8.8.8.8
.127.0.0.1
.Follow one of the guides to change your DNS server on your system:
Verify your server with this domain http://7fmjpcuuzf54hw18bsgi3zihzyh4awseeuq5tmojefaezjbd64cy./.
Verify the server resolves pkarr domains. Replace PKDNS_SERVER_IP
with your pkdns server IP address.
nslookup 7fmjpcuuzf54hw18bsgi3zihzyh4awseeuq5tmojefaezjbd64cy PKDNS_SERVER_IP
Troubleshooting If this does not work then the pkdns server is likely not running.
Verify it resolves regular ICANN domains. Replace PKDNS_SERVER_IP
with your pkdns server IP address.
nslookup example.com PKDNS_SERVER_IP
Troubleshooting If this does not work then you need to change your ICANN fallback server with
pkdns -f REGULAR_DNS_SERVER_IP
. Or use the Google DNS server:pkdns -f 8.8.8.8
.
Here are some example pkarr domains:
Hint: Always add a ./
to the end of a pkarr domain. Otherwise browsers will search instead of resolve the website.
Other services might occupy the port 53 already. For example, Docker Desktop uses the port 53 on MacOS. systemd-resolved is using it on Ubuntu. Make sure to free those.
Usage: pkdns [OPTIONS]
Options:
-f, --forward <forward> ICANN fallback DNS server. IP:Port [default: 192.168.1.1:53]
-s, --socket <socket> Socket the server should listen on. IP:Port [default: 0.0.0.0:53]
-v, --verbose Show verbose output.
--cache-ttl <cache-ttl> Pkarr packet cache ttl in seconds.
--threads <threads> Number of threads to process dns queries. [default: 4]
-h, --help Print help
-V, --version Print version
For extended logs, see here.
Use the pkdns-cli
to inspect and announce your pkarr records on the Mainline DHT. Download the latest release for your plattform.
The cli currently only supports
A
,AAAA
,TXT
,CNAME
,NS
, andMX
records.
Inspect records by public key List all records published by a public key.
./pkdns-cli resolve 7fmjpcuuzf54hw18bsgi3zihzyh4awseeuq5tmojefaezjbd64cy
Generate seed Generate a zbase32 seed to publish your own records.
./pkdns-cli generate > seed.txt
Publish your own records Create a dns zone file and publish its content. See example for more details.
./pkdns-cli publish seed.txt pkarr.zone
⚠️ The mainline DHT will take some minutes to propagate your changes.
pkdns does only partially support recursive lookups. Recursion only works
CNAME
pointing directly to another record in the same pkarr packet.NS
delegating the whole pkarr zone to a name server.For anything more fancy than simple A
and TXT
records, it is recommended to use a bind9 name server and point your zone to there @ NS {BIND9IP}
.
bind9 is a fully fledged name server and should be able to handle recursion and all record types.
Currently, pkdns only supports A
, AAAA
, TXT
, CNAME
, and MX
records. For any other types, use bind9.
{publicKey}.example.com
?May the power ⚡ be with you. Powered by pkarr.