Dear GNUnet community,
I am happy to announce the completion of milestones 4 (GNS Zonemaster)
for the "Go implementation of GNS" which is a NLnet-funded project
"GNS (2019-02-022)".
The source code is written for Go1.18+; it can be found in the GNUnet
Repository at "https://git.gnunet.org/gnunet-go.git/" with tag "v0.1.36"
in the master branch.
The Zonemaster-Go implementation does not only implement the classic
GNUnet zonemaster, but also covers namestore and identity functionality
(not exposed over UDS in this version). It provides a browser GUI for
managing zones, labels and resource records.
To run zonemaster-go on your machine after compiling the code, you need
a configuration file like this (store it as zonemaster.json in your
working directory):
{
"zonemaster": {
"period": 300,
"storage": {
"mode": "sqlite3",
"file": "/var/lib/gnunet/gns/zonemaster.db"
},
"gui": "127.0.0.1:8100"
},
"dht": {
"service": {
"socket": "/tmp/gnunet-system-runtime/gnunet-service-dht.sock"
}
},
"gns": {
"replLevel": 10
},
"namecache": {
"service": {
"socket":
"/tmp/gnunet-system-runtime/gnunet-service-namecache.sock"
}
},
"rpc": {
"endpoint": "127.0.0.1:8066"
},
"logging": {
"level": 5
}
}
Most parameters are self-explaining (hopefully):
* "zonemaster.period" is the time in seconds between publishing resource
records for all local GNS zones.
* "zonemaster.storage.file" is the name of the SQLite3 database (name
and identity store). Make sure the user running zonemaster has write
access to the file.
* "zonemaster.gui" is the listening address for the GUI (limiting access
to the local machine). Point your browser to "http://127.0.0.1:8100/"
to see the dashboard for the local zones and start editing...
* "dht" and "namecache" specify which UDS to use to communicate with the
classic DHT and Namecache services. The zonemaster is publishing GNS
blocks of your local zones using these services.
* "rpc" is currently disabled (not implemented); it will provide a
JSON-RPC for other programs (e.g. command-line tools mimiking
"gnunet-namestore" or "gnunet-identity") to create or change local
zones, labels and records or for higher-level applications to e.g.
generate boxed TLSA or SRV resource records for themselves.
To start the zonemaster:
$ $GOPATH/bin/zonemaster-go -c zonemaster.json
Make sure the user running zonemaster is member of the "gnunet" group.
Only a limited number of resource record types are currently implemented:
* record types defined in "https://lsd.gnunet.org/lsd0001/"
* GNS_TYPE_PKEY // PKEY zone delegation
* GNS_TYPE_EDKEY // EDKEY zone delegation
* GNS_TYPE_REDIRECT // GNS delegation by name
* GNS_TYPE_GNS2DNS // DNS delegation by name
* GNS_TYPE_NICK // Nick name
* GNS_TYPE_LEHO // Legacy hostname
* GNS_TYPE_BOX // Boxed resource record
* a few basic DNS resource records
* GNS_TYPE_DNS_A // IPv4 address
* GNS_TYPE_DNS_AAAA // IPv6 address
* GNS_TYPE_DNS_CNAME // CNAME in DNS
* GNS_TYPE_DNS_TXT // DNS TXT
* GNS_TYPE_DNS_MX // Mailbox
I would be happy to hear from you which additional records are most
needed; I will add implementations for them in a future version.
Cheers, Bernd.