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]) 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()