On 8/26/2016 9:43 AM, Karl-Philipp Richter wrote:
>
> Are there any plans to use name resolution in OpenAFS? It's a major
> technology that exists for decades and for a reason. It'd make all our
> lives much easier.

Kalle,

There are two types of servers that the AFS cache manager
communicates with.  The first is the Volume Location servers (port 7003)
whose endpoints are determined by querying the client's CellServDB file.
The CellServDB file format is (approximately):

 >cellname optional-linked-cellname # Description of Cell
 ipv4-addr-of-vlserver    #    DNS-hostname-of-vlserver
 ...
 >nextcell ...
 ....

Those not familiar with the CellServDB format mistakenly
assume that the '#' is a comment.  It is not, its a mandatory field
separator.

The list of server records (ipv4-addr # dns-hostname) is optional and if
the AFS cache manager is started with the -afsdb command-line parameter
then cells which cannot be resolved from the CellServDB file will be
resolved via a combination of

 * DNS SRV records or DNS AFSDB records
 * DNS A records

It is important to note that the behavior of the OpenAFS *nix cache
manager and the Windows cache manager and Arla differ.  For example,
whereas the OpenAFS *nix cache manager only uses the ipv4 addresses from
the CellServDB file, the Windows cache manager always performs DNS A or
CNAME lookups on the DNS-hostname.

Whereas the *nix cache manager, only resolves volume location servers
for a cell at startup, the Windows cache manager tracks the DNS TTL and
applies a configurable TTL to the CellServDB entries.

Part of the reason for the difference in behavior in this regard is
because the *nix kernel module is not the entity that reads the
CellServDB file or performs DNS lookups.  The userland "afsd" process
parses the CellServDB info and pushes the results into the kernel.
Similarly to how an end-user can do so using the "fs newcell" command.

The volume location servers maintain a database, VLDB, which stores the
mapping of volume names and numeric identifiers to locations (file
servers and partitions.)   It also maintains a record of file server
identifiers and the list of ipv4 addresses on which the file server can
be contacted.   This latter list is updated each time the file server
restarts which is why it is necessary for the file server to be
restarted each time its ipv4 address configuration changes.

Public NAT addresses are registered by a file server by including it in
the NetInfo file on the file server.  Private NAT addresses are excluded
from the registration by including them in the NetRestrict file.

Each time the file server registration alters the contents of the
matching VLDB record, a counter for that file server is incremented.
This counter combined with the file server identifier are delivered to
cache managers as the location of a volume.  The Volume Location service
also provides an RPC that permits cache managers to query the set of
ipv4 addresses associated with a given file server identifier and
counter.  It is this mechanism that permits the AFS cache manager to
cache the locations of file servers.

The underlying issues that you are facing are:

1. Each time your public NAT address changes you have to update
   each of the server CellServDB and NetInfo files and restart
   the affected servers.  If one of those servers is a Ubik server
   (VLDB, PRDB, etc.) then it is critical that the CellServDB on each
   of the servers be updated to include the updated address. The cell
   must then be restarted.

   For Ubik it is critical that all of the servers in a quorum see
   the same set of ipv4 addresses for all of the servers in the
   quorum.  It is not safe to rely upon the DNS responses that might
   be altered by a NAT gateway and if DNS-SEC is used the NAT
   could not alter them.

   If the cell uses DNS records SRV or AFSDB to distribute the location
   of the Ubik database servers to clients, then those records must
   be updated.

   File servers contact the Volume Location and Protection servers
   and do so by using the ipv4 addresses in the server CellServDB.
   Servers in OpenAFS never use the DNS hostnames to contact one
   another.

2. Each time your public NAT address for a VL server changes you
   have to do one of the following on each *nix cache manager:

   a. update CellServDB and restart
   b. "fs newcell" the updated VL server info for the cell

Knowing that the IP addresses of your cell are unstable you can automate
these operations using scripts that execute periodically to check the
public NAT address.  However, even if you have such scripts in
place there is a strong likelihood that there will be outages since DNS
resolvers are permitted to cache records for the full TTL of the
response.  Therefore, it is possible that the automated script would
fail to notice the address change for up to a TTL.

If OpenAFS supported IPv6 (see Simon Wilkinson's talk "The Road to IPv6"
from the 2015 Best Practices Workshop)

 http://workshop.openafs.org/afsbpw15/talks/thursday/wilkinson-road-to-afs.pdf

you could obtain your own IPv6 tunnel from Hurricane Electric and avoid
the IPv4 NAT nonsense when IPv6 is available to your client systems.  Of
course, OpenAFS doesn't. Alternatives include requiring the use of a VPN
to access the cell and ensuring that only private addresses are
published for cell servers.


As indicated above, DNS can be used by clients to locate the database
services: Volume Location, Protection, etc.  DNS cannot be used by
servers to locate other servers.  Nor can DNS be used by clients to
locate file servers.

When AuriStor added IPv6 support to its product one of the goals was
support for 6to4 gateways such as Microsoft Direct Access.  These
gateways rely upon DNS queries to obtain a AAAA record for a host that
only has an IPv4 address.  The AFS3 model of embedding IPv4 addresses in
the VL_GetAddrsU RPC response posed a challenge because an IPv6 only
client must implement the necessary logic to identify the correct ipv6
prefix to use in converting the private IPv4 address to an IPv6 address
that will be routed through the 6to4 gateway. Other protocols such as
FTP that embed addresses in the control stream have similar problems.

Although it might be tempting to extend the VL RPCs to permit
registration of file servers by DNS host name instead of by IP address,
a better approach might be to add split horizon support to the VL
service such that file servers can register both the public and private
addresses with the VL service but the VL service would only disclose one
based upon which address the client's query is received from.

It would not be safe to convert the Ubik servers to rely upon DNS host
names.  Not with the current Ubik protocol specification.

Jeffrey Altman

<<attachment: jaltman.vcf>>

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to