This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
Dns
Project-owned DNS declarations for alwaldend.com
DNS records live in each owner’s dnsconfig.json. Each owner manages its records
through the reusable Terraform DNS module
from its designated tf_setup or tf root. This component’s
dnsconfig.json owns shared apex and mail records.
Declaration pages
Cloudflare DNS and Mikrotik DNS list the
records this repository declares for each destination view, with the owning
declaration for every record. They are generated from dnsconfig.json:
bazel_agent bazel run //infra/dns/cmd/dump -- --write
//infra/dns:config_test fails when a checked-in page is out of date, so the
pages cannot drift from the declarations they project.
Inspect and lint declarations
bazel_agent bazel run //infra/dns:lint
The linter discovers dnsconfig.json files in the current workspace at runtime
and prints their DNS declarations as a table. It includes nested project
workspaces and excludes task scratch, tool caches, and generated directories.
There is no central source registry to maintain when a project adds a file.
A canonical domain name must belong to one source file. Multiple values, record
types, and destination views within that file are valid. Duplicate JSON object
keys and domains declared by different source files are errors. The command
reads checked-in declarations without contacting Terraform backends or DNS
providers.
bazel_agent bazel test //infra/dns:config_test runs the linter’s fixture tests
and checks every DNS declaration in the current checkout. The repository test
resolves the root MODULE.bazel runfile to the checkout and runs without sandboxing
or cached test results so newly added files and nested workspaces are included
on every run. It only reads local files.
The provider-free normalization module
owns the Terraform input schema, relative-name handling, TTL defaults, and stable
resource keys. Each logical key can contain several record-type members; dsp
selects global, dc1, or all. Explicit member TTLs preserve shared apex and
mail settings. The normalization module remains an internal dependency of each
owner’s Terraform DNS module.
Owner-local roots receive their provider credentials and Vault HTTP state
backend through the existing AL configuration. The shared module resolves the
Cloudflare zone by name when no optional zone ID is provided. DNS and ingress
reuse the RouterOS endpoint declared in the shared AL configuration,
while their separate credentials remain in Vault. Neither integration requires
adding metadata fields to the existing credential entries.
Validate their source with the
owning package’s offline checks. A live plan, import, apply, or state operation
requires separate authorization for that owner and operation.
Service roots expose dns.plan, dns.show, and dns.apply alongside their
ordinary Terraform commands. They retain the owning root, AppRole and backend,
select the DNS AL calls, and plan module.dns. Required root inputs still load
through the existing read-only Vault injectors. Unrelated service authentication
is not selected. Apply accepts only a reviewed saved plan file and rejects
Terraform CLI argument environment overrides. See the runbook for the optional
import-ID maps and adoption checks.
Migration and recovery
The migration change and
cutover runbook
describe adoption, imports, recovery, and retirement requirements. Each owner’s
adoption change records its verified live transfer; source implementation alone
does not establish operational ownership. The completed coordination record
links the operational acceptance evidence and its coverage limits.
Current source no longer exposes the central DNSControl deployment commands.
Before an owner begins Terraform reconciliation, stop central deployment jobs
identified by the active and scheduled writer audit. Record coverage and
unavailable observations, and coordinate one owner at a time. Adopt existing
records into the owner’s state with an exact-ID, no-change plan. Fresh complete
inventories may establish missing declarations for a separately reviewed
additions-only plan that preserves all existing records.
Rollback requires stopping the affected Terraform writers and following the
runbook’s recorded prior revision and state-reconciliation procedure.
Deployment snapshots are not maintained here. The generated declaration pages
above project declared state, and the declarations themselves remain the only
inventory.
1 -
Infrastructure DNS
Purpose
Describe owner-local Terraform DNS declarations and runtime source-ownership
validation for global and dc1 records. This contract describes checked-in
source; it does not establish live adoption or authorize infrastructure writes.
Sources: component documentation,
target definitions,
runtime linter, and
Terraform root.
Requirements
Requirement: Aggregate records from their owning components
DNS declarations SHALL remain in their owners’ dnsconfig.json files. Runtime
inventory SHALL discover all canonical files, including nested modules and
empty declarations, without a checked-in ownership registry. The inventory
SHALL print a deterministic table of files, DNS names, types and views.
Project landing declarations retain their declared direct targets.
Scenario: A new project adds a canonical declaration
- WHEN the runtime linter scans a workspace containing the new file
- THEN it includes the file without requiring a registry update
Requirement: Preserve distinct global and site-local views
The Terraform module SHALL preserve Cloudflare global and MikroTik dc1 views.
It SHALL retain every type member, expand and deduplicate destinations, reject
unknown inputs and preserve effective values, TTLs, priorities and multiplicity.
Scenario: An entry declares A and AAAA in all views
- WHEN the shared module normalizes the entry
- THEN both types appear exactly once in each destination view
- WHEN a record names an unsupported destination
- THEN normalization fails with an actionable diagnostic
Requirement: Validate configuration without provider access
The linter and module tests SHALL validate source ownership, names, inputs,
normalization and provider mappings without credentials or live provider access.
Existing JSON-based VM consumers SHALL remain compatible.
Scenario: Validate a changed declaration
- WHEN offline checks run
- THEN they validate the declaration and fixtures without deploying records
Requirement: Inject credentials into operational wrappers
Owner Terraform roots SHALL use the existing AL/Vault authentication, backend
and credential injection workflow. They SHALL obtain only their required view
credentials. Operational provider initialization may require live credentials
even with resource creation disabled. Central DNSControl write entrypoints
SHALL be removed from the candidate.
Scenario: A global-only owner operates its root
- WHEN an authorized operator invokes the root after bootstrap
- THEN it uses that owner’s AppRole and Cloudflare credentials
- AND RouterOS credentials and resources are not required
Each owner SHALL instantiate the shared module in tf_setup when present,
otherwise in tf. Missing roots and AppRoles SHALL be added. Related
AppRole resources SHALL be grouped in modules under
infra/vault/tf/approles/<name>. Provider instance keys SHALL be stable across
value-only changes; unrelated owners SHALL remain outside the state.
Scenario: An owner has both stages
- WHEN the integration is prepared
- THEN only its setup root declares the DNS module
Requirement: One declaration file owns each DNS name
The runtime linter SHALL reject different files managing the same canonical
fully qualified DNS name, across types and views. Multiple records within one
file SHALL be allowed. Diagnostics SHALL identify both files.
Scenario: Different files split a name across types or views
- WHEN one file declares an A record and another an AAAA record or a
different view for the same name
- THEN lint fails and identifies both source files
Scenario: One file manages multiple records for a name
- WHEN one file declares several values, types or views for a name
- THEN ownership lint accepts the sole source
Requirement: Preserve live records during transfer
Operational cutover SHALL audit active and scheduled central writers, stop
identified competing writers, and coordinate one owner at a time. Evidence
SHALL state the audit’s coverage and unavailable observations. Each existing
record SHALL be imported using its actual provider ID into exactly one owner
state, followed by a no-change adoption plan before writes. Fresh complete
inventories MAY establish missing declarations for an exact additions-only
plan that preserves every existing record. Endpoint-owning batches SHALL
verify an independent authenticated recovery path first.
The shared apex and mail records owned by infra/dns SHALL remain disabled
by default in its tf root before the authorized adoption revision and SHALL
retain enabled ownership after import. Reconciliation against the adopted state
and unchanged declarations SHALL propose no record additions, changes,
replacements, or deletions and SHALL preserve unrelated provider records.
Scenario: An owner is adopted
- WHEN its authorized cutover runs
- THEN exact-ID imports preserve existing records
- AND the operator coordinates exclusive active writers and verifies
unrelated records remain unchanged
Scenario: Deploy verified missing declarations
- WHEN complete provider inventories establish that declared names are absent
and conflict-free
- THEN the reviewed DNS plan creates only those missing declarations
- AND every existing provider identity and attribute remains unchanged
- AND a follow-up DNS plan contains no changes
Scenario: Inspect the prepared shared-record defaults
- WHEN the shared
tf root uses its checked-in defaults before its
authorized adoption revision
- THEN shared-record ownership is disabled and the root retains the
canonical shared declaration and module inputs
Scenario: Inspect adopted shared-record defaults
- WHEN the adopted shared
tf root uses its checked-in source defaults
- THEN ownership is enabled for the shared apex and mail records in
their declared views
Scenario: Reconcile existing shared records
- WHEN the shared
tf root plans against adopted state and unchanged declarations
- THEN it proposes no record additions, changes, replacements, or deletions
- AND unrelated provider records remain unchanged
Requirement: Avoid a separate DNS exporter
The implementation SHALL derive its declaration views from the owning
dnsconfig.json files rather than maintaining a normalized inventory or BIND
exporter. Historical provider snapshots SHALL NOT be presented as current
desired state, and no provider snapshot SHALL be committed as a declaration
source.
Scenario: Inspect declared ownership
- WHEN the runtime linter succeeds
- THEN its table reports the discovered declarations without an export step
Requirement: Publish declaration pages per destination view
The implementation SHALL render one documentation page per destination view
from the declared records, with the owning declaration for every record, and
SHALL fail its offline check when a checked-in page differs from the
declarations it projects.
Scenario: Regenerate a declaration page
- WHEN an owner changes a declaration and the generation command runs
- THEN the affected view’s page lists the declared records with their owner
- AND the check passes against the regenerated page
Scenario: A declaration page is stale
- WHEN a checked-in page no longer matches the declarations
- THEN the offline check fails rather than serving a stale inventory
2 - Cloudflare DNS
Records declared for the public zone served by Cloudflare
Every record this repository declares for the public zone, which Cloudflare serves.
This page is generated from the declarations; run bazel run //infra/dns/cmd/dump -- --write after changing them. The authoritative source is each owner’s dnsconfig.json.
| Domain |
Type |
TTL |
Value |
Declaration |
| @ |
A |
300 |
185.199.108.153 |
infra/dns/dnsconfig.json |
| @ |
A |
300 |
185.199.109.153 |
infra/dns/dnsconfig.json |
| @ |
A |
300 |
185.199.110.153 |
infra/dns/dnsconfig.json |
| @ |
A |
300 |
185.199.111.153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8000::153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8001::153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8002::153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8003::153 |
infra/dns/dnsconfig.json |
| @ |
MX |
300 |
10 mail.protonmail.ch. |
infra/dns/dnsconfig.json |
| @ |
MX |
300 |
20 mailsec.protonmail.ch. |
infra/dns/dnsconfig.json |
| @ |
TXT |
300 |
_globalsign-domain-verification=0QBJgVV_uwcFLTi1Rot3bb1LyJ5uW1WD0ygvIS4OM5 |
infra/dns/dnsconfig.json |
| @ |
TXT |
300 |
protonmail-verification=bdcd133d3f472fa17f66328950d02fbeae1bef75 |
infra/dns/dnsconfig.json |
| @ |
TXT |
300 |
v=spf1 include:_spf.protonmail.ch ~all |
infra/dns/dnsconfig.json |
| _dmarc |
TXT |
300 |
v=DMARC1; p=quarantine; adkim=s |
infra/dns/dnsconfig.json |
| _dmarc.simplelogin |
TXT |
10800 |
v=DMARC1; p=quarantine; pct=100; adkim=s; aspf=s |
infra/dns/dnsconfig.json |
| canvas.openhands |
CNAME |
default |
ingress.alwaldend.com. |
infra/openhands/dnsconfig.json |
| cloud |
CNAME |
default |
ingress.alwaldend.com. |
infra/nas/dnsconfig.json |
| dc1.automation.openhands |
A |
default |
192.168.10.92 |
infra/openhands/dnsconfig.json |
| dc1.canvas.openhands |
A |
default |
192.168.10.90 |
infra/openhands/dnsconfig.json |
| dc1.cloud |
A |
default |
192.168.1.209 |
infra/nas/dnsconfig.json |
| dc1.host-bot.simeonwarren.users |
A |
default |
192.168.1.210 |
users/simeonwarren/host_bot/dnsconfig.json |
| dc1.server.openhands |
A |
default |
192.168.10.91 |
infra/openhands/dnsconfig.json |
| dc1.t3code.host-bot.simeonwarren.users |
A |
default |
192.168.1.210 |
users/simeonwarren/host_bot/dnsconfig.json |
| dkim._domainkey.simplelogin |
CNAME |
10800 |
dkim._domainkey.simplelogin.co. |
infra/dns/dnsconfig.json |
| dkim02._domainkey.simplelogin |
CNAME |
10800 |
dkim02._domainkey.simplelogin.co. |
infra/dns/dnsconfig.json |
| dkim03._domainkey.simplelogin |
CNAME |
10800 |
dkim03._domainkey.simplelogin.co. |
infra/dns/dnsconfig.json |
| forgejo |
CNAME |
default |
ingress.alwaldend.com. |
infra/forgejo/dnsconfig.json |
| git |
CNAME |
default |
ingress.alwaldend.com. |
infra/forgejo/dnsconfig.json |
| host1.ingress |
A |
default |
81.26.185.118 |
infra/ingress/dnsconfig.json |
| ingress |
A |
default |
81.26.185.118 |
infra/ingress/dnsconfig.json |
| int.forgejo |
A |
default |
192.168.10.40 |
infra/forgejo/dnsconfig.json |
| int.vault |
A |
default |
192.168.1.218 |
infra/vault/dnsconfig.json |
| mail._domainkey.yandex |
TXT |
300 |
v=DKIM1; k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcYzFVgkeDOhaIIkWM8gNQjxVsv0/aXfU+ax5urB5y6hA6lSjRnjRo6tm0bXbkOJf41GmiwMNgdXpwRtzgzAlX1i2aJbtEr4b9jzibEGLQ7Cvqs44bOYES9f/K3ueQpnvdTOJmFqlRReFL7ZrUyDFCoQ7f4+7h4i8s01cCcRrt5wIDAQAB |
infra/dns/dnsconfig.json |
| njalla1.nodes.threexui |
A |
default |
45.142.141.133 |
infra/threexui/dnsconfig.json |
| njalla1.nodes.threexui |
AAAA |
default |
2a0a:3840:8078:141:0:2d8e:8d85:1337 |
infra/threexui/dnsconfig.json |
| pages |
A |
default |
185.199.108.153 |
projects/alwaldend.com/dnsconfig.json |
| pages |
AAAA |
default |
2606:50c0:8000::153 |
projects/alwaldend.com/dnsconfig.json |
| protonmail._domainkey |
CNAME |
300 |
protonmail.domainkey.djgwfzcu5fgjtpoijqqomgifmqj6zeiuwdd4mzim4hrxab3zsgwkq.domains.proton.ch. |
infra/dns/dnsconfig.json |
| protonmail2._domainkey |
CNAME |
300 |
protonmail2.domainkey.djgwfzcu5fgjtpoijqqomgifmqj6zeiuwdd4mzim4hrxab3zsgwkq.domains.proton.ch. |
infra/dns/dnsconfig.json |
| protonmail3._domainkey |
CNAME |
300 |
protonmail3.domainkey.djgwfzcu5fgjtpoijqqomgifmqj6zeiuwdd4mzim4hrxab3zsgwkq.domains.proton.ch. |
infra/dns/dnsconfig.json |
| simplelogin |
MX |
10800 |
10 mx1.simplelogin.co. |
infra/dns/dnsconfig.json |
| simplelogin |
MX |
10800 |
20 mx2.simplelogin.co. |
infra/dns/dnsconfig.json |
| simplelogin |
TXT |
10800 |
sl-verification=bxfzzfjiggzsxyzxhhmkmjqkaskjgy |
infra/dns/dnsconfig.json |
| simplelogin |
TXT |
10800 |
v=spf1 include:simplelogin.co ~all |
infra/dns/dnsconfig.json |
| t3code.host-bot.simeonwarren.users |
CNAME |
default |
ingress.alwaldend.com. |
users/simeonwarren/host_bot/dnsconfig.json |
| vault |
CNAME |
default |
ingress.alwaldend.com. |
infra/vault/dnsconfig.json |
| www |
CNAME |
300 |
alwaldend.com. |
infra/dns/dnsconfig.json |
| www-staging |
CNAME |
300 |
alwaldend.github.io. |
infra/dns/dnsconfig.json |
| yandex |
MX |
21600 |
10 mx.yandex.net. |
infra/dns/dnsconfig.json |
| yandex |
TXT |
300 |
v=spf1 redirect=_spf.yandex.net |
infra/dns/dnsconfig.json |
| yandex |
TXT |
300 |
yandex-verification: b83672f59b3dbe16 |
infra/dns/dnsconfig.json |
| yc.threexui |
NS |
default |
ns1.yandexcloud.net. |
infra/threexui/dnsconfig.json |
| yc.threexui |
NS |
default |
ns2.yandexcloud.net. |
infra/threexui/dnsconfig.json |
| yc1.nodes.threexui |
CNAME |
default |
host1.nodes.yc.threexui.alwaldend.com. |
infra/threexui/dnsconfig.json |
3 - Mikrotik DNS
Records declared for the internal dc1 view served by RouterOS
Every record this repository declares for the internal dc1 view, which RouterOS serves for that network.
This page is generated from the declarations; run bazel run //infra/dns/cmd/dump -- --write after changing them. The authoritative source is each owner’s dnsconfig.json.
| Domain |
Type |
TTL |
Value |
Declaration |
| @ |
A |
300 |
185.199.108.153 |
infra/dns/dnsconfig.json |
| @ |
A |
300 |
185.199.109.153 |
infra/dns/dnsconfig.json |
| @ |
A |
300 |
185.199.110.153 |
infra/dns/dnsconfig.json |
| @ |
A |
300 |
185.199.111.153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8000::153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8001::153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8002::153 |
infra/dns/dnsconfig.json |
| @ |
AAAA |
300 |
2606:50c0:8003::153 |
infra/dns/dnsconfig.json |
| @ |
MX |
300 |
10 mail.protonmail.ch. |
infra/dns/dnsconfig.json |
| @ |
MX |
300 |
20 mailsec.protonmail.ch. |
infra/dns/dnsconfig.json |
| @ |
TXT |
300 |
_globalsign-domain-verification=0QBJgVV_uwcFLTi1Rot3bb1LyJ5uW1WD0ygvIS4OM5 |
infra/dns/dnsconfig.json |
| @ |
TXT |
300 |
protonmail-verification=bdcd133d3f472fa17f66328950d02fbeae1bef75 |
infra/dns/dnsconfig.json |
| @ |
TXT |
300 |
v=spf1 include:_spf.protonmail.ch ~all |
infra/dns/dnsconfig.json |
| _dmarc |
TXT |
300 |
v=DMARC1; p=quarantine; adkim=s |
infra/dns/dnsconfig.json |
| _dmarc.simplelogin |
TXT |
10800 |
v=DMARC1; p=quarantine; pct=100; adkim=s; aspf=s |
infra/dns/dnsconfig.json |
| automation.openhands |
A |
default |
192.168.10.92 |
infra/openhands/dnsconfig.json |
| bm1.dc1 |
A |
default |
192.168.1.222 |
infra/mikrotik/dnsconfig.json |
| bm2.dc1 |
A |
default |
192.168.1.216 |
infra/pve/dnsconfig.json |
| bm2.dc1 |
AAAA |
default |
fd2e:546d:5738:0:365a:60ff:fe08:6daa |
infra/pve/dnsconfig.json |
| bm3.dc1 |
A |
default |
192.168.1.218 |
infra/vault/dnsconfig.json |
| bm3.dc1 |
AAAA |
default |
fd2e:546d:5738:0:e2be:3ff:fe2b:9a1a |
infra/vault/dnsconfig.json |
| canvas.openhands |
A |
default |
192.168.10.90 |
infra/openhands/dnsconfig.json |
| cloud |
CNAME |
default |
nas.alwaldend.com. |
infra/nas/dnsconfig.json |
| cloudinit-test.vm.pve1.dc1 |
A |
default |
192.168.10.10 |
infra/pve/dnsconfig.json |
| dc1.automation.openhands |
A |
default |
192.168.10.92 |
infra/openhands/dnsconfig.json |
| dc1.canvas.openhands |
A |
default |
192.168.10.90 |
infra/openhands/dnsconfig.json |
| dc1.cloud |
A |
default |
192.168.1.209 |
infra/nas/dnsconfig.json |
| dc1.host-bot.simeonwarren.users |
A |
default |
192.168.1.210 |
users/simeonwarren/host_bot/dnsconfig.json |
| dc1.server.openhands |
A |
default |
192.168.10.91 |
infra/openhands/dnsconfig.json |
| dc1.t3code.host-bot.simeonwarren.users |
A |
default |
192.168.1.210 |
users/simeonwarren/host_bot/dnsconfig.json |
| dkim._domainkey.simplelogin |
CNAME |
10800 |
dkim._domainkey.simplelogin.co. |
infra/dns/dnsconfig.json |
| dkim02._domainkey.simplelogin |
CNAME |
10800 |
dkim02._domainkey.simplelogin.co. |
infra/dns/dnsconfig.json |
| dkim03._domainkey.simplelogin |
CNAME |
10800 |
dkim03._domainkey.simplelogin.co. |
infra/dns/dnsconfig.json |
| flux |
A |
default |
192.168.10.60 |
infra/flux/dnsconfig.json |
| forgejo |
A |
default |
192.168.10.40 |
infra/forgejo/dnsconfig.json |
| git |
A |
default |
192.168.10.40 |
infra/forgejo/dnsconfig.json |
| harbor |
A |
default |
192.168.10.50 |
infra/harbor/dnsconfig.json |
| host-bot.simeonwarren.users |
A |
default |
192.168.1.210 |
users/simeonwarren/host_bot/dnsconfig.json |
| host1.automation.openhands |
A |
default |
192.168.10.92 |
infra/openhands/dnsconfig.json |
| host1.canvas.openhands |
A |
default |
192.168.10.90 |
infra/openhands/dnsconfig.json |
| host1.cloud |
CNAME |
default |
host1.nas.alwaldend.com. |
infra/nas/dnsconfig.json |
| host1.flux |
A |
default |
192.168.10.60 |
infra/flux/dnsconfig.json |
| host1.forgejo |
A |
default |
192.168.10.40 |
infra/forgejo/dnsconfig.json |
| host1.harbor |
A |
default |
192.168.10.50 |
infra/harbor/dnsconfig.json |
| host1.ingress |
A |
default |
81.26.185.118 |
infra/ingress/dnsconfig.json |
| host1.nas |
A |
default |
192.168.1.209 |
infra/nas/dnsconfig.json |
| host1.pve1.dc1 |
CNAME |
default |
bm2.dc1.alwaldend.com. |
infra/pve/dnsconfig.json |
| host1.server.openhands |
A |
default |
192.168.10.91 |
infra/openhands/dnsconfig.json |
| host1.threexui |
A |
default |
192.168.10.80 |
infra/threexui/dnsconfig.json |
| host1.vault.dc1 |
A |
default |
192.168.1.218 |
infra/vault/dnsconfig.json |
| host1.xcp-ng |
A |
default |
192.168.1.213 |
infra/xcp_ng/dnsconfig.json |
| host1.xoa.xcp-ng |
A |
default |
192.168.1.206 |
infra/xcp_ng/dnsconfig.json |
| ingress |
A |
default |
81.26.185.118 |
infra/ingress/dnsconfig.json |
| mail._domainkey.yandex |
TXT |
300 |
v=DKIM1; k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcYzFVgkeDOhaIIkWM8gNQjxVsv0/aXfU+ax5urB5y6hA6lSjRnjRo6tm0bXbkOJf41GmiwMNgdXpwRtzgzAlX1i2aJbtEr4b9jzibEGLQ7Cvqs44bOYES9f/K3ueQpnvdTOJmFqlRReFL7ZrUyDFCoQ7f4+7h4i8s01cCcRrt5wIDAQAB |
infra/dns/dnsconfig.json |
| nas |
A |
default |
192.168.1.209 |
infra/nas/dnsconfig.json |
| njalla1.nodes.threexui |
A |
default |
45.142.141.133 |
infra/threexui/dnsconfig.json |
| njalla1.nodes.threexui |
AAAA |
default |
2a0a:3840:8078:141:0:2d8e:8d85:1337 |
infra/threexui/dnsconfig.json |
| openid.flux |
CNAME |
default |
flux.alwaldend.com. |
infra/flux/dnsconfig.json |
| operator.flux |
CNAME |
default |
flux.alwaldend.com. |
infra/flux/dnsconfig.json |
| protonmail._domainkey |
CNAME |
300 |
protonmail.domainkey.djgwfzcu5fgjtpoijqqomgifmqj6zeiuwdd4mzim4hrxab3zsgwkq.domains.proton.ch. |
infra/dns/dnsconfig.json |
| protonmail2._domainkey |
CNAME |
300 |
protonmail2.domainkey.djgwfzcu5fgjtpoijqqomgifmqj6zeiuwdd4mzim4hrxab3zsgwkq.domains.proton.ch. |
infra/dns/dnsconfig.json |
| protonmail3._domainkey |
CNAME |
300 |
protonmail3.domainkey.djgwfzcu5fgjtpoijqqomgifmqj6zeiuwdd4mzim4hrxab3zsgwkq.domains.proton.ch. |
infra/dns/dnsconfig.json |
| pve |
A |
default |
192.168.1.216 |
infra/pve/dnsconfig.json |
| router1.dc1 |
A |
default |
192.168.1.1 |
infra/mikrotik/dnsconfig.json |
| router1.dc1 |
AAAA |
default |
fd2e:546d:5738::1 |
infra/mikrotik/dnsconfig.json |
| runner1.forgejo-runner |
A |
default |
192.168.10.100 |
infra/forgejo_runner/dnsconfig.json |
| server.openhands |
A |
default |
192.168.10.91 |
infra/openhands/dnsconfig.json |
| simplelogin |
MX |
10800 |
10 mx1.simplelogin.co. |
infra/dns/dnsconfig.json |
| simplelogin |
MX |
10800 |
20 mx2.simplelogin.co. |
infra/dns/dnsconfig.json |
| simplelogin |
TXT |
10800 |
sl-verification=bxfzzfjiggzsxyzxhhmkmjqkaskjgy |
infra/dns/dnsconfig.json |
| simplelogin |
TXT |
10800 |
v=spf1 include:simplelogin.co ~all |
infra/dns/dnsconfig.json |
| switch1.dc1 |
A |
default |
192.168.1.254 |
infra/mikrotik/dnsconfig.json |
| t3code.host-bot.simeonwarren.users |
A |
default |
192.168.1.210 |
users/simeonwarren/host_bot/dnsconfig.json |
| threexui |
A |
default |
192.168.10.80 |
infra/threexui/dnsconfig.json |
| vault |
A |
default |
192.168.1.218 |
infra/vault/dnsconfig.json |
| vault.dc1 |
A |
default |
192.168.1.218 |
infra/vault/dnsconfig.json |
| www |
CNAME |
300 |
alwaldend.com. |
infra/dns/dnsconfig.json |
| www-staging |
CNAME |
300 |
alwaldend.github.io. |
infra/dns/dnsconfig.json |
| xcp-ng |
A |
default |
192.168.1.213 |
infra/xcp_ng/dnsconfig.json |
| xoa.xcp-ng |
A |
default |
192.168.1.206 |
infra/xcp_ng/dnsconfig.json |
| yandex |
MX |
21600 |
10 mx.yandex.net. |
infra/dns/dnsconfig.json |
| yandex |
TXT |
300 |
v=spf1 redirect=_spf.yandex.net |
infra/dns/dnsconfig.json |
| yandex |
TXT |
300 |
yandex-verification: b83672f59b3dbe16 |
infra/dns/dnsconfig.json |
| yc.threexui |
NS |
default |
ns1.yandexcloud.net. |
infra/threexui/dnsconfig.json |
| yc.threexui |
NS |
default |
ns2.yandexcloud.net. |
infra/threexui/dnsconfig.json |
| yc1.nodes.threexui |
CNAME |
default |
host1.nodes.yc.threexui.alwaldend.com. |
infra/threexui/dnsconfig.json |
4 - Shared DNS Terraform
Owner state for common apex and mail records
This root consumes the canonical common declarations
through the reusable DNS module. It uses the src_infra_dns AppRole and its
existing Vault-backed HTTP state. Both Cloudflare and RouterOS credentials
are injected through the tf=1 stage label.
Shared apex and mail records were adopted on 2026-09-13. dns_enabled now
defaults to true; reconciliation against the adopted state and unchanged
declarations must propose no record changes. The adoption evidence
records 60 imports and preservation of both complete provider inventories.
Operational calls require the AppRole policy and Vault credential fields
described by the cutover procedure.
The module’s import_addresses output gives addresses relative to module.dns;
actual provider IDs come from the authorized adoption inventory.
Build the wrappers or run :tf_tests.fmt_test for offline validation. Import,
plan and apply follow the separately authorized adoption procedure.