DNS Configuration
Jeremy George <jeremy.george@yale.edu> (May 12, 2003)
Locating SIP Services
How users know a server - its name and how they locate that
server on the net - its address have long been separated to
provide a lasting identifier without hindering the flexibility
required by local network administrators. Similarly, services
need to be separated from the machines that provide the
services, and for the same reason.
In addition it's convenient to be able to list one's
username@domain as identical to one's email address just by
changing the application prefix, without regard to what set of
machines are actually providing the services. For example,
email:alice.smith@bigu.edu and
sip:alice.smith@bigu.edu.
RFC3263 specifies DNS as the preferred mechanism for
determining the IP address, port and transport of the host to
which a SIP request is sent. Transport must be determined
because SIP requests can be sent via UDP, TCP, SCTP or TLS over
TCP for secure, encrypted sessions, unlike many more limited
protocols.
DNS provides two record types relevant to SIP requests: SRV
and NAPTR. Some implementations will use SRV records only.
SRV Records
SRV records (specified in RFC2782) are in the form of
"_Service._Proto.Name TTL Class SRV Priority Weight Port Target"
For example,
"_sip._udp.bigu.edu 43200 IN SRV 10 10 5060 sipserver.bigu.edu."
The service is SIP.
The transport is UDP. Other values could be TCP, SCTP or
TLS.
The cache lifetime is 12 hours (43,200 secondes.) This could
be any positive signed 32 bit integer.
The class is IN (this is always true.)
The record type is SRV.
The priority is 10. With multiple SRV records the priority
determines the proxy query order. Lower values are queried
first.
The weight is 10. With multiple SRV records of similar
priority, the weight determines proportionally how often a
proxy is queried. Higher values are queried more often. So, a
weight of 20 would be queried twice as often as one of 10. A
weight of 30 would be queried three times as often as one of
10.
The port is 5060.
The proxy server FQDN is sipserver.bigu.edu and as is
required in DNS the FQDN is terminated with a dot.
An example DNS implementation with redundant proxy servers
might look like this:
bigu.edu IN SOA ns.bigu.edu. root.bigu.edu. (
2003032001
10800
3600
604800
86400 )
bigu.edu. 43200 IN NS ns.bigu.edu.
;
ns.bigu.edu. 43200 IN A 10.0.0.20
sipserver1.bigu.edu. 43200 IN A 10.0.0.21
sipserver2.bigu.edu. 43200 IN A 10.0.0.22
;
_sip._udp.bigu.edu. 43200 IN SRV 0 0 5060 sipserver1.bigu.edu.
_sip._udp.bigu.edu. 43200 IN SRV 1 0 5060 sipserver2.bigu.edu.
_sip._tcp.bigu.edu. 43200 IN SRV 0 4 5060 sipserver1.bigu.edu.
_sip._tcp.bigu.edu. 43200 IN SRV 0 2 5060 sipserver2.bigu.edu.
_sips._tcp.bigu.edu. 43200 IN SRV 0 0 5060 sipserver1.bigu.edu.
_sips._tcp.bigu.edu. 43200 IN SRV 0 0 5060 sipserver2.bigu.edu.
In this configuration UDP SIP requests will always be snet
to sipserver1 because the priority value is lower than
sipserver2. Should that request fail, sipserver2 would be
queried. In effect, sipserver2 is an emergency backup to
sipserver1.
Two TCP SIP requests will be sent to sipserver1 for each one
sent to sipserver2 because the weight for sipserver1 is twice
that for sipserver2. In this case sipserver1 and sipserver2 are
both being queried and load balanced. A weight such as this
might be used where one machine is significantly more powerful
than another.
Secure SIP requests will be equally load balanced between
the two servers.
A SIP UA wanting to initiate a call to
sip:bigcheese@bigu.edu will first send a DNS SRV lookup
to bigu.edu. With a successful return, the SIP URI may be
re-written to sip:bigcheese@sipserver1.bigu.edu. Absent
information on bigu's preference for transport, the calling UA
will choose the transport it prefers among the responses it
gets.
In this example the calling UA could not use SCTP as a
transport. The available choices are UDP, TCP, TLS or allow the
call to fail.
In some circumstances allowing the call to fail may be the
best choice. For example, the Health Isurance Portability and
Accountability Act of 1996's (HIPAA) final security rule
reported in the Federal Register February 20, 2003 says "we
decided to make use of encryption in the transmission process
an addressable implementation specification. Covered entities
aer encouraged, however, to consider use of encryption
technology for transmitting electronic protected health
information, particularly over the Internet." The choice of
which protocols to prefer or even accept is
implementation-specific and should be considered based on the
sensitivity of the transmitted information and the likelihood
of hostile interception.
NAPTR Records
According to RFC3263 "NAPTR records provide a mapping from a
domain to the SRV record for contacting a server with the
specific transport protocol in the NAPTR service field." In
other words NAPTR records provide a mechanism for the called
domain to specify which protocols it prefers a SIP request to
use.
NAPTR records (specified in RFC3403) are in the form of
"domain-name TTL Class NAPTR order preference flags service regexp target"
For example,
"bigu.edu. IN NAPTR 60 50 "s" "SIP+D2U" "" _sip._udp.bigu.edu."
The domain name being queried. This is the portion to the
right of the at sign in sip:alice.smith@bigu.edu.
The cache lifetime is 12 hours. This could be any positive
signed 32 bit integer.
The class in IN (this is always true.)
The record type is NAPTR.
The order is 60. The preference is 50. The meaning of order
and preference in NAPTR records is different from preference
and weight in SRV records. As with SRV records however, lower
values have higher precedence. The order specifies the order in
which records are read. If a capability match is found between
calling and called parties, that protocol must be used and
other records discarded. If the order fields are all the same,
the preference field is examined. Lower values have higher
precedence but calling parties may override the called domain
preference and select a higher preference value transport.
The flag is s. Flags are application specific. In this case
the flag specifies that the lookup is terminal and all the
information is present to find the appropriate SRV record in
the regexp or target field.
The service is SIP+D2U. This specifies the SIP protocol over
UDP. Other possible values are SIP+D2T for SIP over TCP,
SIP+D2S for SIP over SCTP and SIPS+D2T for secure SIP over TLS
over TCP. TLS over UDP is not defined. All valid service field
values are registered with IANA.
The regexp is blank. The target is _sip._udp.bigu.edu. The
regexp (regular expression) and target fields in combination
make up the substitution field. One, and only one, must be
used; the other must be blank. Regular expressions are powerful
substitution mechanisms. However, they also can be complex and
hence error prone. Unless you have a commanding need for the
flexibility of a regular expression, we recommend you specify a
static target.
The addition of NAPTR records to the previous example might
look like this.
bigu.edu IN SOA ns.bigu.edu. root.bigu.edu. (
2003032001
10800
3600
604800
86400 )
bigu.edu. 43200 IN NS ns.bigu.edu.
;
ns.bigu.edu. 43200 IN A 10.0.0.20
sipserver1.bigu.edu. 43200 IN A 10.0.0.21
sipserver2.bigu.edu. 43200 IN A 10.0.0.22
;
_sip._udp.bigu.edu. 43200 IN SRV 0 0 5060 sipserver1.bigu.edu.
_sip._udp.bigu.edu. 43200 IN SRV 1 0 5060 sipserver2.bigu.edu.
_sip._tcp.bigu.edu. 43200 IN SRV 0 4 5060 sipserver1.bigu.edu.
_sip._tcp.bigu.edu. 43200 IN SRV 0 2 5060 sipserver2.bigu.edu.
_sips._tcp.bigu.edu. 43200 IN SRV 0 0 5060 sipserver1.bigu.edu.
_sips._tcp.bigu.edu. 43200 IN SRV 0 0 5060 sipserver2.bigu.edu.
;
bigu.edu. IN NAPTR 0 0 "s" "SIPS+D2T" "" _sips._tcp.bigu.edu.
bigu.edu. IN NAPTR 1 0 "s" "SIP+D2T" "" _sip._tcp.bigu.edu.
bigu.edu. IN NAPTR 2 0 "s" "SIP+D2U" "" _sip._udp.bigu.edu.
NAPTR records are not necessary but if they are present
RFC3263 mandates at least three records. It further states that
they should be listed in this precedence: 1) SIPS+D2T, 2)
SIP+D2T and SIP+D2U. In common English this means that TLS over
TCP should be used if the calling party has the capability.
Failing that TCP should be used and UDP is permitted only as a
last resort to keep the call from failing.
In practice BIND implementations are often smart enough to
return the SRV records in the target field and the A records to
which they point among the glue data so that additional DNS
lookups are not required.
In terms of call flow then a SIP User Agent Client first
sends a DNS NAPTR request to the domain specified in the
Request-URI. If valid records are returned an appropriate
transport is identified. Depending on the richness of the glue
data in the first request, a second request is sent to the
value in the substitution field.
If no NAPTR records are returned, a DNS SRV request is sent
based on the transport preferred by the UAC. IF valid records
are returned, the request is sent to the preferred proxy.
As a last resort if no SRV records are found a DNS A record
request is sent for the domain in the Request-URI. In the case of
sip:alice.smith@bigu.edu the request would be for the IP
address of bigu.edu. If a valid IP address is returned, the
request is sent to that address using UDP.
The best practice for sites wanting just to get started may
be to implement SRV records but not NAPTR records. Those
wishing complete detailed information on service location are
referred to RFCs 2782, 3263 and 3403.
|