├── .gitignore ├── README.md ├── journal ├── root.jnl.gz.00 ├── root.jnl.gz.01 ├── root.jnl.gz.02 ├── root.jnl.gz.03 ├── root.jnl.gz.04 ├── root.jnl.gz.05 ├── root.jnl.gz.06 ├── root.jnl.gz.07 ├── root.jnl.gz.08 ├── root.jnl.gz.09 ├── root.jnl.gz.10 ├── root.jnl.gz.11 ├── root.jnl.gz.12 ├── root.jnl.gz.13 └── root.jnl.gz.14 ├── root └── summarize ├── LICENSE ├── ds-only ├── gitattributes ├── gitconfig ├── no-rrsig-q ├── no-rrsig-slow ├── ns-only ├── root-servers-only └── soa-only /.gitignore: -------------------------------------------------------------------------------- 1 | .gitattributes 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Archive of the DNS root zone 2 | ============================ 3 | 4 | This repository is generated by a cron job which frequently obtains a 5 | zone transfer of the DNS root zone, commits any changes, and pushes to 6 | GitHub. 7 | 8 | The archive dates back to 2014-03-05. There are known to be gaps 9 | caused by failures in the cron job. (This archive is a low-effort side 10 | project.) 11 | 12 | 13 | repository size 14 | --------------- 15 | 16 | *Warning: this repository is multiple gigabytes in size.* 17 | 18 | This repository is so big because most of the changes to the root zone 19 | are updated RRSIG records, containing cryptographic data that does not 20 | compress well. 21 | 22 | 23 | corruption 24 | ---------- 25 | 26 | Known corrupt copies of the root zone: 27 | 28 | Commit: 0d0f47e3c052cbc09483318c8b1a337c861dbd7d 29 | Date: 2014-09-05 12:33:05 +0100 30 | 31 | 32 | old journal 33 | ----------- 34 | 35 | The `journal` subdirectory contains an archived BIND journal file 36 | split into pieces. To re-create the file, run the command: 37 | 38 | cat journal/* | zcat -d > root.jnl 39 | 40 | You can use `named-journalprint root.jnl` to examine its contents. 41 | This file contains incremental updates to the root zone covering 42 | serial numbers between 2005072701 and 2014030500. There is [a small 43 | unlucky gap][gap] between the end of the journal and the start of the 44 | main archive. 45 | 46 | [gap]: https://lists.dns-oarc.net/pipermail/dns-operations/2019-December/019536.html 47 | 48 | Many thanks to [David Malone][dwmal1] for providing this journal. 49 | 50 | [dwmal1]: https://www.maths.tcd.ie/~dwmalone/ 51 | 52 | 53 | summarize git log 54 | ----------------- 55 | 56 | The `summarize` subdirectory contains some helper scripts for 57 | selecting which parts of the root zone are shown in `git log --patch`. 58 | Most of the changes to the root zone are to refresh RRSIG records, 59 | which is not very interesting. 60 | 61 | The `summarize/gitconfig` file can be appended to your `.git/config` 62 | file to get it set up. This must be done manually because the 63 | `textconv` option runs scripts and git won't let a repository auto-run 64 | scripts. 65 | 66 | The `summarize/gitattributes` file is an example that can be copied to 67 | `.gitattributes` and edited to choose which records you want to see in 68 | diffs. The default in the example `gitattributes` file ignores 69 | RRSIG records. 70 | 71 | 72 | related work 73 | ------------ 74 | 75 | This `saveroot` repository is a companion to [@diffroot on Twitter][diffroot]. 76 | The `diffroot` bot uses [nsdiff][] to tweet summaries of how the root 77 | zone changes. 78 | 79 | The scripts for updating this `saveroot` repository live alongside 80 | `diffroot`, which is currently not fit for public consumption because 81 | the repository contains secrets. 82 | 83 | [diffroot]: https://twitter.com/diffroot 84 | 85 | [nsdiff]: https://dotat.at/prog/nsdiff/ 86 | 87 | 88 | about the root zone 89 | ------------------- 90 | 91 | [IANA's root zone management page][iana] has more information about 92 | how the DNS root zone is changed. 93 | 94 | [iana]: https://www.iana.org/domains/root 95 | 96 | 97 | license 98 | ------- 99 | 100 | The scripts in the summarize directory are released under the 0BSD license. 101 | 102 | I do not know the exact copyright status of the root zone itself. 103 | 104 | 105 | future work 106 | ----------- 107 | 108 | It would be cool to: 109 | 110 | * Reconstruct old root zones from the journal. This covers the 111 | period when the zone was signed in 2010. 112 | 113 | * Write analysis scripts to extract a log of changes per TLD. 114 | 115 | * Publish a less enormous version of this repository that excludes 116 | RRSIG records. 117 | 118 | 119 | feedback 120 | -------- 121 | 122 | Please send comments / suggestions / contributions to me by email. 123 | 124 | > Tony Finch 125 | > University of Cambridge 126 | -------------------------------------------------------------------------------- /journal/root.jnl.gz.00: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.00 -------------------------------------------------------------------------------- /journal/root.jnl.gz.01: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.01 -------------------------------------------------------------------------------- /journal/root.jnl.gz.02: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.02 -------------------------------------------------------------------------------- /journal/root.jnl.gz.03: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.03 -------------------------------------------------------------------------------- /journal/root.jnl.gz.04: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.04 -------------------------------------------------------------------------------- /journal/root.jnl.gz.05: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.05 -------------------------------------------------------------------------------- /journal/root.jnl.gz.06: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.06 -------------------------------------------------------------------------------- /journal/root.jnl.gz.07: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.07 -------------------------------------------------------------------------------- /journal/root.jnl.gz.08: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.08 -------------------------------------------------------------------------------- /journal/root.jnl.gz.09: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.09 -------------------------------------------------------------------------------- /journal/root.jnl.gz.10: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.10 -------------------------------------------------------------------------------- /journal/root.jnl.gz.11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.11 -------------------------------------------------------------------------------- /journal/root.jnl.gz.12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.12 -------------------------------------------------------------------------------- /journal/root.jnl.gz.13: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.13 -------------------------------------------------------------------------------- /journal/root.jnl.gz.14: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanf2/saveroot/bda1b455c6f3e53cf7890b8e2c8b190c423c83c7/journal/root.jnl.gz.14 -------------------------------------------------------------------------------- /summarize/LICENSE: -------------------------------------------------------------------------------- 1 | Written by Tony Finch 2 | at Cambridge University Information Services 3 | 4 | Permission to use, copy, modify, and/or distribute this software for 5 | any purpose with or without fee is hereby granted. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 8 | WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 9 | WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 10 | AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 11 | DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 12 | PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 13 | TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 | PERFORMANCE OF THIS SOFTWARE. 15 | -------------------------------------------------------------------------------- /summarize/ds-only: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | grep -P '\s+IN\s+DS\s+' "$@" 3 | -------------------------------------------------------------------------------- /summarize/gitattributes: -------------------------------------------------------------------------------- 1 | root diff=no-rrsig-q 2 | -------------------------------------------------------------------------------- /summarize/gitconfig: -------------------------------------------------------------------------------- 1 | [diff "no-rrsig-slow"] 2 | textconv = summarize/no-rrsig-slow 3 | binary = true 4 | [diff "no-rrsig-q"] 5 | textconv = summarize/no-rrsig-q 6 | binary = true 7 | [diff "soa-only"] 8 | textconv = summarize/soa-only 9 | binary = true 10 | [diff "ds-only"] 11 | textconv = summarize/ds-only 12 | binary = true 13 | [diff "ns-only"] 14 | textconv = summarize/ns-only 15 | binary = true 16 | [diff "root-servers-only"] 17 | textconv = summarize/root-servers-only 18 | binary = true 19 | -------------------------------------------------------------------------------- /summarize/no-rrsig-q: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | grep -v RRSIG "$@" 3 | -------------------------------------------------------------------------------- /summarize/no-rrsig-slow: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | grep -v RRSIG "$@" | named-compilezone -i local -k warn -n warn -o - . /dev/stdin 2>/dev/null 3 | -------------------------------------------------------------------------------- /summarize/ns-only: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | grep -P '\s+IN\s+NS\s+' "$@" 3 | -------------------------------------------------------------------------------- /summarize/root-servers-only: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | grep '^..root-servers' "$@" 3 | -------------------------------------------------------------------------------- /summarize/soa-only: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | grep -P '\s+IN\s+SOA\s+' "$@" | sort -u 3 | --------------------------------------------------------------------------------