Skip to content

Instantly share code, notes, and snippets.

@Techwolf12
Created July 26, 2019 12:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save Techwolf12/267974b79e1995c132b96312519c0200 to your computer and use it in GitHub Desktop.
Save Techwolf12/267974b79e1995c132b96312519c0200 to your computer and use it in GitHub Desktop.
Generating IPv6 PTR records from a Bind9 zonefile using Bash

Generating IPv6 PTR records from a Bind9 Zonefile using Bash.

The following script takes a Bind9 zonefile, gets all AAAA records from it and generated PTR records based on them.

What you need to do:

  1. Edit the Zone header in the script.
  2. Run the script with ./generate_v6_ptr.sh /path/to/zonefile.zone

This will output the zones on STDOUT. If you want to save this to a zonefile, you can use this example: ./generate_v6_ptr.sh /path/to/zonefile.zone > /etc/bind/ip6.arpa.zone

#!/bin/bash
read -r -d '' ZONEHEADER <<- EOM
$TTL 1h ; Default TTL
@ IN SOA <NAMESERVER 1>. <ABUSE EMAIL>. (
2019071201 ; serial
1h ; slave refresh interval
15m ; slave retry interval
1w ; slave copy expire time
1h ; NXDOMAIN cache time
)
;
; domain name servers
;
@ IN NS <NAMESERVER 1>.
@ IN NS <NAMESERVER 2>.
; IPv6 PTR entries
EOM
# Script:
function reverseIp6 {
echo "$1" | awk -F: 'BEGIN {OFS=""; }{addCount = 9 - NF; for(i=1; i<=NF;i++){if(length($i) == 0){ for(j=1;j<=addCount;j++){$i = ($i "0000");} } else { $i = substr(("0000" $i), length($i)+5-4);}}; print}' | rev | sed -e "s/./&./g"
}
if [ -z "$1" ]
then
echo "Usage: $0 <zonefile>"
exit 1
fi
RECORD=(`cat $1 | grep AAAA | awk -v'OFS=,' '$2 == "IN" {print $4}'`)
HOST=(`cat $1 | grep AAAA | awk -v'OFS=,' '$2 == "IN" {print $1}'`)
echo "$ZONEHEADER"
for (( i=0; i<${#RECORD[@]}; i++ )); do
echo "$(reverseIp6 ${RECORD[i]})ip6.arpa. IN PTR ${HOST[i]}";
done
@alsyundawy
Copy link

if i have /64 will generate too in same times?

@Techwolf12
Copy link
Author

@alsyundawy It converts AAAA records in a bind9 DNS file to PTR records with the same domain name, so you can't do a /64 at once with this script. What do you want to do? Create a default PTR for a entire /64 block?

@alsyundawy
Copy link

yes becouse i have /48

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment