Skip to content

Commit 9d397be

Browse files
committed
Dns: introduce dnsdist as resolver, use it for all VMs
1 parent 50da576 commit 9d397be

5 files changed

Lines changed: 65 additions & 3 deletions

File tree

etc/dnsdist/dnsdist-private.conf

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- disable security status polling via DNS
2+
setSecurityPollSuffix("")
3+
4+
setLocal("10.20.0.2:53")
5+
--Public DNS
6+
newServer({address="1.1.1.1"})
7+
newServer({address="8.8.8.8"})
8+
pc = newPacketCache(10000, {maxTTL=86400, minTTL=0, temporaryFailureTTL=60, staleTTL=60, dontAge=false})
9+
getPool(""):setCache(pc)
10+
11+
--Private DNS
12+
newServer({address="127.0.0.1:5300", pool="privatedns", healthCheckMode="up"})
13+
addAction({'local.genesis-core.tech'}, PoolAction("privatedns"))

etc/dnsdist/dnsdist-public.conf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
-- disable security status polling via DNS
2+
setSecurityPollSuffix("")
3+
4+
setLocal("0.0.0.0:5333")
5+
6+
--Private DNS
7+
newServer({address="127.0.0.1:5300", pool="privatedns", healthCheckMode="up"})
8+
--Allow TXT only
9+
smn = newSuffixMatchNode()
10+
smn:add(newDNSName("pdns.platform.genesis-core.tech."));
11+
-- NS
12+
addAction(QNameRule("pdns.platform.genesis-core.tech"), QPSPoolAction(100, "privatedns"))
13+
-- DNS01 acme challenges
14+
addAction(AndRule{SuffixMatchNodeRule(smn), QTypeRule(16), RegexRule("_acme-challenge\\..*")}, QPSPoolAction(100, "privatedns"))

genesis/images/install.sh

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ SDK_DEV_MODE=$([ -d "$DEV_SDK_PATH" ] && echo "true" || echo "false")
3737

3838
# Install packages
3939
sudo apt update
40-
sudo apt install postgresql libev-dev libvirt-dev \
40+
sudo apt install yq postgresql libev-dev libvirt-dev \
4141
tftpd-hpa isc-dhcp-server -y
4242

4343
# Useful for all-in-one-vm tests
@@ -119,9 +119,23 @@ sudo systemctl enable gc-user-api gc-orch-api gc-status-api gc-gservice \
119119
# Prepare DNSaaS
120120

121121
# Install packages
122-
sudo apt install pdns-backend-pgsql pdns-server -y
122+
sudo apt install pdns-backend-pgsql pdns-server dnsdist -y
123123

124+
#pdns
124125
sudo rm /etc/powerdns/pdns.d/bind.conf
125126
sudo cp "$GC_PATH/etc/powerdns/genesis.conf" /etc/powerdns/pdns.d/genesis.conf
126-
127127
sudo systemctl enable pdns
128+
129+
#dnsdist
130+
# EDIT private ip here
131+
sudo cp "$GC_PATH/etc/dnsdist/dnsdist-private.conf" /etc/dnsdist/dnsdist-private.conf
132+
sudo systemctl enable dnsdist@private
133+
134+
# Optional, only for public resolving, for ex. ACME dns01 certs challenge
135+
sudo cp "$GC_PATH/etc/dnsdist/dnsdist-public.conf" /etc/dnsdist/dnsdist-public.conf
136+
sudo systemctl enable dnsdist@public
137+
138+
# Set local IP where needed
139+
LOCAL_IP=$(cat "$GC_PATH/genesis/images/startup_cfg.yaml" | yq '.startup_entities.core_ip' -r)
140+
echo "DNS=${LOCAL_IP}" >> /etc/systemd/resolved.conf
141+
sed -i 's/setLocal("10.20.0.2:53")/setLocal("'"${LOCAL_IP}"':53")/' /etc/dnsdist/dnsdist-private.conf

genesis/images/startup_cfg.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
startup_entities:
2+
core_ip: "10.20.0.2"
3+
domain: "local.genesis-core.tech"
24
machine_pools:
35
- uuid: "2bd17956-600b-4beb-8ddd-9fc4856262e6"
46
name: "default-hw-pool"

genesis_core/cmd/bootstrap.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from restalchemy.common import config_opts as ra_config_opts
2626

2727
from genesis_core.common import config
28+
from genesis_core.user_api.dns.dm import models as dns_models
2829
from genesis_core.node.dm import models
2930
from genesis_core.common import constants as c
3031

@@ -77,6 +78,8 @@ def _apply_startup_db():
7778
ports = subnet.pop("ports", [])
7879
subnet_project_id = subnet.pop("project_id", net_project_id)
7980
subnet["project_id"] = subnet_project_id
81+
if startup_entities.get("domain"):
82+
subnet["dns_servers"] = [startup_entities["core_ip"]]
8083
subnet = models.Subnet.restore_from_simple_view(**subnet)
8184
subnet.network = network.uuid
8285
try:
@@ -109,6 +112,22 @@ def _apply_startup_db():
109112
else:
110113
LOG.info("Created machine pool %s", pool.uuid)
111114

115+
# Dns
116+
if startup_entities.get("domain"):
117+
zone = dns_models.Domain(name=startup_entities["domain"])
118+
zone.insert()
119+
120+
core_record = dns_models.Record(
121+
domain=zone,
122+
ttl=300,
123+
type="A",
124+
record=dns_models.ARecord(
125+
name="core",
126+
address=startup_entities["core_ip"],
127+
),
128+
)
129+
core_record.insert()
130+
112131

113132
def main() -> None:
114133
# Parse config

0 commit comments

Comments
 (0)