Restrict published IPv6 addresses to ULA range
Only return AAAA/glue records within fc00::/7, filtering out public IPv6 addresses in addition to link-local ones.
This commit is contained in:
@@ -14,6 +14,7 @@ domain = sys.argv[1]
|
|||||||
port = int(sys.argv[2])
|
port = int(sys.argv[2])
|
||||||
ttl = 120
|
ttl = 120
|
||||||
timeout = 2
|
timeout = 2
|
||||||
|
ipv6_ula_network = ipaddress.ip_network('fc00::/7')
|
||||||
|
|
||||||
class DynamicResolver(object):
|
class DynamicResolver(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -91,14 +92,16 @@ class DynamicResolver(object):
|
|||||||
)) for addr in info.ip_addresses_by_version(IPVersion.V4Only)]
|
)) for addr in info.ip_addresses_by_version(IPVersion.V4Only)]
|
||||||
additional += [dns.RRHeader(name=target, ttl=ttl, type=dns.AAAA, payload=dns.Record_AAAA(
|
additional += [dns.RRHeader(name=target, ttl=ttl, type=dns.AAAA, payload=dns.Record_AAAA(
|
||||||
str(addr)
|
str(addr)
|
||||||
)) for addr in info.ip_addresses_by_version(IPVersion.V6Only) if not addr.is_link_local]
|
)) for addr in info.ip_addresses_by_version(IPVersion.V6Only) if addr in ipv6_ula_network]
|
||||||
return answers, [], additional
|
return answers, [], additional
|
||||||
|
|
||||||
def host(localname, qtype):
|
def host(localname, qtype):
|
||||||
if qtype == dns.AAAA:
|
if qtype == dns.AAAA:
|
||||||
mdns_type, addr_len, parse_addr = _TYPE_AAAA, 16, ipaddress.IPv6Address
|
mdns_type, addr_len, parse_addr = _TYPE_AAAA, 16, ipaddress.IPv6Address
|
||||||
|
keep_addr = lambda addr: addr in ipv6_ula_network
|
||||||
else:
|
else:
|
||||||
mdns_type, addr_len, parse_addr = _TYPE_A, 4, ipaddress.IPv4Address
|
mdns_type, addr_len, parse_addr = _TYPE_A, 4, ipaddress.IPv4Address
|
||||||
|
keep_addr = lambda addr: not addr.is_link_local
|
||||||
|
|
||||||
class listener(RecordUpdateListener):
|
class listener(RecordUpdateListener):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -107,7 +110,7 @@ class DynamicResolver(object):
|
|||||||
def update_record(self, zc, now, record):
|
def update_record(self, zc, now, record):
|
||||||
if record.type == mdns_type and len(record.address) == addr_len:
|
if record.type == mdns_type and len(record.address) == addr_len:
|
||||||
addr = parse_addr(record.address)
|
addr = parse_addr(record.address)
|
||||||
if not addr.is_link_local:
|
if keep_addr(addr):
|
||||||
self.addrs.append(str(addr))
|
self.addrs.append(str(addr))
|
||||||
|
|
||||||
l = listener()
|
l = listener()
|
||||||
|
|||||||
Reference in New Issue
Block a user