Difference between revisions of "SRV Records"

From XMPP WIKI
Jump to navigation Jump to search
m
m
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
A Service record (SRV record) is a specification of data in the Domain Name System (DNS) defining the location (i.e. the hostname and port number) of servers for specified services. It is defined in [http://tools.ietf.org/html/rfc2782 RFC 2782].
A Service record ('''SRV record''') is a specification of data in the Domain Name System ('''DNS''') defining the location (i.e. the hostname and port number) of servers for specified services. It is defined in [http://tools.ietf.org/html/rfc2782 RFC 2782].


== Ports ==
== Ports ==
=== Very important ===
=== Very important ===
* <span style="color:#FF0000">XMPP uses 5222 ('''C2S''') and 5269 ('''S2S''') ports in TCP only ([http://xmpp.org/rfcs/rfc6120.html RFC 6020]).</span>
* <span style="color:#FF0000">XMPP uses 5222 ('''C2S''') and 5269 ('''S2S''') ports in TCP only ([http://xmpp.org/rfcs/rfc6120.html RFC 6120]).</span>
=== If used ===
=== If used ===
* STUN uses 3478 port in TCP/UDP and STUNS (STUN over TLS) uses 5349 port in TCP only ([http://tools.ietf.org/html/rfc5389 RFC 5389]).
* STUN uses 3478 port in TCP/UDP and STUNS (STUN over TLS) uses 5349 port in TCP only ([http://tools.ietf.org/html/rfc5389 RFC 5389]).
Line 60: Line 60:
  _stun._tcp.example.net. TTL IN SRV priority weight port target
  _stun._tcp.example.net. TTL IN SRV priority weight port target
  _stun._udp.example.net. TTL IN SRV priority weight port target
  _stun._udp.example.net. TTL IN SRV priority weight port target
_stuns._tcp.example.net. TTL IN SRV priority weight port target


=== Example 1 ===
=== Example 1 ===
Line 102: Line 103:
  _turn._tcp.example.net. TTL IN SRV priority weight port target
  _turn._tcp.example.net. TTL IN SRV priority weight port target
  _turn._udp.example.net. TTL IN SRV priority weight port target
  _turn._udp.example.net. TTL IN SRV priority weight port target
_turns._tcp.example.net. TTL IN SRV priority weight port target


=== Example 1 ===
=== Example 1 ===
Line 144: Line 146:
* [http://tools.ietf.org/html/rfc2782 RFC 2782: A DNS RR for specifying the location of services (DNS SRV)]
* [http://tools.ietf.org/html/rfc2782 RFC 2782: A DNS RR for specifying the location of services (DNS SRV)]
* [http://xmpp.org/rfcs/rfc6120.html RFC 6120: Extensible Messaging and Presence Protocol (XMPP): Core]
* [http://xmpp.org/rfcs/rfc6120.html RFC 6120: Extensible Messaging and Presence Protocol (XMPP): Core]
* [http://tools.ietf.org/html/rfc5389 RFC 5389: Session Traversal Utilities for NAT (STUN)]
* [http://tools.ietf.org/html/rfc5766 RFC 5766: Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)]
* [http://tools.ietf.org/html/rfc5928 RFC 5928: Traversal Using Relays around NAT (TURN) Resolution Mechanism]

Revision as of 03:26, 19 April 2013

A Service record (SRV record) is a specification of data in the Domain Name System (DNS) defining the location (i.e. the hostname and port number) of servers for specified services. It is defined in RFC 2782.

Ports

Very important

  • XMPP uses 5222 (C2S) and 5269 (S2S) ports in TCP only (RFC 6120).

If used

  • STUN uses 3478 port in TCP/UDP and STUNS (STUN over TLS) uses 5349 port in TCP only (RFC 5389).
  • TURN uses 3478 port in TCP/UDP and TURNS (TURN over TLS) uses 5349 port in TCP only (RFC 5766, RFC 5928).

Record format

An SRV record has the form:

_service._proto.name TTL class SRV priority weight port target
  • service: the symbolic name of the desired service.
  • proto: the transport protocol of the desired service; this is usually either TCP or UDP.
  • name: the domain name for which this record is valid.
  • TTL: standard DNS time to live field.
  • class: standard DNS class field (this is always IN).
  • priority: the priority of the target host, lower value means more preferred.
  • weight: A relative weight for records with the same priority.
  • port: the TCP or UDP port on which the service is to be found.
  • target: the canonical hostname of the machine providing the service.

XMPP SRV records

_xmpp-client._tcp.example.net. TTL IN SRV priority weight port target
_xmpp-server._tcp.example.net. TTL IN SRV priority weight port target

Example 1

_xmpp-client._tcp.example.net. 86400 IN SRV 5 0 5222 example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 5 0 5269 example.net.

The XMPP domain is example.net and the server is example.net.

Example 2

_xmpp-client._tcp.example.net. 86400 IN SRV 5 0 5222 server.example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 5 0 5269 server.example.net.

The XMPP domain is example.net and the server is server.example.net.

Example 3

_xmpp-client._tcp.example.net. 86400 IN SRV 5 50 5222 server1.example.net.
_xmpp-client._tcp.example.net. 86400 IN SRV 10 30 5222 server2.example.net.
_xmpp-client._tcp.example.net. 86400 IN SRV 10 10 5222 server3.example.net.
_xmpp-client._tcp.example.net. 86400 IN SRV 10 10 5222 server4.example.net.
_xmpp-client._tcp.example.net. 86400 IN SRV 15 0 5222 backup.example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 5 50 5269 server1.example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 10 30 5269 server2.example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 10 10 5269 server3.example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 10 10 5269 server4.example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 15 0 5269 backup.example.net.

The XMPP domain is example.net and the principal server is server1.example.net which used 50% after server2.example.net 30%, server3.example.net 10%, server4.example.net 10% too, if server1 is down, server2, server3 and server4 will work, if servers 1/2/3/4 are down, backup will work.

Retrieving XMPP SRV records

$ dig SRV _xmpp-client._tcp.example.net
$ dig SRV _xmpp-server._tcp.example.net


STUN SRV records

_stun._tcp.example.net. TTL IN SRV priority weight port target
_stun._udp.example.net. TTL IN SRV priority weight port target

_stuns._tcp.example.net. TTL IN SRV priority weight port target

Example 1

_stun._tcp.example.net. 86400 IN SRV 5 0 3478 example.net.
_stun._udp.example.net. 86400 IN SRV 5 0 3478 example.net.
_stuns._tcp.example.net. 86400 IN SRV 5 0 5349 example.net.

The STUN domain is example.net and the server is example.net.

Example 2

_stun._tcp.example.net. 86400 IN SRV 5 0 3478 server.example.net.
_stun._udp.example.net. 86400 IN SRV 5 0 3478 server.example.net.
_stuns._tcp.example.net. 86400 IN SRV 5 0 5349 server.example.net.

The STUN domain is example.net and the server is server.example.net.

Example 3

_stun._tcp.example.net. 86400 IN SRV 5 50 3478 server1.example.net.
_stun._tcp.example.net. 86400 IN SRV 10 30 3478 server2.example.net.
_stun._tcp.example.net. 86400 IN SRV 10 10 3478 server3.example.net.
_stun._tcp.example.net. 86400 IN SRV 10 10 3478 server4.example.net.
_stun._tcp.example.net. 86400 IN SRV 15 0 3478 backup.example.net.
_stun._udp.example.net. 86400 IN SRV 5 50 3478 server1.example.net.
_stun._udp.example.net. 86400 IN SRV 10 30 3478 server2.example.net.
_stun._udp.example.net. 86400 IN SRV 10 10 3478 server3.example.net.
_stun._udp.example.net. 86400 IN SRV 10 10 3478 server4.example.net.
_stun._udp.example.net. 86400 IN SRV 15 0 3478 backup.example.net.
_stuns._tcp.example.net. 86400 IN SRV 5 50 5349 server1.example.net.
_stuns._tcp.example.net. 86400 IN SRV 10 30 5349 server2.example.net.
_stuns._tcp.example.net. 86400 IN SRV 10 10 5349 server3.example.net.
_stuns._tcp.example.net. 86400 IN SRV 10 10 5349 server4.example.net.
_stuns._tcp.example.net. 86400 IN SRV 15 0 5349 backup.example.net.

The XMPP domain is example.net and the principal server is server1.example.net which used 50% after server2.example.net 30%, server3.example.net 10%, server4.example.net 10% too, if server1 is down, server2, server3 and server4 will work, if servers 1/2/3/4 are down, backup will work.

Retrieving STUN SRV records

$ dig SRV _stun._tcp.example.net
$ dig SRV _stun._udp.example.net
$ dig SRV _stuns._tcp.example.net

TURN SRV records

_turn._tcp.example.net. TTL IN SRV priority weight port target
_turn._udp.example.net. TTL IN SRV priority weight port target
_turns._tcp.example.net. TTL IN SRV priority weight port target

Example 1

_turn._tcp.example.net. 86400 IN SRV 5 0 3478 example.net.
_turn._udp.example.net. 86400 IN SRV 5 0 3478 example.net.
_turns._tcp.example.net. 86400 IN SRV 5 0 5349 example.net.

The TURN domain is example.net and the server is example.net.

Example 2

_turn._tcp.example.net. 86400 IN SRV 5 0 3478 server.example.net.
_turn._udp.example.net. 86400 IN SRV 5 0 3478 server.example.net.
_turns._tcp.example.net. 86400 IN SRV 5 0 5349 server.example.net.

The TURN domain is example.net and the server is server.example.net.

Example 3

_turn._tcp.example.net. 86400 IN SRV 5 50 3478 server1.example.net.
_turn._tcp.example.net. 86400 IN SRV 10 30 3478 server2.example.net.
_turn._tcp.example.net. 86400 IN SRV 10 10 3478 server3.example.net.
_turn._tcp.example.net. 86400 IN SRV 10 10 3478 server4.example.net.
_turn._tcp.example.net. 86400 IN SRV 15 0 3478 backup.example.net.
_turn._udp.example.net. 86400 IN SRV 5 50 3478 server1.example.net.
_turn._udp.example.net. 86400 IN SRV 10 30 3478 server2.example.net.
_turn._udp.example.net. 86400 IN SRV 10 10 3478 server3.example.net.
_turn._udp.example.net. 86400 IN SRV 10 10 3478 server4.example.net.
_turn._udp.example.net. 86400 IN SRV 15 0 3478 backup.example.net.
_turns._tcp.example.net. 86400 IN SRV 5 50 5349 server1.example.net.
_turns._tcp.example.net. 86400 IN SRV 10 30 5349 server2.example.net.
_turns._tcp.example.net. 86400 IN SRV 10 10 5349 server3.example.net.
_turns._tcp.example.net. 86400 IN SRV 10 10 5349 server4.example.net.
_turns._tcp.example.net. 86400 IN SRV 15 0 5349 backup.example.net.

The XMPP domain is example.net and the principal server is server1.example.net which used 50% after server2.example.net 30%, server3.example.net 10%, server4.example.net 10% too, if server1 is down, server2, server3 and server4 will work, if servers 1/2/3/4 are down, backup will work.

Retrieving TURN SRV records

$ dig SRV _turn._tcp.example.net
$ dig SRV _turn._udp.example.net
$ dig SRV _turns._tcp.example.net

External links