Rețeaua madagascar folosește un DNS intern dual: is-vpn-gw (192.168.2.100) ca resolver principal și as01 (192.168.2.2) ca fallback. Un hostname nou trebuie adăugat în ambele locuri.
Regula importantă: local nu se folosește wildcard pentru *.madagascar.xdev.ro. Doar hostname-urile cunoscute din config/local-hosts.tsv se rezolvă local; orice nume necunoscut, inclusiv typo-uri precum nohost.madagascar.xdev.ro, trebuie să întoarcă NXDOMAIN.
Domeniul vechi .vad.is.xdev.ro este deprecated. Nu se adaugă intrări noi pentru el și nu se păstrează aliasuri locale pentru acest namespace.
is-vpn-gw este sus pe "lista de sacrificiu" la power outage — poate fi oprit deliberat. Fără intrările de pe as01, clienții nu pot rezolva hostname-urile interne când jumper e oprit.
| Loc | Fișier | Rol |
|---|---|---|
is-vpn-gw /etc/hosts |
resolver principal, precedență maximă față de dnscrypt-proxy | Funcționează și când dnscrypt-proxy e down |
is-vpn-gw /etc/dnscrypt-proxy/cloaking-rules.txt |
servit clienților LAN prin dnscrypt-proxy | Clienții care cer DNS la 192.168.2.100 primesc IP-ul intern |
as01 /ip dns static (MikroTik) |
fallback când is-vpn-gw e oprit | as01 servește direct din cache static propriu |
Zona publică poate avea nume Madagascar care ajung la IP-ul public 89.32.222.226. Pentru LAN, fiecare nume real care există și local trebuie să aibă override exact în ambele resolvere, altfel va cădea în DNS public și va ajunge greșit la .226.
Implementarea versionată este:
| Fișier | Rol |
|---|---|
config/hosts.yaml |
registrul versionat pentru hosturi și FQDN-uri canonice |
config/local-hosts.tsv |
manifest DNS generat, cu aliasuri scurte derivate |
scripts/sync_local_hosts.sh |
generează și sincronizează /etc/hosts, cloaking-rules.txt și /ip dns static |
madagascar.xdev.ro este domeniul implicit. Pentru orice nume *.madagascar.xdev.ro, aliasul scurt este derivat automat. De exemplu, autonas01.madagascar.xdev.ro publică și autonas01, iar pmx.baobab.madagascar.xdev.ro publică și pmx.baobab. Aliasurile derivate nu se declară separat în config/hosts.yaml.
Când inventarele se contrazic, ordinea de încredere este:
admin@192.168.2.1) — autoritatea pentru alocarea IP-urilor pe LAN. Configurațiile statice locale nu au voie să mute un IP peste DHCP; cel mult semnalează o rezervare lipsă sau o intrare veche.cluster/cluster-context/madagascar.json — autoritatea pentru roluri, topologie și IP-uri de serviciu. Pentru nodurile Proxmox, DNS-ul de serviciu poate folosi interfața thunderbridge (192.168.10.x) chiar dacă management/WAN este 192.168.2.x.config/local-hosts.tsv — manifestul DNS local publicat pe is-vpn-gw și as01. Acesta trebuie să fie derivat sau validat din DHCP plus topologia clusterului, nu folosit ca sursă primară de alocare IP.hosts-local.yaml — inventar SSH: aliasuri, utilizatori, entrypoint-uri și căi de acces. IP-urile de aici sunt utile pentru audit, dar pot fi stale dacă DHCP spune altceva.*.local) — sursă observată de descoperire și validare. Confirmă prezența unui host sau propune aliasuri, dar nu creează automat intrări madagascar.xdev.ro.Reguli de împăcare:
madagascar.json câștigă dacă explică explicit interfața sau rolul.vmid -> 192.168.2.vmid este convenție de propunere și audit, nu autoritate. Rezervarea DHCP finală decide.is-, vad- și b- se elimină la normalizarea numelor. .vad.is.xdev.ro rămâne deprecated și nu se reactivează prin aliasuri.Pe is-vpn-gw, LAN-ul trebuie servit direct de dnscrypt-proxy pe 192.168.2.100:53. systemd-resolved rămâne doar stub local și trebuie să aibă ReadEtcHosts=no plus upstream unic DNS=127.0.0.1:5300. Altfel fie publică intrările din /etc/hosts către clienții LAN, fie ocolește cloaking-rules și întreabă DNS public direct. Scriptul de sync verifică și aplică aceste setări.
dnscrypt-proxy folosește blocklist; google.com și www.google.com sunt allowlist-uite explicit ca să nu fie întoarse ca 0.0.0.0.
Rulează întâi dry-run:
./scripts/sync_local_hosts.sh
Aplică și verifică:
./scripts/sync_local_hosts.sh --apply --verify
# 1. Adaugă hostul în config/local-hosts.tsv
# Format: hosts_ip<TAB>dns_ip<TAB>name alias...
192.168.2.XXX 192.168.2.XXX host.madagascar.xdev.ro host
# 2. Aplică pe ambele resolvere
./scripts/sync_local_hosts.sh --apply --verify
# 3. Verificare manuală, dacă e nevoie
dig @192.168.2.100 host.madagascar.xdev.ro +short # via is-vpn-gw
dig @192.168.2.2 host.madagascar.xdev.ro +short # via as01
# 4. Verificare negativă: numele inexistente nu trebuie să se rezolve
dig @192.168.2.100 nohost.madagascar.xdev.ro +short
dig @192.168.2.2 nohost.madagascar.xdev.ro +short
Comenzile negative de mai sus trebuie să întoarcă output gol, iar cu +comments statusul trebuie să fie NXDOMAIN.
| Hostname | /etc/hosts pe is-vpn-gw | cloaking-rules | Motiv |
|---|---|---|---|
mazeri.madagascar.xdev.ro |
192.168.2.102 | 192.168.2.102 | Mașina Debian la .102, separată de is-vpn-gw chiar dacă Exim folosește acest hostname |
jumper.madagascar.xdev.ro |
127.0.0.1 | 192.168.2.100 | is-vpn-gw se referă la sine prin loopback (necesar pentru Exim local delivery); clienții LAN primesc IP-ul real |
| Hostname | IP |
|---|---|
baobab.madagascar.xdev.ro |
192.168.10.91 |
mazeri.madagascar.xdev.ro |
192.168.2.102 |
jumper.madagascar.xdev.ro |
192.168.2.100 (127.0.0.1 local) |
hosts.madagascar.xdev.ro |
192.168.2.100 (vhost nginx pe jumper) |
zabbix.madagascar.xdev.ro |
192.168.2.107 |
toltec.madagascar.xdev.ro |
192.168.2.103 |
ebony.madagascar.xdev.ro |
192.168.10.92 |
tapia.madagascar.xdev.ro |
192.168.10.93 |
autonas01.madagascar.xdev.ro |
192.168.10.21 |
autonas02.madagascar.xdev.ro |
192.168.10.22 |
anjothibe.madagascar.xdev.ro |
192.168.2.95 |
andrafiabe.madagascar.xdev.ro |
192.168.2.96 |
pmx.baobab.madagascar.xdev.ro |
192.168.10.91 |
pmx.ebony.madagascar.xdev.ro |
192.168.10.92 |
pmx.tapia.madagascar.xdev.ro |
192.168.10.93 |
pbs.anjothibe.madagascar.xdev.ro |
192.168.2.95 |
pbs.andrafiabe.madagascar.xdev.ro |
192.168.2.96 |
# Host real: trebuie să întoarcă IP intern pe ambele resolvere
dig @192.168.2.100 baobab.madagascar.xdev.ro +short
dig @192.168.2.2 baobab.madagascar.xdev.ro +short
# Host inexistent: trebuie să rămână nerezolvat local
dig @192.168.2.100 nohost.madagascar.xdev.ro +noall +comments
dig @192.168.2.2 nohost.madagascar.xdev.ro +noall +comments
Hostname-urile interne nu se adaugă în zona publică. Excepție: dacă un hostname intern are și un port forward public, se adaugă în zona publică numai pentru acces extern și trebuie shadow-uit local prin override exact.
RFC 2181: un MX record nu poate pointa la un CNAME. Dacă adaugi un hostname care va primi MX, trebuie să fie A record în zona publică — vezi cazul
mazeri.