DNS

DNS

Warning

Work in progress.

Automated hiearchy

There are four levels.

Connectivity:

Level Name Peer Parent
1 Client None dns_l2_cluster
2 Caching Server ? asn
3 AS Server ? root
4 Root None None

Records:

Level Responsibility o
1 None
2 Caching for clients
3 Authoritative for dns_l2_cluster
4 Root - announces relevant l3

dns_l2_cluster is PoP if set, if not is asn

#TODO: allow levels to be selected:

Levels Meaning
1 NA
2 clients (1) connect to root (2)
3 clients (1) connect to as (3), as to root (4)
4 full, as above
AutoNetkit.algorithms.dns.allocate_dns_servers(network)[source]

Allocates DNS according to rules defined above

TODO: allow 3 level (ie no pop caching, clients connect to AS server) TODO: make DNS servers standalone rather that co-hosted with router

TODO: note set dns level on dns graph, but ibgp level on physical graph - inconsistent!

AutoNetkit.algorithms.dns.dns_servers(network)[source]

Servers that have DNS level > 1

AutoNetkit.algorithms.dns.dns_auth_servers(network)[source]

Servers that have auth children

AutoNetkit.algorithms.dns.dns_clients(network)[source]

Devices that have DNS level == 1

AutoNetkit.algorithms.dns.reverse_subnet(ip, prefixlen)[source]

Returns reverse address for given IP Address

  • w.x.y.z/prefixlen
  • prefixlen >= 24 -> return z
  • 24 >= prefixlen >= 16 -> return z.y
  • 16 >= prefixlen >= 8 -> return z.y.w
  • 8 >= prefixlen -> return z.y.x.w
>>> reverse_subnet(IPAddress("10.0.0.22"), 16)
'22.0'
>>> reverse_subnet(IPAddress("10.0.0.21"), 16)
'21.0'
>>> reverse_subnet(IPAddress("10.0.0.129"), 16)
'129.0'
>>> reverse_subnet(IPAddress("1.2.3.4"), 5)
'4.3.2.1'
>>> reverse_subnet(IPAddress("1.2.3.4"), 15)
'4.3.2'
>>> reverse_subnet(IPAddress("1.2.3.4"), 20)
'4.3'
>>> reverse_subnet(IPAddress("1.2.3.4"), 26)
'4'
AutoNetkit.algorithms.dns.rev_dns_identifier(subnet)[source]

Returns Identifier part of subnet for use in reverse dns identification.

>>> rev_dns_identifier(IPNetwork("10.1.2.3/8"))
'0.0.10.in-addr.arpa.'
>>> rev_dns_identifier(IPNetwork("172.16.1.2/16"))
'16.172.in-addr.arpa.'
>>> rev_dns_identifier(IPNetwork("192.168.0.1/24"))
'0.0.168.192.in-addr.arpa.'

Can only handle classful addreses, expect nothing if prefixlen is not divisible by 8 >>> rev_dns_identifier(IPNetwork(“192.168.0.1/22”))