GnuDIP Logo

GnuDIP Release 2.3.4 - TODO File


The current author does not plan to do any substantial new development for GnuDIP.


Better Documentation

In particular the "Help" available from the Web Tool could be better.

A MacPerl Client Package

There is a port of Perl for MacOS called MacPerl.

Perhaps someone could create a MacPerl client package similiar to the Windows ActivePerl client package.

User Validation for Self Registration

At the moment the web tool provides two options for user registration - unrestricted self registration or manual action by the site administrator.

An intermediate option might be desirable for many GnuDIP sites. GnuDIP could be modified to use a site-written login page before permitting self registration.

A site may for example want to allow self registration for people with a UNIX shell account. There are a number of different UNIX login ID password validation mechanisms in common use. Some require root access. Implementing this securely can be complex.

GnuDIP would just provide the escape mechanism, along with a trivial sample, and leave it to the site operator to implement a real user validation page. This would be done in a way that would allow the site operator to write an independent CGI using whatever development tool they wished (they could for example use PHP).

It would also be desirable for the site to record the "user ID" of the creator of a GnuDIP account, so that the GnuDIP account could be removed when the user ID is removed. It would not be necessary for GnuDIP to save this information in its database, but GnuDIP would have to call a site-written command to indicate that an account had been created for the user. GnuDIP would also need to provide a utility to read GnuDIP account names from a file and remove them.

General Enhancements

Sample Scripts for the Use of BIND on the Client Machine

As discussed in owndomain.html, users may use their own domain name with a dynamic IP address if they are willing to run BIND on the client machine.

Some documentation and a sample script could be written explaining how to obtain, install and configure BIND on the user's platform using the "-x" client option.

The script would overwrite a file with a DNS "A" record, for each address passed to it, in this format:

@  IN A ddd.ddd.ddd.ddd
Here "ddd.ddd.ddd.ddd" would be the address validated by the client. This could then be included in a BIND zone file using the "$INCLUDE" directive. The script would also reload the user's zone.

Alternatively, the script could use the nsupdate command to update a dynamic zone, just as GnuDIP itself does.

Sample Scripts for Querying NAT Devices for their External IP Address

The current support for operation of the client behind closed NAT devices should handle all but very exceptional cases.

However if the NAT device itself is behind an IP masking/anonymizing proxy, the GnuDIP server will not be able to see the external IP address of the NAT device, and so will not be able to return it to the client.

In this situation it would be necessary for the client to directly query the NAT device for its external IP address.

Ideally, all closed NAT devices would implement MIB-II / SNMP. Most Linux distributions do not install this capability by default. One must install net-snmp in order to support this. This fact causes the author to wonder whether very many vendors of NAT devices have implemented this.

A sample script is currently provided in the client package to query for the external address of a host using MIB-II/SNMP ("snmpqry.pl"). It uses a pure Perl SNMP implementation to retrieve the routing table entry interface number for address 0.0.0.0, and then scans the IP address table entries for a matching interface number. The client script can invoke this sample script using the "-q" option.

An SMTP Monitor Daemon

This would be a process to run continually, connecting to the SMTP port for particular GnuDIP users, to ensure that mail sent to their host name will be correctly received. When an SMTP agent does not respond correctly to a TCP connection, the monitor would automatically change the address for the associated GnuDIP user to a "dead" IP address, so that packets sent to it are dropped.

This would ensure that the originating SMTP agent sends E-mail to the "backup" SMTP agent instead and that the backup SMTP agent does not bounce this E-mail.

Original addresses would be cached. For subsequent checks for that GnuDIP user, if the address has not been reset by an update from the associated GnuDIP client, the original address would be retested and restored if found to work again.

An Extension to GnuDIP to Handle Any Domain Name

Zones have to be predefined in the BIND named.conf file. If an approach is used that each domain name is a new BIND domain name, then it would be necessary to do restarts of BIND. This is very undesirable.

An approach that may work is to have a dynamic "root" domain for the DNS servers that handle queries to these full domain names.

This DNS server could only receive queries from "external" sources, because it would not contain the usual root zone contents (see the InterNIC root zone file ). So if for example a query for "microsoft.com" arrived, since there would be no name server entries for the "com" domain, the query would stop right there as "not found".

The contents of the InterNIC root zone file could not be included in this "bogus" root zone because if they were included, dynamic updates to domain names in top level domains such as "com" would be rerouted to the master name server for the "com" domain, where they would be refused.

