updates and moved vntx to new repo

This commit is contained in:
Graham McIntire 2026-01-01 16:23:16 -06:00
parent 8ab8b7a1b3
commit 31eaad7900
No known key found for this signature in database
8 changed files with 49 additions and 350 deletions

View file

@ -41,6 +41,24 @@ provider "registry.opentofu.org/dnsimple/dnsimple" {
]
}
provider "registry.opentofu.org/hashicorp/null" {
version = "3.2.4"
constraints = "~> 3.0"
hashes = [
"h1:i+WKhUHL2REY5EGmiHjfUljJB8UKZ9QdhdM5uTeUhC4=",
"zh:1769783386610bed8bb1e861a119fe25058be41895e3996d9216dd6bb8a7aee3",
"zh:32c62a9387ad0b861b5262b41c5e9ed6e940eda729c2a0e58100e6629af27ddb",
"zh:339bf8c2f9733fce068eb6d5612701144c752425cebeafab36563a16be460fb2",
"zh:36731f23343aee12a7e078067a98644c0126714c4fe9ac930eecb0f2361788c4",
"zh:3d106c7e32a929e2843f732625a582e562ff09120021e510a51a6f5d01175b8d",
"zh:74bcb3567708171ad83b234b92c9d63ab441ef882b770b0210c2b14fdbe3b1b6",
"zh:90b55bdbffa35df9204282251059e62c178b0ac7035958b93a647839643c0072",
"zh:ae24c0e5adc692b8f94cb23a000f91a316070fdc19418578dcf2134ff57cf447",
"zh:b5c10d4ad860c4c21273203d1de6d2f0286845edf1c64319fa2362df526b5f58",
"zh:e05bbd88e82e1d6234988c85db62fd66f11502645838fff594a2ec25352ecd80",
]
}
provider "registry.opentofu.org/kyswtn/porkbun" {
version = "0.1.3"
constraints = "~> 0.1"

View file

@ -1,87 +1,48 @@
# Vultr PowerDNS Zones
# All zones managed on the Vultr PowerDNS instance
#
# AXFR Configuration:
# AXFR (zone transfers) and notifications are configured globally in the PowerDNS
# ConfigMap (allow-axfr-ips and also-notify settings). These apply to all zones.
resource "powerdns_zone" "w5isp_com" {
name = "w5isp.com."
kind = "Native"
kind = "Primary"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "aprs_me" {
name = "aprs.me."
kind = "Native"
kind = "Primary"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "mcintire_me" {
name = "mcintire.me."
kind = "Native"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
# Reverse DNS zones
resource "powerdns_zone" "vntx1" {
name = "188.110.204.in-addr.arpa."
kind = "Native"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "vntx2" {
name = "189.110.204.in-addr.arpa."
kind = "Native"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "vntx3" {
name = "190.110.204.in-addr.arpa."
kind = "Native"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "vntx4" {
name = "191.110.204.in-addr.arpa."
kind = "Native"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "vntx_net" {
name = "vntx.net."
kind = "Native"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "vntx_org" {
name = "vntx.org."
kind = "Native"
kind = "Primary"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "manero_org" {
name = "manero.org."
kind = "Native"
kind = "Primary"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "ntxarms_com" {
name = "ntxarms.com."
kind = "Native"
kind = "Primary"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}
resource "powerdns_zone" "qth_social" {
name = "qth.social."
kind = "Native"
kind = "Primary"
soa_edit_api = "DEFAULT"
nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."]
}

View file

@ -1,102 +0,0 @@
# Reverse DNS zones are defined in dns_powerdns_zones.tf
# SOA records for reverse zones
resource "powerdns_record" "vntx1_soa" {
depends_on = [powerdns_zone.vntx1]
zone = "188.110.204.in-addr.arpa."
name = "188.110.204.in-addr.arpa."
type = "SOA"
ttl = 3600
records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"]
}
resource "powerdns_record" "vntx2_soa" {
depends_on = [powerdns_zone.vntx2]
zone = "189.110.204.in-addr.arpa."
name = "189.110.204.in-addr.arpa."
type = "SOA"
ttl = 3600
records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"]
}
resource "powerdns_record" "vntx3_soa" {
depends_on = [powerdns_zone.vntx3]
zone = "190.110.204.in-addr.arpa."
name = "190.110.204.in-addr.arpa."
type = "SOA"
ttl = 3600
records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"]
}
resource "powerdns_record" "vntx4_soa" {
depends_on = [powerdns_zone.vntx4]
zone = "191.110.204.in-addr.arpa."
name = "191.110.204.in-addr.arpa."
type = "SOA"
ttl = 3600
records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"]
}
resource "powerdns_record" "ptr_records1" {
depends_on = [powerdns_zone.vntx1]
for_each = {
for i in range(256) : tostring(i) => {
name = "${i}.188.110.204.in-addr.arpa."
record = "${i}.188.client.vntx.net."
}
}
zone = "188.110.204.in-addr.arpa."
name = each.value.name
type = "PTR"
ttl = 3600
records = [each.value.record]
}
resource "powerdns_record" "ptr_records2" {
depends_on = [powerdns_zone.vntx2]
for_each = {
for i in range(256) : tostring(i) => {
name = "${i}.189.110.204.in-addr.arpa."
record = "${i}.189.client.vntx.net."
}
}
zone = "189.110.204.in-addr.arpa."
name = each.value.name
type = "PTR"
ttl = 3600
records = [each.value.record]
}
resource "powerdns_record" "ptr_records3" {
depends_on = [powerdns_zone.vntx3]
for_each = {
for i in range(256) : tostring(i) => {
name = "${i}.190.110.204.in-addr.arpa."
record = "${i}.190.client.vntx.net."
}
}
zone = "190.110.204.in-addr.arpa."
name = each.value.name
type = "PTR"
ttl = 3600
records = [each.value.record]
}
resource "powerdns_record" "ptr_records4" {
depends_on = [powerdns_zone.vntx4]
for_each = {
for i in range(256) : tostring(i) => {
name = "${i}.191.110.204.in-addr.arpa."
record = tostring(i) == "5" ? "mail.mcintire.me." : "${i}.191.client.vntx.net."
}
}
zone = "191.110.204.in-addr.arpa."
name = each.value.name
type = "PTR"
ttl = 3600
records = [each.value.record]
}

View file

@ -1,144 +0,0 @@
# SOA record for vntx.net
resource "powerdns_record" "vntx_net_soa" {
depends_on = [powerdns_zone.vntx_net]
zone = "vntx.net."
name = "vntx.net."
type = "SOA"
ttl = 3600
records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"]
}
# Generate client IP records dynamically
locals {
# Subnets to create client records for
vntx_subnets = [188, 189, 190, 191]
# Generate all client IPs dynamically
client_ips = merge([
for subnet in local.vntx_subnets : {
for i in range(1, 255) : "${i}.${subnet}.client" => "204.110.${subnet}.${i}"
}
]...)
# Named hosts with specific IPs
named_hosts = {
"ansible" = "204.110.191.246"
"climax" = "204.110.188.62"
"core" = "10.254.254.253"
"culleoka" = "204.110.188.158"
"edge" = "204.110.191.190"
"g" = "204.110.191.8"
"librenms" = "204.110.191.227"
"logs" = "204.110.191.229"
"monitor" = "204.110.191.241"
"netbox" = "204.110.191.243"
"newhope" = "204.110.188.190"
"ns1" = "204.110.191.249"
"ns2" = "204.110.191.239"
"preseem" = "204.110.191.225"
"resolver-01" = "204.110.191.240"
"resolver-02" = "204.110.191.250"
"resolver1" = "204.110.191.240"
"resolver2" = "204.110.191.250"
"unimus" = "204.110.191.238"
"verona" = "204.110.188.254"
"@" = "198.185.159.144"
"routers" = "155.138.241.157"
"vpn" = "204.110.191.247"
"radius" = "204.110.191.248"
"zabbix" = "204.110.191.244"
"speedtest" = "204.110.191.228"
"gitlab" = "204.110.191.234"
"aprs" = "204.110.191.232"
"g2" = "204.110.191.221"
"net" = "104.238.146.79"
"uisp" = "204.110.191.224"
}
# Merge client IPs and named hosts
all_a_records = merge(local.client_ips, local.named_hosts)
}
resource "powerdns_record" "vntx_a_records" {
for_each = local.all_a_records
depends_on = [powerdns_zone.vntx_net]
zone = "vntx.net."
name = each.key == "@" ? "vntx.net." : "${each.key}.vntx.net."
type = "A"
ttl = 3600
records = [each.value]
}
resource "powerdns_record" "vntx_txt_records" {
for_each = {
"_twilio" = "twilio-domain-verification=12bf63d61b86412618bdb4ab6c2b287a"
"_dmarc" = "v=DMARC1; p=none"
"_updown" = "updown-page=p/34yuc"
"_github-challenge-vntx" = "34ea2705e4"
"_github-pages-challenge-gmcintire" = "d125f4244edd0120ee0fa073d3acf1"
"krs._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHbWtJ5uPGEOPmJrT36WBXKxVL0b4fqjIM4n6oXK4zaUucqYp7jeoKG+FTO5XEjyja7hsP9WahntUrVb8WI5V6Cj0CznesMrM7oQRntcyuy8mSD1zilmZe4q2Kc65gj2MRrkg3tkJfogXHNz2rxmquNu/DxsFLeQP8a2E5tYXVFwIDAQAB"
"pic._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdv4ZUjhb9l0Nt1aEJMnH/TVNdVn9CEKkb8+RX3qBPMFGmJWrJ3BIFwOSTUBiPeCgd2vc4zOOv7iQhEgNTlIVNT/V1sY70Myo5t+tJCuJQT/G4h5D1u7LZB6YEOKTgd5wF5AoW/nLvKVEPyKl5mThB9KmIGqF5FMm9C9FWP8m6SQIDAQAB"
"s1._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI3w7b9bBNcWzSH8DspZbRNp+9G9pHbCfmHmr3r2JqXh+F8bFlCK6gJqEQW7SIJgYMmSJ5GlYyy4A3VxJJFcWLZb3dxMoWkGjrJ3gEUNQGmG6rnJ7eXJxKb5J2mGgEfQgCgkWXPFRmJhKXPWoZP3RqU2vJZ3t7vJxWHmv0bQPHKQIDAQAB"
"s2._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc3JXQvGMBl3cW+3N2OPLJwlP4cMvPp9yOQM9X1TLxJWX7Hd7m6rJ1Xf2T3PGP9ZDPfJGXh+PfGPYVJYP2JXGPfP9HPfP3GPfPHGPYVP9fPH+PfP+PfPHGPYVP9fPH+PfP+PfPHGPYVP9fPH+PfP+PfPHGPYVP9fPH+PfP+PfPHQIDAQAB"
"@" = "v=spf1 include:mailgun.org ~all"
}
depends_on = [powerdns_zone.vntx_net]
zone = "vntx.net."
name = each.key == "@" ? "vntx.net." : "${each.key}.vntx.net."
type = "TXT"
ttl = 3600
records = ["\"${each.value}\""]
}
resource "powerdns_record" "vntx_cname_records" {
for_each = {
# Current records
"mg" = "mailgun.org."
"email.mg" = "mailgun.org."
"*.w5isp" = "dokku.w5isp.com."
"automation" = "automate.freshbooks.com."
"grafana" = "vgraph01.spindlenetworks.com."
"mail.speedtest" = "mail.speedtest.vntx.net.s2.mailersendapp.com."
"status" = "stats.uptimerobot.com."
"ntp" = "0.us.pool.ntp.org."
"iptrack" = "dokku.w5isp.com."
# Restored records from git history
"_4080c249b6e72dd04f2a9508aa1a1b7f.kivrak" = "_de3e5d511f3869bbd271b935a3b4f973.tljzshvwok.acm-validations.aws."
"_83337805c305955c6823504cc5e6ca29" = "_baf97cdcc7b6458fa5719e4261e9932f.sdgjtdhdhz.acm-validations.aws."
"_bc1077259b1fbbb11c1e16756e1883f9.irc" = "793f217a963b25f361ec1975e0fd7d54.dc2ec86a36550aed25a0011c0b2b044b.62f7abe714ec1.comodoca.com."
"177982" = "sendgrid.net."
"4809fce066c3da4d14197c7276ba083f.irc" = "b58bf151af520d34d8fad99d05274cb536893031.comodoca.com."
"9p83fpanfdgs8xdgcnzd" = "verify.squarespace.com."
"activate" = "verona-networks-checkout.gaiia-consumer.com."
"autodiscover.o365" = "autodiscover.outlook.com."
"autodiscover" = "autodiscover.outlook.com."
"em924886" = "return.smtp2go.net."
"em9279" = "u177982.wl233.sendgrid.net."
"email" = "mandrillapp.com."
"enterpriseenrollment.o365" = "enterpriseenrollment.manage.microsoft.com."
"enterpriseregistration.o365" = "enterpriseregistration.windows.net."
"link" = "track.smtp2go.net."
"lyncdiscover.o365" = "webdir.online.lync.com."
"mte1._domainkey" = "dkim1.mandrillapp.com."
"mte2._domainkey" = "dkim2.mandrillapp.com."
"portal" = "verona-networks-clientportal.gaiia-consumer.com."
"s1._domainkey" = "s1.domainkey.u177982.wl233.sendgrid.net."
"s2._domainkey" = "s2.domainkey.u177982.wl233.sendgrid.net."
"s924886._domainkey" = "dkim.smtp2go.net."
"sip.o365" = "sipdir.online.lync.com."
"uptime" = "page.updown.io."
"url62" = "sendgrid.net."
"url9812" = "sendgrid.net."
"www" = "ext-cust.squarespace.com."
}
depends_on = [powerdns_zone.vntx_net]
zone = "vntx.net."
name = "${each.key}.vntx.net."
type = "CNAME"
ttl = 3600
records = [each.value]
}

View file

@ -1,12 +0,0 @@
# DNS records for vntx.org domain
# Zone defined in dns_powerdns_zones.tf
# SOA record for vntx.org
resource "powerdns_record" "vntx_org_soa" {
depends_on = [powerdns_zone.vntx_org]
zone = "vntx.org."
name = "vntx.org."
type = "SOA"
ttl = 3600
records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"]
}

View file

@ -20,10 +20,10 @@ terraform {
source = "cloudflare/cloudflare"
version = "~> 5.0"
}
# proxmox = {
# source = "bpg/proxmox"
# version = "~> 0.66"
# }
null = {
source = "hashicorp/null"
version = "~> 3.0"
}
}
}
@ -45,25 +45,12 @@ provider "porkbun" {
secret_api_key = var.porkbun_secret_api_key
}
# provider "powerdns" {
# api_key = var.pdns_api_key
# server_url = var.pdns_server_url
# }
provider "powerdns" {
api_key = var.pdns_api_key
server_url = var.pdns_server_url
}
provider "cloudflare" {
# API token is read from CLOUDFLARE_API_TOKEN environment variable
# No explicit api_token parameter needed - provider automatically reads the env var
}
# provider "proxmox" {
# endpoint = var.proxmox_api_url
# username = var.proxmox_user
# password = var.proxmox_password
# insecure = var.proxmox_tls_insecure
# }
provider "powerdns" {
# alias = "vultr"
api_key = var.pdns_vultr_api_key
server_url = "http://100.93.123.98:8081"
}

View file

@ -6,5 +6,5 @@ token_id = "terraform@pve!terraform-token"
dnsimple_token = "dnsimple_a_sRmKiuHrxR2UiMHf0NREqAtgfELyRVAI"
porkbun_api_key = "pk1_5f321ff82ce0c085e67f9569db48976d838f302bc15b88292373e4b6b9891f17"
porkbun_secret_api_key = "sk1_854fd74c8221bceaec27cf17edf3402b074e67447befe1363cf0247b620c82c5"
pdns_api_key = "q4zBRoR72gOIfrgdskASMKqyNNo2mf"
pdns_vultr_api_key = "eyyMkv7dpDE0gQz1N2FeyUWGRa9FBHGcqcdSCMaaoe"
pdns_api_key = "f6N7v8ldcqINh4hnAfczEKpA/2g5D+ftzJkQKQz1/G0="
pdns_server_url = "http://100.119.7.112:8081"

View file

@ -7,7 +7,6 @@ variable "vultr_api_key" {
}
# Proxmox Variables
variable "proxmox_api_url" {
description = "Proxmox API URL"
@ -172,25 +171,6 @@ variable "porkbun_secret_api_key" {
sensitive = true
}
variable "pdns_api_key" {
description = "PowerDNS API key"
type = string
sensitive = true
}
variable "pdns_server_url" {
description = "PowerDNS server URL"
type = string
default = "http://ns1.vntx.net:8081"
}
variable "pdns_vultr_api_key" {
description = "PowerDNS Vultr API key"
type = string
sensitive = true
}
# Legacy Proxmox Variables (from vars.tf)
variable "proxmox_host" {
description = "Proxmox host for VM deployment"
type = string
@ -225,3 +205,14 @@ variable "token_id" {
description = "Proxmox token ID"
type = string
}
variable "pdns_api_key" {
description = "PowerDNS API key"
type = string
sensitive = true
}
variable "pdns_server_url" {
description = "PowerDNS server URL"
type = string
}