Forum: Ruby authoritative only DNS in ruby

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7885cf9b6111344a62a77b00b1561364?d=identicon&s=25 Xan (Guest)
on 2006-04-12 13:01
Hi,

I want to know if you can help me in writing a ruby authoritative only
DNS server. I have my local network and I want a authoritative DNS
server for resolve the local names. So I don't need recursive DNS
servers.

I searched in net but I don't see anything so simple to put in as my
server and that I understand for modify it.

Really, I know something like
  - a server, say adns
  - adns has its own file like /etc/hosts in /etc/adns/hosts in where we
put local name server and ip, what is used for authoritative responses

    [something like:

      euler 172.58.24.1
      marie 189.45.52.24
      ...
     ]


  - if we add localhost to /etc/resolv.conf adns serves as DNS resolver
for local address.


Is it possible?
Can you help me?

Thanks,
Xan.
7885cf9b6111344a62a77b00b1561364?d=identicon&s=25 Xan (Guest)
on 2006-04-12 17:48
An alternative is if you point me some library that serve for receiving
UDP packets of client DNS and can process these

Thanks,
Xan.

Xan wrote:
> Hi,
>
> I want to know if you can help me in writing a ruby authoritative only
> DNS server. I have my local network and I want a authoritative DNS
> server for resolve the local names. So I don't need recursive DNS
> servers.
>
> I searched in net but I don't see anything so simple to put in as my
> server and that I understand for modify it.
>
> Really, I know something like
>   - a server, say adns
>   - adns has its own file like /etc/hosts in /etc/adns/hosts in where we
> put local name server and ip, what is used for authoritative responses
>
>     [something like:
>
>       euler 172.58.24.1
>       marie 189.45.52.24
>       ...
>      ]
>
>
>   - if we add localhost to /etc/resolv.conf adns serves as DNS resolver
> for local address.
>
>
> Is it possible?
> Can you help me?
>
> Thanks,
> Xan.
0ca6e5c33d7e7ff901d75ff0b13d9e1c?d=identicon&s=25 Sam Roberts (Guest)
on 2006-04-12 20:53
(Received via mailing list)
On Thu, Apr 13, 2006 at 12:48:41AM +0900, Xan wrote:
> An alternative is if you point me some library that serve for receiving
> UDP packets of client DNS and can process these

Look at the source for resolv.rb in the ruby stdlib. It has DNS message
encoding/decoding classes.

Also, the dnssd project has a net-mdns project with a forked version of
resolv.rb with bug fixes, documentation, and extensions to resolv.rb you
might find useful:

  http://dnssd.rubyforge.org/net-mdns/

An mDNS/DNS-SD server receives and sends DNS format messages, so might
be a useful example for you if you are writing a mini pure-ruby DNS
server.  The message encoding and decoding should be pretty easy, and I
should be able to help if you have trouble.

Also, I'd be interested in seeing your code if you publish, it could be
very interesting to have a DNS server framework in ruby. There might be
some synergy between it and DNSSD. For example, I might be able to point
nameserver in my resolv.conf to 127.0.0.1, and have a ruby DNS daemon
runnning that did lookups in .local using mDNS and forwarded all other
lookups to the "real" DNS server. If you structure your DNS server in a
way that records can be added to it at runtime (so not just load them
from a static file, perhaps have it make callbacks for record lookups),
maybe I could use it, too. :-)

Good luck,
Sam
7885cf9b6111344a62a77b00b1561364?d=identicon&s=25 Xan (Guest)
on 2006-04-16 19:47
Sam Roberts wrote:
> On Thu, Apr 13, 2006 at 12:48:41AM +0900, Xan wrote:
>> An alternative is if you point me some library that serve for receiving
>> UDP packets of client DNS and can process these
>
> Look at the source for resolv.rb in the ruby stdlib. It has DNS message
> encoding/decoding classes.
>
> Also, the dnssd project has a net-mdns project with a forked version of
> resolv.rb with bug fixes, documentation, and extensions to resolv.rb you
> might find useful:
>
>   http://dnssd.rubyforge.org/net-mdns/
>
> An mDNS/DNS-SD server receives and sends DNS format messages, so might
> be a useful example for you if you are writing a mini pure-ruby DNS
> server.  The message encoding and decoding should be pretty easy, and I
> should be able to help if you have trouble.
>

First of all, thank you very much for your answer and for point me these
two resources. It's a good start point. In the same time you answer me,
I see the rfc1035 specifications for showing what parts of DNS I need
for this project (it's obvious that I don't need all DNS: only local,
the foreign part (recursive search) is not needed)) and I came crazy:
too low-level specifications for implementing on scratch in reasonable
time.

It's good you point me these high-level classes.

> Also, I'd be interested in seeing your code if you publish, it could be
> very interesting to have a DNS server framework in ruby. There might be
> some synergy between it and DNSSD. For example, I might be able to point
> nameserver in my resolv.conf to 127.0.0.1, and have a ruby DNS daemon
> runnning that did lookups in .local using mDNS and forwarded all other
> lookups to the "real" DNS server. If you structure your DNS server in a
> way that records can be added to it at runtime (so not just load them
> from a static file, perhaps have it make callbacks for record lookups),
> maybe I could use it, too. :-)

On one hand, obviously I publish the code ;-). I want that all can
benefit of it. If the try is, in future, successfully, probably I will
license in GPL.

On the other, your idea is essentially what I want to do:

  - My original idea was to write a class nameserver, say NS for short,
and putting it in /etc/resolv.conf as third DNS resolver. NS has a file
in which we share hosts we want to remember. For example:

# ip    |   alias
127.0.0.1   localhost.localdomain
72.14.207.99 google.com
214.52.69.56 myfriendoscar
127.0.0.6  epsilon.localdomain

and that any user could write to this file with another ruby class that
passes to NS the host-ip for saving in this file. No recursive search of
unknown host are allowd

The idea was begin to code first only a DNS without user intervention.
This is why I put the idea of authoritavie only DNS in ruby in the
ruby-talk

- If I understood well, you idea is a bit different: write a local DNS
and put it in resolv.conf. This local DNS has some database of known
hosts. Any user without shell could add host to this database. In the
moment of resolv a name, this local DNS see this database. If the host
appears in that, then DNS returns the ip. If not, DNS request external
DNS's answer.

With the interaction of the users and DNS we could have for example
great things: for example answer to one user that epsilon.localdomain is
127.0.0.6 and another that we don't know that (that is, user
privileges). I think it's a good thing




Frankly, I see that in a more long term time, because I'm a newbee of
ruby (I know something of java) (I'm not a programmer) and because all
code of DNS that I looked is very long (so I suspect it's not easy thing
to do and more with enhancements)


If you can help me I thank you very much. I need, overall, that you
point me in the main lines of the project, overall, how can I write a
simply DNS that get the ip of one specific hosts and returns that it
does not know any other host ip.

Another time, thank you very much,
Xan.

PS: Maybe it were better pass to private communication
PPS: Sorry my poor english

>
> Good luck,
> Sam
076d793369cf7c992cc3984e95cee196?d=identicon&s=25 Stoyan Zhekov (Guest)
on 2006-04-17 03:34
(Received via mailing list)
On 4/12/06, Xan <DXpublica@telefonica.net> wrote:
> Hi,
>
> I want to know if you can help me in writing a ruby authoritative only
> DNS server. I have my local network and I want a authoritative DNS
> server for resolve the local names. So I don't need recursive DNS
> servers.

TinyDNS [ http://cr.yp.to/djbdns.html ] is not difficult to install.
This topic is locked and can not be replied to.