The need for additional machines to run the extra DNS servers could be avoided by defining an IP address alias for the network interface of each current DNS server machine, or installing a second network interface in them, and using these additional IP addresses for the extra DNS servers.

The nsupdate command from BIND 9 would be needed, since nsupdate from BIND 8 will not allow the server for which the update is wanted to be specified. By default nsupdate sends the update to the master name server named in the SOA record for the subdomain, which will not be the GnuDIP master DNS server until the user's domain has been delegated to the GnuDIP master DNS server. However we want to be able to update the user's address in the GnuDIP DNS servers regardless of whether the delegation has been done.

To make sure no one else can "hijack" a domain they do not own on the GnuDIP server, the following scheme could be used. A user can claim an existing domain name if an SOA query for that domain does not return the name of the GnuDIP master DNS server. It is true that a user could have a struggle with someone else until they get the domain name "nailed down". The E-mail address could be used to nofify people when their domain name is claimed.

The SOA query would be done using the BIND dig command.

It should be noted here that:

An Extension to GnuDIP to Allow Subdomain Delegation

Basically what we mean here is that the user could request a DNS "NS" (Name Server) RR record for their GnuDIP account. They could then set up a DNS server on their own computer to respond to queries for this subdomain.

This would allow the user to have total control of their own domain name. It may also be of interest to those who want to "play" with a DNS server of their own.

The following approach may work.

For a user to specify this, there would have to be no address registered for the user, nor could the "wildcard" or "mail exchanger" options be used. A DNS look up would ignore them if they were present, because the NS record would cause the query to be forwarded.

The user would be allowed to specify one name server. This name server would have to be outside the domain being delegated. Another (non-delegated) domain name on the same GnuDIP server could be used as the name server name.

If a name server within the delegated subdomain was allowed, it would be necessary to maintain a "glue" record (see RFC 1033) for that name server within the parent domain. Doing this using dynamic DNS updates would be awkward. And updating this address in the parent domain would not update the address for the same name in the delegated domain. Normal queries for the address of this name server will be forwarded to the delegated subdomain because of the NS record. So the query could come back as "not found" even though an update was successful on the GnuDIP server. This would be certain to confuse anyone but a DNS expert!

The nsupdate command from BIND 9 would be needed, since nsupdate from BIND 8 will not allow the zone in which the update is wanted to be specified. This is an issue when deleting the NS record, since it will normally be in both the delegating domain and the subdomain. By default nsupdate sends the update to the master name server named in the SOA record for the subdomain. So if the delegated subdomain was properly configured the delete request would be sent the user's DNS server, not GnuDIP. If no SOA record for the delegated subdomain was found, the delete would be refused by nsupdate.

Note that this scheme reproduces the scenario discussed in owndomain.html. So it would give the user the chance to understand the technique before paying for a domain name, and struggling with their registrar's web interface.

With domain names selling at prices little more than the price of a deluxe pizza, it is not clear whether this feature would be widely used. It is true that at present it will take a few hours for name server changes done through registrars to take effect, but this is something that would only rarely be done.

C Packaged by GNU Autoconf for the (X)INETD Server

The Perl version of this server has to be compiled each time the server is run.

One could write a C version of this server. Also, most open source C system software now uses GNU autoconf to facilitate portability.

This may be less of a concern once the Perl byte-code compiler and interpreter modules reach maturity. It may in fact not be a major issue in any case.

Windows GUI Client

Windows users like and are used to GUI interfaces.

To avoid completely rewriting the Windows client, one could use the Tk and Win32::API Perl modules to write a Windows GUI client. This could be packaged for installation using Microsoft Software Installer (MSI) and/or Inno Setup. The necessary pieces from ActivePerl could be included to make it stand-alone.

However, it is not clear that there is much to be gained by writing a Windows GUI, however one implemented it.

The Web Tool provides a reasonably easy to use GUI interface for manual update. This is particulary true if the user sets up a Desktop Shortcut for their "Quick Login" URL. If the user wants to be able to manually update several servers at once, they can install the Perl client and set up a Desktop Shortcut to "gdipc.bat". Also, experience at current GnuDIP sites shows that most GnuDIP users use the browser to update, even though there is a Visual Basic GUI client available.

Other than that a GUI client would just provide an alternative to using a DOS box and/or notepad for configuration. It could also provide an alternative to the Windows Task Scheduler GUI interface for scheduling the GnuDIP client. But these are tasks that would only rarely need to be repeated. Is it worth providing a GUI for this?