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:
2026-08-05 10:44:51 +02:00
parent 0fa23ae378
commit 006f2cfa89
+5 -2
View File
@@ -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()