Write some actual doc
[pdns-pipe-nmc.git] / README.md
1 % Namecoin pipe backend for PowerDNS
2
3 There exists a project named
4 [nmcontrol](https://github.com/namecoin/nmcontrol) to create an
5 all-in-one tool that can, among other things, act as a DNS server
6 for the `.bit` zone. There is also a tool,
7 [NamecoinToBind](https://github.com/namecoin/NamecoinToBind),
8 for offline conversion of namecoin data into BIND zone file.
9
10 Unlike those, this project is a single-purpose tool acting as a (real
11 time) bridge between [Namecoin](http://namecoin.info/) and DNS.
12 [PowerDNS](https://www.powerdns.com/) provides a stable DNS frontend,
13 with an easy to implement backend interface. The latter is used in
14 this project.
15
16 ## Building
17
18 The program is built as a single executable to be run by PowerDns's
19 pipe backend. It is written in [Haskell](http://www.haskell.org/).
20 There is no `cabal` configuration at the moment, so to build it,
21 simply run
22
23 ```
24 ghc --make pdns-pipe-nmc
25 ```
26
27 and install any missing packages it complains about.
28
29 ## Installing
30
31 In the powerdns configuration, you want to specify `master=yes`.
32 Enable `pipe` backend by setting `launch=pipe`.
33 Wherever your pdns package keeps the backend configurations, set
34 this for the pipe backend:
35
36 ```
37 pipe-command=/path/to/pdns-pipe-nmc
38 pipe-timeout=10000
39 pipe-regex=.bit;.*$
40 pipebackend-abi-version=1 ## all versions supported, but extra data ignored
41 ```
42
43 Copy `pdns-pipe-nmc` to the place that you've set up as `pipe-command`.
44 Copy your namecoin cofig file to `/etc/namecoin.conf` and make sure it
45 is readable by the userid specified in the powerdns config. Entries
46 recognized in the `/etc/namecoin.conf` file (with default values) are:
47
48 ```
49 rpcuser=
50 rpcpassword=
51 rpchost=localhost
52 rpcport=8336
53 ```
54
55 They are the parameters needed to contact the `namecoind` server over
56 its JsonRPC interface. With default installation on `localhost`, you
57 will only need to specify `password`.
58
59 ## Security Considerations
60
61 Namecoin per se has excellent non-repudiation characteristics. But
62 once you've converted the data into (non-DNSSEC-protected) DNS
63 format, all bets are off. If you intend to query your powerdns
64 instance over public Internet, remember that nothing prevents evil
65 hackers or ruthless governments from tampering with your queries
66 and powerdns responses. There are two possible approaches to
67 mitigation of this problem:
68
69 * Run `namecoind` and the bridge as close to the consumer as
70 possible: on the same host, or at least on the same network, and
71 keep it guarded.
72 * I did not try it, but it should be possible to use PowerDNS
73 [Front-signing](http://doc.powerdns.com/html/dnssec-modes.html#dnssec-frontserver),
74 so the communication will happen over DNSSEC protocol without the
75 need to keep the signatures in the zone data itself. You probably
76 would need to create signing key for the PowerDNS instance, and add
77 the corresponding public key as "trused" into the configuration of
78 your resolvers.
79
80 ## Status
81
82 Alpha. It does not handle `SRV` records at all, does not support
83 `delegate` (not to mention `import`), provides bogus version in the
84 `SOA` record, and is largely untested. Try at your risk.
85
86 ## Getting the Source
87
88 Check the [project homepage](http://www.average.org/pdns-pipe-nmc/).
89
90 Git [clone](git://git.average.org/git/pdns-pipe-nmc.git) or
91 [browse](http://www.average.org/gitweb/?p=pdns-pipe-nmc.git;a=summary),
92 or use [github mirrir](https://github.com/crosser/pdns-pipe-nmc).
93
94 ## Author
95
96 Eugene Crosser \<crosser at average dot org\>    
97 <http://www.average.org/~crosser/>