- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI) - Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend - Dockerfile.gui: Astro static build served via nginx - docker-compose.yml: backend (internal) + frontend (port 5353) - nginx.conf: root redirects to /es/, /api/ proxied to backend - zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
247 lines
8.8 KiB
Markdown
247 lines
8.8 KiB
Markdown
# Test Zone Data
|
||
|
||
## Table of contents
|
||
|
||
* [Introduction](#introduction)
|
||
* [Installing mandatory parts](#installing-mandatory-parts)
|
||
* [Installing Bind](#installing-bind)
|
||
* [Updating and installing Perl DNS libraries](#updating-and-installing-perl-dns-libraries)
|
||
* [Running instructions](#running-instructions)
|
||
* [Start coredns in terminal 1](#start-coredns-in-terminal-1)
|
||
* [Run zonemaster-cli in terminal 2](#run-zonemaster-cli-in-terminal-2)
|
||
* [Run unit tests in terminal 2](#run-unit-tests-in-terminal-2)
|
||
* [Running Bind](#running-bind)
|
||
* [Files](#files)
|
||
* [Directories](#directories)
|
||
* [Resources](#resources)
|
||
* [Test case based test zones](#test-case-based-test-zones)
|
||
* [Other test zones](#other-test-zones)
|
||
|
||
|
||
## Introduction
|
||
|
||
When loading `coredns` configuration the [test-zone-data] directory should be
|
||
the working directory, else it will not find all included data files. That
|
||
directory structure holds directories with zone files and `coredns` configurations
|
||
for the test zone scenarios.
|
||
|
||
|
||
## Installing mandatory parts
|
||
|
||
1. Only Ubuntu 22.04 is supported.
|
||
2. Install Zonemaster-CLI on the computer. Install current develop branch or the
|
||
latest version of Zonemaster (it will not work with older version than v2022.2,
|
||
first version with support for `--hint`).
|
||
3. Clone this repository or copy its contents to the computer.
|
||
4. Install `go` (here version 1.20 is assumed):
|
||
```
|
||
sudo apt install golang-go
|
||
```
|
||
5. Install `unbound`
|
||
```
|
||
sudo apt install libunbound-dev
|
||
```
|
||
6. Install `coredns`:
|
||
1. Reference https://github.com/coredns/coredns
|
||
2. Clone `coredns`:
|
||
```
|
||
git clone https://github.com/coredns/coredns
|
||
cd coredns
|
||
```
|
||
3. Add the line "unbound:github.com/coredns/unbound" to the plugin.cfg file
|
||
found in the top of the repository, e.g.
|
||
```
|
||
echo "unbound:github.com/coredns/unbound" >> plugin.cfg
|
||
```
|
||
4. Add support for CHAOS class in more plugins. In
|
||
`coredns/core/dnsserver/server.go` find `EnableChaos` at the end of the
|
||
file. Add "template" and "acl" to the plugins that accepts CHAOS class. For
|
||
reference see https://github.com/coredns/coredns/discussions/6373
|
||
5. Generate and compile
|
||
```
|
||
go get github.com/coredns/unbound
|
||
go generate
|
||
CGO_ENABLED=1 make
|
||
```
|
||
6. `coredns` is now in top of repository. Add it to PATH and repeat this step
|
||
every time `coredns` is recompiled (or create a symlink instead).
|
||
```
|
||
sudo cp coredns /usr/local/bin/
|
||
```
|
||
|
||
## Installing Bind
|
||
|
||
This step can be skipped unless you will create or update DNS record with
|
||
the help of Bind, e.g. for test zones for scenarios for DNSSEC10.
|
||
```
|
||
sudo apt install bind9
|
||
```
|
||
Make sure Bind is off and will not automatically start after restart.
|
||
```
|
||
sudo systemctl stop named
|
||
sudo systemctl disable named
|
||
```
|
||
We will need to start named with configuration files in different locations
|
||
so `apparmor` must be disabled for named. The change is permanent.
|
||
```
|
||
sudo ln -s /etc/apparmor.d/usr.sbin.named /etc/apparmor.d/disable/
|
||
sudo apparmor_parser -R /etc/apparmor.d/disable/usr.sbin.named
|
||
```
|
||
|
||
## Updating and installing Perl DNS libraries
|
||
|
||
Utilities for DNSSEC handling at test zone creation for some test
|
||
cases, e.g. DNSSEC10, require updated Net::DNS and installed
|
||
Net::DNS::SEC. This update and installation, respectively, is not
|
||
needed unless the scripts are to be run. See [utils/] for the scripts
|
||
requiring these libraries.
|
||
```
|
||
sudo cpanm -i Net::DNS
|
||
sudo cpanm -i Net::DNS::SEC
|
||
```
|
||
|
||
## Running instructions
|
||
|
||
Two terminal windows to the computer are needed.
|
||
|
||
### Start coredns in terminal 1
|
||
|
||
1. Change to the [test-zone-data] directory (where this README file is).
|
||
2. If new IP addresses have been taken into use, [address-plan.md] must be
|
||
updated.
|
||
3. Create all virtual interfaces. This step has to be done once for each session
|
||
or again if additional interfaces have been added. (Reboot the computer to
|
||
remove the interfaces, if needed.)
|
||
```
|
||
sudo ./set-ip.sh
|
||
```
|
||
4. Start `coredns`. It will use `main.cfg` and be running in the foreground
|
||
until terminated. Only one instance can run at a time.
|
||
```
|
||
sudo ./start-coredns.sh
|
||
```
|
||
|
||
### Run zonemaster-cli in terminal 2
|
||
|
||
1. Change directory to where this README file is.
|
||
2. Use `zonemaster-cli` with `--hint` and the appropriate name.root hint file.
|
||
Example:
|
||
```
|
||
zonemaster-cli UNEXPECTED-RCODE-MX.zone09.xa --raw --test Zone/zone09 --hints COMMON/hintfile --level info
|
||
```
|
||
with output
|
||
```
|
||
0.00 INFO GLOBAL_VERSION version=v4.5.1
|
||
0.07 WARNING Z09_UNEXPECTED_RCODE_MX ns_ip_list=ARRAY(0x5638fec55130); rcode=NOTIMPL
|
||
0.07 NOTICE Z09_MISSING_MAIL_TARGET
|
||
```
|
||
|
||
For more examples and information on how to interpret the example above, go to
|
||
section “[Directories](#directories)” below, find the test module, then the test
|
||
case within the module, and read the test case’s README file.
|
||
|
||
### Run unit tests in terminal 2
|
||
|
||
Unit tests based on these test zones for [Zonemaster-Engine] can now be run
|
||
in terminal 2 and the data can be recorded and saved as data files. See the
|
||
[t] directory in [Zonemaster-Engine] for more details.
|
||
|
||
### Running Bind
|
||
For the test zones for some scenarios DNS records are created by Bind, e.g.
|
||
DNSSEC10. For more information see the [Bind README][README-Bind.md].
|
||
|
||
## Files
|
||
|
||
The following files are found in [this directory](.), i.e. the same directory as
|
||
this README file.
|
||
|
||
* [address-plan.md]
|
||
* A document that explains the IP plan and that also contains the
|
||
IP plan in a markdown table.
|
||
* [main.cfg]
|
||
* The default main `coredns` configuration file that includes all
|
||
other data files.
|
||
* [README-Bind.md]
|
||
* Instructions for running `Bind`.
|
||
* [set-ip.sh]
|
||
* A script to populate the loopback based on the content of
|
||
[address-plan.md].
|
||
* [start-coredns.sh]
|
||
* A script to start CoreDNS correctly.
|
||
|
||
More files are found in the directories below.
|
||
|
||
|
||
## Directories
|
||
|
||
The following directories are found in [this directory][test-zone-data], i.e.
|
||
the same directory as this README file. More files and sub-directories are found
|
||
in those directories.
|
||
|
||
### Resources
|
||
|
||
Directories not holding direct test zone data, but resources for the test zone
|
||
data.
|
||
|
||
* [COMMON/]
|
||
* Holds zone files and configuration that are shared between several scenarios
|
||
for different test cases.
|
||
|
||
* [utils/]
|
||
* Holds utility scripts for test zone construction, e.g. DNSSEC10 test zones.
|
||
|
||
### Test case based test zones
|
||
|
||
* [Address-TP/]
|
||
* Directory structure for scenarios for test cases in the Address-TP test module.
|
||
* [Basic-TP/]
|
||
* Directory structure for scenarios for test cases in the Basic-TP test module.
|
||
* Connectivity-TP/ (*not yet available*)
|
||
* Directory structure for scenarios for test cases in the Connectivity-TP test
|
||
module.
|
||
* [Consistency-TP/]
|
||
* Directory structure for scenarios for test cases in the Consistency-TP test
|
||
module.
|
||
* [DNSSEC-TP/]
|
||
* Directory structure for scenarios for test cases in the DNSSEC-TP test
|
||
module.
|
||
* Delegation-TP/ (*not yet available*)
|
||
* Directory structure for scenarios for test cases in the Delegation-TP test
|
||
module.
|
||
* [Nameserver-TP/]
|
||
* Directory structure for scenarios for test cases in the Nameserver-TP test
|
||
module.
|
||
* Syntax-TP/ (*not yet available*)
|
||
* Directory structure for scenarios for test cases in the Syntax-TP test
|
||
module.
|
||
* [Zone-TP/]
|
||
* Directory structure for scenarios for test cases in the Zone-TP test module.
|
||
|
||
### Other test zones
|
||
|
||
* [Engine/]
|
||
* Directory structure for test zones for Perl modules in Zonemaster-Engine.
|
||
* [MethodsV2/]
|
||
* Direcotry structure for scenarios for the shared methods for the test cases.
|
||
|
||
|
||
|
||
[address-plan.md]: address-plan.md
|
||
[Address-TP/]: Address-TP/
|
||
[Basic-TP/]: Basic-TP/
|
||
[COMMON/]: COMMON/
|
||
[Consistency-TP/]: Consistency-TP/
|
||
[DNSSEC-TP/]: DNSSEC-TP/
|
||
[Engine/]: Engine/
|
||
[main.cfg]: main.cfg
|
||
[MethodsV2/]: MethodsV2/
|
||
[Nameserver-TP/]: Nameserver-TP/
|
||
[README-Bind]: README-Bind.md
|
||
[set-ip.sh]: set-ip.sh
|
||
[start-coredns.sh]: start-coredns.sh
|
||
[t]: https://github.com/zonemaster/zonemaster-engine/tree/develop/t
|
||
[test-zone-data]: .
|
||
[utils/]: utils/
|
||
[Zone-TP/]: Zone-TP/
|
||
[Zonemaster-Engine]: https://github.com/zonemaster/zonemaster-engine/
|