Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.
|Comment:||Initial README for the project|
|Downloads:||Tarball | ZIP archive | SQL archive|
|Timelines:||family | ancestors | descendants | both | master | trunk|
|Files:||files | file ages | folders|
|User & Date:||email@example.com 2017-05-12 16:19:23|
|16:19||Initial bringup completed check-in: b715809753 user: firstname.lastname@example.org tags: master, trunk|
|16:19||Initial README for the project check-in: 8e43c0e365 user: email@example.com tags: master, trunk|
|17:07||Initial commit, DNS server framework check-in: e2a053c2e7 user: firstname.lastname@example.org tags: master, trunk|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
This is a Dynamic DNS setup, appropriate for a small/personal solution. It uses the Python library "dnslib", a copy of which is in a directory of that name. The server is a Python script which listens to two UDP ports: one for dynamic DNS updates, one as a DNS server. The client is also a Python script; it periodically sends a UDP packet (which is cryptographically signed) to the server. The server uses the packet's source as the current IP address, and if it has changed (with the update from a source which has correctly signed this update), notes the new IP address. The other server port is a simple DNS server. It is intended to be used as a sub-zone of your main domain, and answers A requests with the current IP address of any registered host. In your main zone you want to define both the serving host (it requires its own IP address; NS records do not specify a port, alas): $ORIGIN example.com. ns3 IN A a.b.c.d and then you need to delegate your dynamic DNS sub-domain: dyn IN NS ns3.example.com. Now the host at a.b.c.d receives DNS questions about hosts under dyn.example.com ("joe.dyn.example.com", "home.dyn.example.com", etc.). Hosts are managed by a simple file mapping host name to pre-shared key. Nonces are used, but are not saved on disk; the security here is intended to be enough to deflect casual vandalism, not to hold off a nation-state. Similarly, host state is not saved to disk; if the host is not sending an update, presumably it's offline, so why bother giving its old IP address? The hosts supported are tabulated in etc/hosts, with a format: <host> <pass> Continuing example.com above, the line: joe xyz would let the client update joe.dyn.example.com if it knows the pre-shared key "xyz".