DNS: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
(Documentation of DNS usage)
(No difference)

Revision as of 16:52, 10 November 2016

Usage of DNS within FlightGear

The Domain Name System (DNS) is being used within FlightGear to lookup resources providing several services. It's use started with release 2016.2.1 as an experimental feature to resolve the location of the terrasync servers. This page documents the used services in detail.

FlightGear systems using DNS

Currently (as of version 2016.4.0) these systems use DNS for service discovery:

  • The terrasync client to find a terrasync server
  • The multiplayer client to list multiplayer servers and retrieve information about each server

Terrasync

The terrasync client queries NAPTR records for the dns name terrasync.flightgear.org. As of version 2016.4 the configured entries are

terrasync.flightgear.org. IN NAPTR 100 100 "U" "ws20" "!^.*$!http://flightgear.sourceforge.net/scenery!" .
terrasync.flightgear.org. IN NAPTR 100 50 "U" "ws20" "!^.*$!http://fgfs.goneabitbursar.com/terrascenery!" .
terrasync.flightgear.org. IN NAPTR 100 50 "U" "ws20" "!^.*$!http://mpserver16.flightgear.org/scenery!" .

At system start, FlightGear sends a query for the dns name terrasync.flightgear.org. The URL for scenery download is encoded in the regex field between the last two exclamation marks. This string MUST start with !^.*$! and end with !, the regex itself is not interpreted by the terrasync client, only the fixed string is taken. The hostname to query is configurable at system start by setting a property, so is the scenery version number. The default scenery version is "ws20".


Multiplayer

The multiplayer client queries SRV records for a list of multiplayer servers and TXT records on each server for detailed information about the server.

The SRV record for a multiplayer server looks like this:

_fgms._udp IN SRV 10 20 5001 mpserver01

All entries currently use the same values for priority and weight. The port number for active servers are set to the port number of the running fgms instance. The port number is zero for inactive servers.

The TXT record for each referenced multiplayer server looks like this:

mpserver01 IN TXT "flightgear-mpserver=eyJuYW1lIjoibXBzZXJ2ZXIwMSIsImxvY2F0aW9uIjoiRnJhbmtmdXJ0LEdlcm1hbnkifQo="

with the text data used as in RFC 1464 - Using the Domain Name System To Store Arbitrary String Attributes. The attribute name flightgear-mpserver marks this entry as "ours" while it's attribute value is a base64 encoded json string containing additional attributes for the server not available within the SRV record. For the given example, the base64 string of

eyJuYW1lIjoibXBzZXJ2ZXIwMSIsImxvY2F0aW9uIjoiRnJhbmtmdXJ0LEdlcm1hbnkifQo= 

decodes to

{"name":"mpserver01","location":"Frankfurt,Germany"}