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])
|
||||
ttl = 120
|
||||
timeout = 2
|
||||
ipv6_ula_network = ipaddress.ip_network('fc00::/7')
|
||||
|
||||
class DynamicResolver(object):
|
||||
def __init__(self):
|
||||
@@ -91,14 +92,16 @@ class DynamicResolver(object):
|
||||
)) for addr in info.ip_addresses_by_version(IPVersion.V4Only)]
|
||||
additional += [dns.RRHeader(name=target, ttl=ttl, type=dns.AAAA, payload=dns.Record_AAAA(
|
||||
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
|
||||
|
||||
def host(localname, qtype):
|
||||
if qtype == dns.AAAA:
|
||||
mdns_type, addr_len, parse_addr = _TYPE_AAAA, 16, ipaddress.IPv6Address
|
||||
keep_addr = lambda addr: addr in ipv6_ula_network
|
||||
else:
|
||||
mdns_type, addr_len, parse_addr = _TYPE_A, 4, ipaddress.IPv4Address
|
||||
keep_addr = lambda addr: not addr.is_link_local
|
||||
|
||||
class listener(RecordUpdateListener):
|
||||
def __init__(self):
|
||||
@@ -107,7 +110,7 @@ class DynamicResolver(object):
|
||||
def update_record(self, zc, now, record):
|
||||
if record.type == mdns_type and len(record.address) == addr_len:
|
||||
addr = parse_addr(record.address)
|
||||
if not addr.is_link_local:
|
||||
if keep_addr(addr):
|
||||
self.addrs.append(str(addr))
|
||||
|
||||
l = listener()
|
||||
|
||||
Reference in New Issue
Block a user