Internet DRAFT - draft-worley-roid
draft-worley-roid
Appsawg D. Worley
Internet-Draft Ariadne
Intended status: Informational December 3, 2013
Expires: June 6, 2014
ROID: An Experimental Protocol for Name-Based Information Retrieval
draft-worley-roid-00
Abstract
Information-centric networking (ICN) is an approach to evolve the
Internet infrastructure to access data by unique names. ROID
("Resolver for OIDs") is an experimental protocol to support simple
implementation of ICN. ROID defines a simple model for mapping data
names -- in the form of URNs of the "oid" scheme -- into URLs which
can be used to access the data objects. This experimental version of
ROID provides the resolution information via DNS records that can be
served by a standard DNS server (named a/k/a Bind). This structure
is designed for easy deployment of ROID in existing environments in
order to support proof-of-concept implementations of ICN.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on June 6, 2014.
Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
Worley Expires June 6, 2014 [Page 1]
Internet-Draft ROID December 2013
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Object Identifiers . . . . . . . . . . . . . . . . . . . . . 3
3. ROID Resolution Information Model . . . . . . . . . . . . . . 3
4. Representation in DNS Records . . . . . . . . . . . . . . . . 5
5. URN Resolution Process . . . . . . . . . . . . . . . . . . . 7
6. OID Allocations . . . . . . . . . . . . . . . . . . . . . . . 8
7. Informative References . . . . . . . . . . . . . . . . . . . 9
Appendix A. Sample Resolver and Testing Framework . . . . . . . 9
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 19
1. Introduction
The core concept of "information-centric networking" is that
information objects can be retrieved by providing a name for the
object rather than providing a location from which the object is to
be retrieved. As described by the IRTF:
Information-centric networking (ICN) is an approach to evolve the
Internet infrastructure to directly support this use by
introducing uniquely named data as a core Internet principle.
Data becomes independent from location, application, storage, and
means of transportation, enabling in-network caching and
replication. The expected benefits are improved efficiency,
better scalability with respect to information/bandwidth demand
and better robustness in challenging communication scenarios.
These concepts are known under different terms, including but not
limited to: Network of Information (NetInf), Named Data Networking
(NDN) and Publish/Subscribe Networking.[IRTF-ICNRG]
ROID ("Resolver for OIDs") is an experimental protocol to support
simple implementation of ICN. ROID defines a simple model for
mapping data names -- in the form of URNs of the "oid" scheme -- into
URLs which can be used to access the data objects.
Worley Expires June 6, 2014 [Page 2]
Internet-Draft ROID December 2013
This experimental version of ROID provides the resolution information
via DNS records that can be served by a standard DNS server. That
is, it maps the ROID resolution information model into DNS resource
records, exploiting particular behaviors of DNS servers. This
structure is designed to make deployment of ROID simple in existing
environments in order to support proof-of-concept implementations of
ICN.
2. Object Identifiers
Object identifiers (OIDs) are a uniform, extensible set of names with
a particularly simple structure. Each object identifier is a finite
sequence of non-negative integers. A typical example is written
"2.999.28.143". OIDs are hierarchically organized, so 2.999.28.143
is considered a child of 2.999.28, which is in turn considered a
child of 2.999.
Like DNS names, the OID hierarchy is a hierarchy of delegated
authority. An OID can be assigned to a individual or organization,
which is then authoritative for allocating meanings to OIDs that are
descendant from that OID. Recursively, the OID owner can delegate
ownership of a descendant OID to another individual or organization.
For example, the OID 1.3.6.1.4 has been delegated to IANA. The OIDs
that are children of 1.3.6.1.4.1 are delegated to organizations under
the "Private Enterprise Number" registry of IANA. The OID
1.3.6.1.4.1.14490 is delegated to Ariadne Internet Services, Inc.
Ariadne has reserved the children of 1.3.6.1.4.1.14490.27 for
delegation to entities that want to experiment with using ROID.
1.3.6.1.4.1.14490.27.78 could be assigned to such an entity, which
would then assign meanings to its descendant OIDs.
(The OID 2.999 is delegated for use in examples, in the same way that
example.com is reserved for use in examples.)
OIDs can be represented as URNs using the "oid" schema.[RFC3061] For
example, the OID 1.3.6.1.4.1.14490.5.1.6910 (which has been defined
by Ariadne to name RFC 6910) has the corresponding URN
<urn:oid:1.3.6.1.4.1.14490.5.1.6910>.
3. ROID Resolution Information Model
The ROID information model is based on a subset of the OID universe,
with certain OIDs naming objects. These OIDs are called "name OIDs".
The other OIDs that are within the ROID model are called "group
OIDs". All ancestor OIDs of name OIDs or group OIDs are group OIDs,
and thus are not name OIDs and do not name objects. But a group OID
Worley Expires June 6, 2014 [Page 3]
Internet-Draft ROID December 2013
is not required to have name OID descendants. Thus, all name OIDs
are leaf nodes within the tree of OIDs within the ROID model, but
some group OIDs may also be leaf nodes. (Presumably they will be
provided with descendant name OIDs at some later time.)
Authority delegation points in the set of ROID OIDs are the same OIDs
within the ROID OID universe that are authority delegation points in
the universe of object identifiers. If authority for an object
identifier and its descendants is delegated to an entity, and that
entity further delegates authority for the same OID to another
entity, the ROID model can only represent the ultimate delegate for a
single OID. (Of course, this does not restrict the model's
representation of further delegation of a descendant OID.)
The ROID information model is organized into records. Each record
contains the following data elements:
OID This is the ROID OID about which the record provides
information. The record is said to be attached to this OID.
type This the the record type, which is taken from a fixed
enumeration, which is described below. The type determines which
OIDs may have this type of record attached, and what strings are
valid data fields for this type of record.
data The data field is a string of Unicode characters. Its meaning
and which strings are valid values depends on the record type.
The following record types describe delegation authority. They can
be attached to group OIDs or name OIDs. If they are attached to a
group OID, they apply to the group OID and all descendant OIDs,
excluding any descendant OIDs that have their own OWN record, and the
descendant OIDs thereof.
<OID> OWN "<string>"
("owner") This record provides the human-readable name and contact
information (as a Unicode string) of the entity that is the owner
of the OID. An example is, '1.3.6.1.4.1.14490 OWN "Ariadne
Internet Services, Inc., Waltham, MA, USA"'.
<OID> OUR "<URL-string>"
("owner URL") This record provides a URL which provides a way to
contact the owner. There can be more than one of these records
for an OID. The OID must have an OWN record An example is,
'1.3.6.1.4.1.14490 OUR "mailto:oid@ariadne.com"'.
The following record types provide information about the object named
by a name OID.
Worley Expires June 6, 2014 [Page 4]
Internet-Draft ROID December 2013
<OID> URL "<URL-string>"
("URL") This record provides a URL which provides a way to access
the object named by the OID. There can be more than one of these
records for an OID.
<OID> DES "<string>"
("description") This record is a text string that provides a
human-readable description of the object named by the OID. There
can be more than one of these records for an OID.
<OID> DUR "<URL-string>"
("description URL") This record provides a URL which can be used
to retrieve a human-readable description of the object named by
the OID. There can be more than one of these records for an OID.
The following record types provide relocation information.
<OID> MVP "<target-OID>"
<OID> MVT "<target-OID>"
("moved permanently" and "moved temporarily") These record types
provide relocation information. Both records indicate that <OID> and
any descendant OIDs should be resolved by replacing the initial
portion that is <OID> with <target-OID>. An example is: If there is
a record '1.3.6.1.4.14490.8 MVP 2.999.2342', then information
regarding OID 1.3.6.1.4.1.14490.8.5.1.6910 should be sought at
2.999.2342.5.1.6910.
The MVP record type means "moved permanently". This means that
<target-OID> is expected to be valid longer into the future than
<OID> and so any reference to an object that is to be stored should
be translated to use the <target-OID> prefix.
The second record type means "moved temporarily". This has the
opposite implication, that <OID> is expected to be valid further into
the future than <target-OID>, and so no such translation should be
done.
4. Representation in DNS Records
In the experimental version of ROID, ROID information is stored in
the DNS hierarchy. ROID records are represented by DNS resource
records as described below. All representing DNS records have class
"IN" (Internet).
ROID authority delegation points are not represented explicitly in
DNS. DNS zone delegations are allowed at any point in the DNS
Worley Expires June 6, 2014 [Page 5]
Internet-Draft ROID December 2013
hierarchy, although it is expected that DNS zone delegation points
will be the same as ROID authority delegation points. This
correspondence allows an entity that has authority over a particular
subset of the ROID space to provide the corresponding DNS service
using DNS servers that it controls.
ROID stores information about OIDs in DNS resource records. Each OID
is translated into a domain name by reversing the list of integers,
and then appending the labels ".OID.ARPA". Resource records for this
domain name represent the ROID data. An example is that the ROID
records for the OID 2.999.2342.5.1.6910 are represented by DNS
records for the domain name 6910.1.5.2342.999.2.OID.ARPA.
DNS/ROID delegation points are represented by NS records which map an
OID delegation point to the DNS servers that are authoritative for
that OID and its descendant OIDs:
14490.1.4.1.6.3.1.OID.ARPA. NS NS1.ARIADNE.COM.
14490.1.4.1.6.3.1.OID.ARPA. NS NS2.ARIADNE.COM.
ROID records for an OID that is a delegation point are always mapped
to DNS records served by the delegated servers rather than the
delegating servers, as is usual in DNS. (The DNS zone file will also
need to contain A records for the servers, per the usual rules for
DNS.)
MVP and MVT ROID records are represented by artificial NS records
which give the target OID's domain name, prefixed by the label "MVP"
or "MVT", respectively. These NS records do not have corresponding A
records.
1.3.6.1.4.14490.8 MVP 2.999.2342
is represented by
8.14490.4.1.6.3.1.OID.ARPA. NS MVP.2342.9.0.OID.ARPA
This peculiar way of using NS records is to exploit the behaviors of
DNS servers to speed up ROID resolution operations.
A ROID record of any other type type is represented by a TXT record
containing two text fields. The first text field is the ROID
information type (represented as three upper-case letters), and the
second text field is the ROID information data. Note that text
fields in DNS TXT records are actually binary strings of up to 255
octets.[RFC1035] URLs are stored in ASCII (or equivalently UTF-8)
encoding. <string>s are stored in UTF-8 encoding.
Worley Expires June 6, 2014 [Page 6]
Internet-Draft ROID December 2013
1.3.6.1.4.1.14490 OUR "mailto:oid@ariadne.com"
is represented by
14490.1.4.1.6.3.1.OID.ARPA. TXT "OUR" "mailto:oid@ariadne.com"
5. URN Resolution Process
ROID resolution proceeds much like ordinary DNS resolution. In the
simplest case, to resolve an OID URN into access URLs, a DNS query is
made for TXT records for the corresponding domain name, ignoring all
TXT records whose first data fields is not "URL".
For example, to resolve urn:oid:1.3.6.1.4.1.14490.5.1.6910, a query
is made for TXT records for the domain name
6910.1.5.14490.1.4.1.6.3.1.OID.ARPA. That query returns these
records:
6910.1.5.14490.1.4.1.6.3.1.OID.ARPA. TXT "URL" "http://
tools.ietf.org/html/rfc6910" 6910.1.5.14490.1.4.1.6.3.1.OID.ARPA.
TXT "DES" "RFC 6910"
From the first TXT record the access URL http://tools.ietf.org/html/
rfc6910 is extracted.
The DNS server that is queried may not have data for the requested
domain name, but rather only have delegation that points to another
server providing data for a subordinate DNS zone. (ROID resolution
queries to DNS servers must be non-recursive, as described below, so
the resolver cannot depend on the server making a query to the
delegate server.) In that case, the server will return the NS
records for the delegation and A records for the delegate servers.
The resolver must then recursively query the delegate servers for the
desired records.
If the OID is a descendant of a group OID for which there is a
relocation record, the query of the server will return the artificial
NS record that represents the relocation record. For example, if we
are resolving 1.3.6.1.4.1.14490.21.2.6910, and there is a relocation
1.3.6.1.4.1.14490.21.2 MVT 1.3.1.6.1.4.1.14490.5.1
then queries to DNS servers for 6910.2.21.14490.1.4.1.6.3.1.OID.ARPA
will eventually return
2.21.14490.1.4.1.6.3.1.OID.ARPA. NS
MVT.1.5.14490.1.4.1.6.3.1.OID.ARPA.
Worley Expires June 6, 2014 [Page 7]
Internet-Draft ROID December 2013
Based on this relocation, the resolver updates the domain name it is
searching for to 6910.1.5.14490.1.4.1.6.3.1.OID.ARPA. In principle,
the resolver needs to begin querying for this new domain name at a
root server, although caching previous query results will usually
allow the resolver to begin querying for a new domain name at a
delegate server.
Because the NS records that represent relocation records do not name
actual DNS servers, the server that is queried must be prevented from
attempting to recursively follow the NS record. For this reason, all
queries from the resolver to a DNS server must be specified as non-
recursive.
The values of DES and DUR records can be located in the same way as
the values of URL records.
The values of OWN and OUR records that apply to an OID require more
work to obtain because those records may be attached to an OID that
is ancestral to the OID in question. The resolver must successively
query for TXT records for the domain names of the OID, the OID's
parent, it's parent's parent, etc. until an OWN record is found.
(This process will likely be greatly accelerated by caching query
results.) Once an OWN record is located, any OUR records will be
attached to the same OID as the OWN record is (by the structure of
the ROID information model).
6. OID Allocations
An entity can obtain an OID allocation in many ways, including:
National standards organization National standards organizations can
delegate OIDs. For example, the American National Standards
Institute is the United States' member body in ISO, and provides
an OID registration service.[ANSI-OID] ISO member body OIDs are
children of OID 1.2. ANSI's OID is 1.2.840, and the OIDs it
delegates are children of 1.2.840.1.
IANA private enterprise numbers IANA assigns "private enterprise
numbers" to any entity that requests one.[PEN-request] The OIDs
IANA delegates are children of 1.3.6.1.4.1.[PEN-registry]
Assigned by Ariadne Ariadne has reserved an OID subtree for
assignments to entities experimenting with ROID. This subtree is
rooted at 1.3.6.1.4.1.14490.26. Entities can be assigned an OID
by contacting <mailto:oid@ariadne.com>.
Based on telephone numbers If an entity has been assigned an E.164
telephone number, Ariadne has delegated to the entity the OID
Worley Expires June 6, 2014 [Page 8]
Internet-Draft ROID December 2013
which is 1.3.6.1.4.1.14490.27.<E.164-number>. An example is, the
assignee of the E.164 number +1 617 555 1212 is delegated the OID
1.3.6.1.4.1.14490.27.16175551212.
7. Informative References
[RFC1035] Mockapetris, P., "Domain names - implementation and
specification", STD 13, RFC 1035, November 1987.
[RFC3061] Mealling, M., "A URN Namespace of Object Identifiers", RFC
3061, February 2001.
[IRTF-ICNRG]
Internet Research Task Force, "Information-Centric
Networking Research Group (ICNRG)", June 2013,
<http://irtf.org/icnrg>.
[ANSI-OID]
American National Standards Institute, "Organization Name
Registration", August 2013, <http://www.ansi.org/
other_services/registration_programs/
reg_org.aspx?menuid=10>.
[PEN-request]
Internet Assigned Numbers Authority, "Private Enterprise
Number (PEN) Request Template", August 2013,
<http://pen.iana.org/pen/PenApplication.page>.
[PEN-registry]
Internet Assigned Numbers Authority, "PRIVATE ENTERPRISE
NUMBERS", August 2013, <http://www.iana.org/assignments/
enterprise-numbers/enterprise-numbers>.
Appendix A. Sample Resolver and Testing Framework
This appendix contains sample code for a simple resolver and a
testing framework that exercises it. The ROID information records
that it contains are:
1.3.6.1.4.1.14490.5.1.6910 URL "http://tools.ietf.org/html/
rfc6910"
1.3.6.1.4.1.14490.21.1 MVP 1.3.6.1.4.1.14490.21.2
1.3.6.1.4.1.14490.21.2 MVT 1.3.6.1.4.1.14490.5.1
The test script resolves the URN
<urn:oid:1.3.6.1.4.1.14490.5.1.6910>.
Worley Expires June 6, 2014 [Page 9]
Internet-Draft ROID December 2013
The test system executes two copies of named (a/k/a Bind), one
listening on 127.0.0.200:12345 functioning as a root server, and one
listening on 127.0.0.201:12345 functioning as the server for the zone
14490.1.4.1.6.3.1.OID.ARPA. On my test system both loopback
addresses function out-of-the-box, but in order to allow named to use
them, they must be explicitly activated with the commands:
ip address add 127.0.0.200 dev lo
ip address add 127.0.0.201 dev lo
Figure 1: ROID-resolver: Sample resolver
#! /bin/perl
# Resolver for ROID, version 1.
# Usage:
# ROID-resolver urn:oid:xxx.xxx.xxx
# Options:
# -c|canonical print the canonical form of the URN
# -d|debug increment the debugging level
# -n|nameserver supply the address of a nameserver to use
# -p|port port of nameserver to query
#
# Outputs the object access URLs from the ROID URL records.
use strict;
# Process the options.
# True if the canonical form is to be printed.
my($canonical) = 0;
# The debugging level.
my($debug) = 0;
# The root DNS domain for resolution.
# Will never have a leading and trailing dot (after processing below).
my($root_domain) = 'oid.arpa';
# The nameservers the user specifies.
my(@nameservers);
# The port of the nameserver to query.
# (Unfortunately, you can't put ":port" on a nameserver specification.)
my($nameserver_port);
use Getopt::Long;
GetOptions(
'c|canonical' => \$canonical,
'd|debug+' => \$debug,
Worley Expires June 6, 2014 [Page 10]
Internet-Draft ROID December 2013
'n|nameserver=s' => \@nameservers,
'p|port=i' => \$nameserver_port,
);
# Ensure $root_domain does not have a leading dot.
$root_domain =~ s%^\.%%;
# Ensure $root_domain does not have a trailing dot.
$root_domain =~ s%\.$%%;
print STDERR " \$root_domain = '$root_domain'\n" if $debug >= 1;
# Set 127.0.0.1 as the only nameserver if the user did not provide any.
@nameservers = ('127.0.0.1') if $#nameservers < 0;
print STDERR " \@nameservers = (",
(@nameservers ? "'" . join("' ,'", @nameservers) . "'" : ""),
")\n"
if $debug >= 1;
print STDERR " \$nameserver_port = '$nameserver_port'\n" if $debug >= 1;
# Get the argument.
if ($#ARGV != 0) {
print STDERR <<EOF;
Usage:
$0 [options] urn:oid:xxx.xxx.xxx
Outputs the object access URLs from the ROID URL records.
d|debug increment debugging level
n|nameserver=string provide IP address of a nameserver to use
(default is 127.0.0.1)
p|port=number port number of nameservers to query (default is 53)
EOF
exit 1;
}
my($urn) = $ARGV[0];
print STDERR " \$urn = '$urn'\n" if $debug >= 1;
# Check that it's an oid URN.
# The scheme (urn) is case-insensitive per RFC 3986.
# The namespace ID (oid) is case-insensitive per RFC 2141.
my($oid);
unless (($oid) = $urn =~ m%^urn:oid:((\d|[1-9]\d+)(\.(\d|[1-9]\d+))*)$%i) {
print STDERR "Argument '$urn' is not an OID URN or is syntactically invalid.\n";
exit 1;
}
print STDERR " URN passes\n" if $debug >= 2;
print STDERR " \$oid = '$oid'\n" if $debug >= 1;
Worley Expires June 6, 2014 [Page 11]
Internet-Draft ROID December 2013
# Construct the domain name we want to look up.
my($domain_name) =
join('.', reverse(split(/\./, $oid))) . '.' . $root_domain . '.';
print STDERR " \$domain_name = '$domain_name'\n" if $debug >= 1;
# Set up the DNS resolver.
use Net::DNS::Resolver;
my($resolver) = Net::DNS::Resolver->new(
recurse => 0,
debug => ($debug >= 2),
port => $nameserver_port,
);
# Set up for the loop.
# $domain_name and $current_domain_name always end in '.'.
my($current_domain_name) = $domain_name;
my(@current_nameservers) = @nameservers;
# Initialize the canonical domain name.
# This records the domain name that represents 'best' version of the
# OID. It records all permanent redirections *before* any temporary
# redirections.
my($canonical_domain_name) = $domain_name;
my($temporary_redirection_seen) = 0;
LOOKUP: {
print STDERR " Looking up '$current_domain_name' at ",
join(' ', @current_nameservers), "\n"
if $debug >= 1;
# Set the nameservers.
$resolver->nameservers(@current_nameservers);
# Fetch the DNS records for the domain name.
my($answer) = $resolver->send($current_domain_name, 'ANY');
print STDERR " send() ", (defined($answer) ? "succeeded" : "failed"), "\n"
if $debug >= 2;
# Check the answer.
# If $answer is undefined, no answer was received from the DNS server.
if (!defined($answer)) {
print STDERR "Query of '$current_domain_name' failed.\n";
exit 1;
}
# Dissect the answer.
my(@answers) = $answer->answer;
my(@authorities) = $answer->authority;
Worley Expires June 6, 2014 [Page 12]
Internet-Draft ROID December 2013
my(@additionals) = $answer->additional;
my($done) = 0;
# Check for URL records.
foreach my $a (@answers) {
if ($a->type eq 'TXT' && $a->class eq 'IN') {
my(@txtdata) = $a->txtdata;
print ' @txtdata = ', join(' ', @txtdata), "\n" if $debug >= 1;
# Get URL ROID record.
if ($txtdata[0] eq 'URL') {
# Print the object access URL.
print $txtdata[1], "\n" if $debug >= 2;
$done = 1;
}
}
}
last LOOKUP if $done;
# Check for NS delegation records.
foreach my $a (@authorities) {
print " \$a->type = '", $a->type, "', \$a->class = '", $a->class,
"', \$current_domain_name = '$current_domain_name', \$a->name = '", $a->name,
"'\n"
if $debug >= 2;
my($name) = $a->name;
if ($a->type eq 'NS' && $a->class eq 'IN' &&
$current_domain_name =~ m%\b\Q$name\E\.$%) {
@current_nameservers = () if $done == 0;
$done = 1;
my($server) = $a->nsdname;
print " \$server = $server\n" if $debug >= 2;
# The server may be a real server (if this is an NS delegation
# point) or a temporary or permanent redirection. Examine
# the server name to determine what it means.
if (my($mode, $redirection) =
$server =~ /^(MVT|MVP)\.(.*\.OID\.ARPA)$/i) {
# This is a redirection.
# Replace the redirected portion of the OID with the new OID.
$current_domain_name =~ s%\Q$name\E\.$%$redirection.%;
# Record permanent redirections.
if (uc($mode) eq 'MVP') {
$canonical_domain_name = $current_domain_name
unless $temporary_redirection_seen;
} else {
$temporary_redirection_seen = 1;
}
if ($debug >= 2) {
Worley Expires June 6, 2014 [Page 13]
Internet-Draft ROID December 2013
print STDERR " \$mode = '$mode', \$temporary_redirection_seen = $temporary_redirection_seen, \$canonical_domain_name = '$canonical_domain_name'\n";
}
if ($debug >= 1) {
print STDERR " $name $mode redirected to $redirection\n";
}
# Start searching from the origin again.
@current_nameservers = @nameservers;
redo LOOKUP;
} else {
# Look for an A record for the server name.
ADDITIONALS:
foreach my $aa (@additionals) {
print " \$aa->type = '", $aa->type, "', \$aa->class = '",
$aa->class, "', \$aa->name = '", $aa->name, "'\n"
if $debug >= 2;
if ($aa->type eq 'A' && $aa->class eq 'IN' &&
$aa->name eq $server) {
print " \$aa->address = '", $aa->address, "'\n"
if $debug >= 2;
push(@current_nameservers, $aa->address);
last ADDITIONALS;
}
}
}
}
}
if ($done) {
if ($#current_nameservers < 0) {
print STDERR "NS redirection found but no nameserver addresses provided.\n";
exit 1;
}
print STDERR " NS delegation to nameservers ",
join("' ,'", @current_nameservers) . "\n"
if $debug >= 1;
redo LOOKUP;
}
# Otherwise we've hit a dead end.
print STDERR "No usable answer for '$current_domain_name' from nameservers.\n";
exit 1;
}
# If requested, print the canonical OID URN.
if ($canonical) {
print STDERR " \$canonical_domain_name = '$canonical_domain_name'\n"
if $debug >= 2;
# Remove the root domain.
my($c) = $canonical_domain_name;
Worley Expires June 6, 2014 [Page 14]
Internet-Draft ROID December 2013
$c =~ s%\.\Q$root_domain\E\.$%%;
print 'canonical urn:oid:', join('.', reverse(split(/\./, $c))), "\n";
}
Figure 1: ROID-resolver: Sample resolver
Figure 2: zone.oid.arpa: Zone file for OID.ARPA.
$ORIGIN oid.arpa.
$TTL 86400
@ IN SOA ariadne.com. worley.ariadne.com. (
2013120101 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expire after 1 week
86400 ) ; minimum TTL of 1 day
; Dummy entries needed to make Bind think this is a valid zone.
@ IN NS dummy200
dummy200 IN A 127.0.0.200
; Delegate the 14490 enterprise subtree to 201.
14490.1.4.1.6.3.1 IN NS dummy201
dummy201 IN A 127.0.0.201
Figure 2: zone.oid.arpa: Zone file for OID.ARPA.
Figure 3: zone.14490: Zone file for 14490.1.4.1.6.3.1.OID.ARPA.
Worley Expires June 6, 2014 [Page 15]
Internet-Draft ROID December 2013
$ORIGIN 14490.1.4.1.6.3.1.oid.arpa.
$TTL 86400
@ IN SOA ariadne.com. worley.ariadne.com. (
2013120100 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expire after 1 week
86400 ) ; minimum TTL of 1 day
; Dummy entries needed to make Bind think this is a valid zone.
@ IN NS dummy201
dummy201 IN A 127.0.0.201
; Continue lines using ( ... )
6910.1.5 IN TXT ( "URL" "http://tools.ietf.org/html/rfc6910" )
; Permanent redirection from 21.1 to 21.2
1.21 IN NS MVP.2.21
; Temporary redirection from 21.2.6910 to 5.1.6910
6910.2.21 IN NS MVT.6910.1.5
Figure 3: zone.14490: Zone file for 14490.1.4.1.6.3.1.OID.ARPA.
Figure 4: test-named.200.conf: Configuration for nameserver at
127.0.0.200
options {
directory "/home/worley/oid/Information-Centric-Networking";
# This configuration is served on *.200.
listen-on { 127.0.0.200; };
pid-file "/home/worley/oid/Information-Centric-Networking/named.pid";
};
# Turn off the control channel feature.
controls { };
zone "oid.arpa" {
type master;
file "zone.oid.arpa";
};
Figure 4: test-named.200.conf: Configuration for nameserver at
127.0.0.200
Figure 5: test-named.200.conf: Configuration for nameserver at
127.0.0.201
Worley Expires June 6, 2014 [Page 16]
Internet-Draft ROID December 2013
options {
directory "/home/worley/oid/Information-Centric-Networking";
# This configuration is served on *.201.
listen-on { 127.0.0.201; };
pid-file "/home/worley/oid/Information-Centric-Networking/named.pid";
};
# Turn off the control channel feature.
controls { };
zone "14490.1.4.1.6.3.1.oid.arpa" {
type master;
file "zone.14490";
};
Figure 5: test-named.200.conf: Configuration for nameserver at
127.0.0.201
Figure 6: test-script: Control script
Worley Expires June 6, 2014 [Page 17]
Internet-Draft ROID December 2013
#! /bin/bash
# Run the ROID test system.
# Note that the addresses to be used and the port to be used are heavily
# embedded in the Bind control files, and so their uses in this script cannot
# be turned into variables without adding code to update the Bind control
# files.
set -x
# Set up additional addresses.
# named won't use non-standard loopback addresses unless they are listed
# as official addresses of the lo interface. (Despite the fact that you
# can ping the addresses and even connect to them without "ip address add".)
# These commands have to be executed as root.
ip address add 127.0.0.200 dev lo
ip address add 127.0.0.201 dev lo
# Start Bind.
# Have to use full path to run named, because named may not be on a user's path.
# -c argument must be absolute path (see named manual page)
# The -p option seems to be necessary to allow the listen-on option in the
# configuration file to work.
/usr/sbin/named -g -4 \
-p 12345 \
-c /home/worley/oid/Information-Centric-Networking/test-named.200.conf \
>named.200.log 2>&1 &
/usr/sbin/named -g -4 \
-p 12345 \
-c /home/worley/oid/Information-Centric-Networking/test-named.201.conf \
>named.201.log 2>&1 &
# Make sure named has time to start up.
sleep 2
# Test queries with Dig.
#dig +norecurse @127.0.0.200 -p12345 14490.1.4.1.6.3.1.oid.arpa. ANY
#dig +norecurse @127.0.0.201 -p12345 6910.1.5.14490.1.4.1.6.3.1.oid.arpa. ANY
# Run the resolver.
./ROID-resolver -d -c -n 127.0.0.200 -p 12345 urn:oid:1.3.6.1.4.1.14490.21.1.6910
# Terminate Bind.
kill %1 %2
Figure 6: test-script: Control script
Worley Expires June 6, 2014 [Page 18]
Internet-Draft ROID December 2013
Author's Address
Dale R. Worley
Ariadne Internet Services, Inc.
738 Main St.
Waltham, MA 02451
US
Phone: +1 781 647 9199
Email: worley@ariadne.com
Worley Expires June 6, 2014 [Page 19]