![]() |
GnuDIP Release 2.3.4 - TODO File |
The current author does not plan to do any substantial new development for GnuDIP.
Perhaps someone could create a MacPerl client package similiar to the Windows ActivePerl client package.
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.
This will eventually be necessary.
Only a minor change to the GnuDIP scripts should be needed to allow any relational database system supported by DBI to be used, and this would include PostgreSQL. However it would still take time to set up a test environment and debug this enhancement, and to write documentation on installing GnuDIP with PostgreSQL.
Hopefully the Perl byte code generation and reload facilities will soon be easily usable. When that occurs, the necessary steps for GnuDIP should be documented.
Precompilation should improve the start up time for the (X)INETD server script and the web tool when it is not running under mod_perl.
A set of patches could be developed which alter the base file set for other languages. Those text strings in HTML, E-mail and messages from the client as well as documentation, intended to be seen by end users. would be translated.
People who wish to provide a GnuDIP service for speakers of a particular language could then apply the patch for the desired language.
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:
Here "@ IN A ddd.ddd.ddd.ddd
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.
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.
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.
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:
There are a number of Virtual Domain/DNS providers who provide a free GnuDIP-style service as a "loss leader", to get you in the door. They then charge for custom DNS hosting.
There is also some promotional advantage to them to have other people using a subdomain of their domain.
So this feature would be an installation option, and many sites may not implement it.
Having a "bogus" root domain in the BIND configuration is unusual, and may be unacceptable at many sites.
This is discussed in owndomain.html.
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.
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.
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?