SR140 DNS query support with SRV

Target release
Epic

BRKT-529 - Getting issue details... STATUS

Document status

COMPLETE

Document owner
Designer
Developers
QA

Goals

  • Add support for RFC 2782 - A DNS RR for specifying the location of services (DNS SRV).

Glossary 

DNS - Domain Name System

RR - Resource Record

SRV - Service Record

Background and strategic fit

Today SR140 supports only DNS A type query for IPv4 and AAAA for IPv6. SIP Trunk service provider use SRV (Service Record) in order to hide the farm of SIP Servers behind a DNS load balance.

The Domain Name System (DNS) associates various sorts of information with domain names; most importantly, it serves as the "phone book" for the internet by converting human-readable complete hostnames (www.dialogic.com) to an IP address (192.168.102.14).  

The DNS distributes the responsibility for assigning domain names and mapping them to IP networks by allowing the authoritative server for each domain to keep track of its own changes, avoiding the new for a central registrar to be continually consulted and updated.  An SRV record or Service record is a category of data in the Domain Name System specifying information on available services. It is defined in RFC 2782.

An SRV record has the form:

_Service._Proto.Name TTL Class SRV Priority Weight Port Target

ServiceThe symbolic name of the desired service.
ProtoThe protocol of the desired service; this is usually either TCP or UDP.
NameThe domain name for which this record is valid.
TTLStandard DNS time to live field.
ClassStandard DNS class field (this is always IN).
PriorityThe priority of the target host, lower value means more preferred.
WeightA relative weight for records with the same priority.
PortThe TCP or UDP port on which the service is to be found.
TargetThe canonical hostname of the machine providing the service.

 

An example SRV record might look like this using bind syntax:

_sip._udp.carrier.com. 86400 IN SRV 0 5 5060 sipserver.carrier.com

This points to a server named sipserver.carrier.com listening on UDP port 5060 for SIP protocol connections. The priority given here is 0, and the weight is 5.
With SIP telephony, a SIP call might start as 7814339255@dialogic.com for the call to proceed, the phone needs to locate the IP address for dialogic.com by using a DNS query. 

Use Cases for SRV

The following sections define use cases for using SRV.  These cases show how SRV can be deployed to allow flexable deployments. The usage of SRV allows administrators to use several servers for a single domain, to move services from host to host with little fuss, and to designate some hosts as primary servers for a service and others as backups.

 FAILOVER SBCS WITH DNS SRV

The priority field is similar to an MX record’s priority value. Clients always use the SRV record with the lowest numbered priority value first, and only fall back to other records if the connection with this record’s host fails. Thus, a service may have a designated “fallback” server, which will only be used if the primary server fails. Only another SRV record with a priority field value higher than the primary server’s record is needed. If a service has multiple SRV records with the same priority value, clients use the weight field to determine which
host to use. The weight value is relevant only in relation to other weight values for the service, and only among records with the same priority value.
In failover, SBCs are set with different priorities. The lower priority SBC is tried first, and if that SBC is unavailable, the SBC with the higher priority is tried. Records with higher priority values are only tried if all records with a lower priority are considered unreachable. 

In the following example, DNS SRV record query to carrier.com with both the

_sip._udp.carrier.com 60 IN SRV 10 50 5060 sbc1.carrier.com
_sip._udp.carrier.com 60 IN SRV 20 50 5060 sbc2.carrier.com


DNS A Record Query yields:

sbc1.carrier.com = 10.10.0.10
sbc2.carrier.com = 10.10.0.20

If the server with the priority 10, sbc1.carrier.com is unavailable, the record with the next higher priority would be chosen, which would be sbc2.carrier.com.

LOAD BALANCING SBCS WITH DNS SRV

In the following example, a DNS SRV record query to carrier.com with both the priority and weight fields each with 50% of the traffic load is used to provide a load balancing and backup service and would yield:

_sip._udp.carrier.com 60 IN SRV 10 50 5060 sbc1.carrier.com
_sip._udp.carrier.com 60 IN SRV 10 50 5060 sbc2.carrier.com
_sip._udp.carrier.com 60 IN SRV 20 0 5060 backupbox.carrier.com


If one SBC becomes unavailable, the remaining machine takes the load. The two records share a priority of 10, so the weight field’s value will be used by clients to determine which server (host and port combination) to contact. The sum both values is 100, so sbc1.carrier.com will be used 50% of the time and sbc2.carrier.com will be used 50% of the time. DNS A Record Query yields:

sbc1.carrier.com = 10.10.0.10
sbc2.carrier.com = 10.10.0.20

If both servers with priority 10 are unavailable, the record with the next highest priority value will be chosen, which is backupbox.carrier.com. This might be a machine in another physical location, presumably not vulnerable to anything that would cause the first two hosts to become unavailable. Several implementations relying on DNS also automatically update the DNS servers to optimize the load of servers or to remove servers due to service failures.

Assumptions

  • There will be no required configuration change for this feature.   The SIP stack already supports the querying of SRV records with advance mode. Advanced mode was enabled with the implemenation of IPv6.  The host module will need to be updated to use the SRV query instead of its current DNS A record method.

Requirements

#TitleUser StoryImportanceNotes
1Support SRV Record QueryThe SR140 will add support for sending an SRV DNS request.Must Have 
2TCP and UDP modeSupport for querying SRV records for both TCP and UDP over SIP mode based on the SR140.
This is based on the users sip_transport_protocol setting in the [host module.x/parameters] section
of the callctrl.cfg file. 
Must Have 
3Priority

The SR140 must attempt to contact the target host with the lowest-numbered priority it can reach
The range is 0-65535. This is a 16 bit unsigned integer in network byte order.

Must Have 
4WeightThe SR140 target hosts with the same priority, the selection will be performed by the weight field.Must Have 
5DNS ABased on the selected target, the SRV record may or may not have provided a DNS A record.
If it available, the SR140 should used the provided record.
If it is not available, the SR140 should query DNS for the A record of the target host. 
Must Have 
6No responseIf the remote does not respond the the SRV request or returns a not support type response
the SR140 will use the appropriate DNS A query as currently implemented. 
Must Have 
7ConfigurationThere will be no required configuration setting for this feature and it will be enabled by default.Must Have 

User interaction and design

 None should be required. 

 

Test Scenarios 

From Bob: 

They should show cases where the SRV information provides the DNS A information and cases where we'd query for the DNS A information.  We should make sure that if SRV is not supported that DNA all by itself still works.  We should verify that the target host with the lowest priority is used and that the weight value is followed for cases of equal priority.

Questions

Below is a list of questions to be addressed as a result of this requirements document:

QuestionOutcome
Is this feature required to support IPv6? Initial request and examples are IPv4 only.Sales reported IPv4 is required. Indifferent about IPv6 support.
  

Not Doing