aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-06-07 13:40:00 +0100
committerLexi Winter <lexi@le-fay.org>2025-06-07 13:40:00 +0100
commitcbc2f2d912f37401960801775c554ba3536ce17a (patch)
treeea560bae1c7cb2557a2c9d108de2f1b36f67966c
parent9661cef231fd1859f02c87d9766f2a33f998b8dd (diff)
downloaddns-cbc2f2d912f37401960801775c554ba3536ce17a.tar.gz
dns-cbc2f2d912f37401960801775c554ba3536ce17a.tar.bz2
handle IPv6 reverse better
-rwxr-xr-xbin/process46
-rw-r--r--zones/5.b.a.a.0.b.8.0.1.0.0.2.ip6.arpa.zone.erb54
-rw-r--r--zones/le-fay.org.zone.erb43
3 files changed, 88 insertions, 55 deletions
diff --git a/bin/process b/bin/process
index e95dbb9..4effb17 100755
--- a/bin/process
+++ b/bin/process
@@ -3,13 +3,55 @@
require 'erb'
require 'optparse'
+def v6rev(input)
+ # Parse the input to separate address and netmask
+ address, netmask = input.split('/')
+ netmask = netmask.to_i
+
+ # Calculate how many bits we actually have (128 - missing bits)
+ remaining_bits = 128 - netmask
+ remaining_groups = remaining_bits / 16
+
+ # Expand the partial address within the context of just the remaining bits
+ expanded_suffix = expand_ipv6_suffix(address, remaining_groups)
+
+ # Convert to hex string and get nibbles
+ hex_string = expanded_suffix.gsub(':', '')
+
+ # Split into individual nibbles and reverse for PTR format
+ nibbles = hex_string.chars.reverse
+
+ # Join with dots
+ nibbles.join('.')
+end
+
+def expand_ipv6_suffix(address, total_groups)
+ # Handle :: expansion within the context of just our suffix
+ if address.include?('::')
+ parts = address.split('::')
+ left_parts = parts[0].empty? ? [] : parts[0].split(':')
+ right_parts = parts[1].empty? ? [] : parts[1].split(':')
+
+ # Calculate how many zero groups we need
+ missing_groups = total_groups - left_parts.length - right_parts.length
+ zero_groups = ['0000'] * missing_groups
+
+ all_parts = left_parts + zero_groups + right_parts
+ else
+ all_parts = address.split(':')
+ end
+
+ # Pad each part to 4 digits
+ all_parts.map { |part| part.rjust(4, '0') }.join(':')
+end
+
# Hash to store our -D variables
template_vars = {}
# Parse command line options
OptionParser.new do |opts|
opts.banner = "Usage: #{$0} [options] <input> <output>"
-
+
opts.on('-DVAR=VALUE', 'Define template variable') do |definition|
var, value = definition.split('=', 2)
if var && value
@@ -19,7 +61,7 @@ OptionParser.new do |opts|
exit 1
end
end
-
+
opts.on('-h', '--help', 'Show this help') do
puts opts
exit
diff --git a/zones/5.b.a.a.0.b.8.0.1.0.0.2.ip6.arpa.zone.erb b/zones/5.b.a.a.0.b.8.0.1.0.0.2.ip6.arpa.zone.erb
index c6f59a9..717763c 100644
--- a/zones/5.b.a.a.0.b.8.0.1.0.0.2.ip6.arpa.zone.erb
+++ b/zones/5.b.a.a.0.b.8.0.1.0.0.2.ip6.arpa.zone.erb
@@ -1,4 +1,4 @@
-; vim:set ft=eruby.bindzone sw=8 ts=8 sts=8:
+; vim:set ft=eruby.bindzone sw=8 ts=8 sts=8 noet:
$TTL <%= ttl %>
$ORIGIN <%= zone %>.
@@ -19,40 +19,36 @@ $ORIGIN <%= zone %>.
TXT "v=spf1 -all"
; willow
-8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.0 PTR willow.eden.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0 PTR ng0.willow.eden.le-fay.org.
-0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0 PTR nat-out-v6-willow.inet.le-fay.org.
-e.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.0 PTR willow.eden.le-fay.org.
-2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.3 PTR ix0-3004.willow.eden.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E PTR wg0.willow.eden.le-fay.org.
+<%= v6rev('4::8/48') %> PTR willow.eden.le-fay.org.
+<%= v6rev('1::1/48') %> PTR ng0.willow.eden.le-fay.org.
+<%= v6rev('3004::2/48') %> PTR ix0-3004.willow.eden.le-fay.org.
; Hosts
-3.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR witch.le-fay.org.
-4.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR turnera.eden.le-fay.org.
-5.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR hemlock.eden.le-fay.org.
-0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.1.0.4.c PTR ilythia.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.1.0.4.c PTR ragweed.le-fay.org.
-9.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.0 PTR fuchsia.eden.le-fay.org.
-6.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR freebsd15.eden.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0 PTR uk-aai-1.le-fay.org.
+<%= v6rev('4::9/48') %> PTR fuchsia.eden.le-fay.org.
+<%= v6rev('100::1/48') %> PTR uk-aai-1.le-fay.org.
+<%= v6rev('c401::1:3/48') %> PTR witch.le-fay.org.
+<%= v6rev('c401::1:4/48') %> PTR turnera.eden.le-fay.org.
+<%= v6rev('c401::1:5/48') %> PTR hemlock.eden.le-fay.org.
+<%= v6rev('c401::1:6/48') %> PTR freebsd15.eden.le-fay.org.
+<%= v6rev('c401:1::1/48') %> PTR ragweed.le-fay.org.
+<%= v6rev('c401:1::2/48') %> PTR ilythia.le-fay.org.
; Network devices
-7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.0 PTR core-1.inet.eden.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR vlan401.core-1.inet.eden.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.4.c PTR vlan402.core-1.inet.eden.le-fay.org.
-1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.3 PTR te1.core-1.inet.eden.le-fay.org.
-7.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR core-2.inet.eden.le-fay.org.
-8.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR core-3.inet.eden.le-fay.org.
-9.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR core-4.inet.eden.le-fay.org.
-1.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR eden-access-1.le-fay.org.
-2.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR eden-access-2.le-fay.org.
-3.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR eden-access-3.le-fay.org.
-4.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR eden-access-4.le-fay.org.
-5.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR eden-access-5.le-fay.org.
-6.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.1.0.4.c PTR eden-access-6.le-fay.org.
+<%= v6rev('4::7/48') %> PTR eden-core-1.le-fay.org.
+<%= v6rev('c401::1/48') %> PTR vl401.eden-core-1.le-fay.org.
+<%= v6rev('c402::1/48') %> PTR vl402.eden-core-1.le-fay.org.
+<%= v6rev('3004::1/48') %> PTR te1.eden-core-1.le-fay.org.
+<%= v6rev('c401::2:7/48') %> PTR eden-core-2.le-fay.org.
+<%= v6rev('c401::2:8/48') %> PTR eden-core-3.le-fay.org.
+<%= v6rev('c401::2:9/48') %> PTR eden-core-4.le-fay.org.
+<%= v6rev('c401::2:1/48') %> PTR eden-access-1.le-fay.org.
+<%= v6rev('c401::2:2/48') %> PTR eden-access-2.le-fay.org.
+<%= v6rev('c401::2:3/48') %> PTR eden-access-3.le-fay.org.
+<%= v6rev('c401::2:4/48') %> PTR eden-access-4.le-fay.org.
+<%= v6rev('c401::2:5/48') %> PTR eden-access-5.le-fay.org.
+<%= v6rev('c401::2:6/48') %> PTR eden-access-6.le-fay.org.
; Misc
-5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.0.0.0 PTR c1.i.lfns.org.uk.
0.5.0.0.0.0.0.0.0.0.0.0.3.0.0.0.6.0.1.0 PTR eris.lethe.sikol.co.uk.
1.5.0.0.0.0.0.0.0.0.0.0.3.0.0.0.6.0.1.0 PTR charon.lethe.sikol.co.uk.
2.5.0.0.0.0.0.0.0.0.0.0.3.0.0.0.6.0.1.0 PTR tartarus.lethe.sikol.co.uk.
diff --git a/zones/le-fay.org.zone.erb b/zones/le-fay.org.zone.erb
index 2dca45b..a827a9f 100644
--- a/zones/le-fay.org.zone.erb
+++ b/zones/le-fay.org.zone.erb
@@ -136,30 +136,25 @@ ng0.willow.eden A 81.187.47.192
; Network devices
-core-1.inet.eden AAAA 2001:8b0:aab5:4::7
- A 81.187.47.197
-te1.core-1.inet.eden AAAA 2001:8b0:aab5:3004::1
- A 81.187.47.206
-vlan401.core-1.inet.eden AAAA 2001:8b0:aab5:c401::1
- A 81.2.96.161
-vlan402.core-1.inet.eden AAAA 2001:8b0:aab5:c402::1
- A 198.18.0.1
-core-2.inet.eden AAAA 2001:8b0:aab5:c401::2:7
-core-3.inet.eden AAAA 2001:8b0:aab5:c401::2:8
-core-4.inet.eden AAAA 2001:8b0:aab5:c401::2:9
-eden-core-1 AAAA 2001:8b0:aab5:4::7
- A 81.187.47.197
-eden-core-2 AAAA 2001:8b0:aab5:c401::2:7
-eden-core-3 AAAA 2001:8b0:aab5:c401::2:8
-eden-core-4 AAAA 2001:8b0:aab5:c401::2:9
-eden-access-1 AAAA 2001:8b0:aab5:c401::2:1
-eden-access-2 AAAA 2001:8b0:aab5:c401::2:2
-eden-access-3 AAAA 2001:8b0:aab5:c401::2:3
-eden-access-4 AAAA 2001:8b0:aab5:c401::2:4
-eden-access-5 AAAA 2001:8b0:aab5:c401::2:5
-eden-access-6 AAAA 2001:8b0:aab5:c401::2:6
-outlet-hemlock.iot.eden A 172.20.193.1
-outlet-rack.iot.eden A 172.20.193.2
+eden-core-1 AAAA 2001:8b0:aab5:4::7
+ A 81.187.47.197
+te1.eden-core-1 AAAA 2001:8b0:aab5:3004::1
+ A 81.187.47.206
+vl401.eden-core-1 AAAA 2001:8b0:aab5:c401::1
+ A 81.2.96.161
+vl402.eden-core-1 AAAA 2001:8b0:aab5:c402::1
+ A 198.18.0.1
+eden-core-2 AAAA 2001:8b0:aab5:c401::2:7
+eden-core-3 AAAA 2001:8b0:aab5:c401::2:8
+eden-core-4 AAAA 2001:8b0:aab5:c401::2:9
+eden-access-1 AAAA 2001:8b0:aab5:c401::2:1
+eden-access-2 AAAA 2001:8b0:aab5:c401::2:2
+eden-access-3 AAAA 2001:8b0:aab5:c401::2:3
+eden-access-4 AAAA 2001:8b0:aab5:c401::2:4
+eden-access-5 AAAA 2001:8b0:aab5:c401::2:5
+eden-access-6 AAAA 2001:8b0:aab5:c401::2:6
+outlet-hemlock.iot.eden A 172.20.193.1
+outlet-rack.iot.eden A 172.20.193.2
; Miscellaneous
vpn-in-1.eden AAAA 2001:8b0:aab5:1::1