|
Xdev Host Manager
authored
2 days ago
|
1
|
# Adăugare hosturi locale — madagascar network
|
|
|
2
|
|
|
|
3
|
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**.
|
|
|
4
|
|
|
|
5
|
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`.
|
|
|
6
|
|
|
|
7
|
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.
|
|
|
8
|
|
|
|
9
|
## De ce dual?
|
|
|
10
|
|
|
|
11
|
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.
|
|
|
12
|
|
|
|
13
|
## Unde se adaugă
|
|
|
14
|
|
|
|
15
|
| Loc | Fișier | Rol |
|
|
|
16
|
|-----|--------|-----|
|
|
|
17
|
| is-vpn-gw `/etc/hosts` | resolver principal, precedență maximă față de dnscrypt-proxy | Funcționează și când dnscrypt-proxy e down |
|
|
|
18
|
| 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 |
|
|
|
19
|
| as01 `/ip dns static` (MikroTik) | fallback când is-vpn-gw e oprit | as01 servește direct din cache static propriu |
|
|
|
20
|
|
|
|
21
|
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`.
|
|
|
22
|
|
|
|
23
|
Implementarea versionată este:
|
|
|
24
|
|
|
|
25
|
| Fișier | Rol |
|
|
|
26
|
|--------|-----|
|
|
Xdev Host Manager
authored
2 days ago
|
27
|
| `config/hosts.yaml` | registrul versionat pentru hosturi și FQDN-uri canonice |
|
|
|
28
|
| `config/local-hosts.tsv` | manifest DNS generat, cu aliasuri scurte derivate |
|
|
Xdev Host Manager
authored
2 days ago
|
29
|
| `scripts/sync_local_hosts.sh` | generează și sincronizează `/etc/hosts`, `cloaking-rules.txt` și `/ip dns static` |
|
|
|
30
|
|
|
Xdev Host Manager
authored
2 days ago
|
31
|
`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`.
|
|
|
32
|
|
|
Xdev Host Manager
authored
2 days ago
|
33
|
## Ierarhia surselor
|
|
|
34
|
|
|
|
35
|
Când inventarele se contrazic, ordinea de încredere este:
|
|
|
36
|
|
|
|
37
|
1. DHCP lease/reservation pe router (`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.
|
|
|
38
|
2. `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`.
|
|
|
39
|
3. `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.
|
|
|
40
|
4. `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.
|
|
|
41
|
5. mDNS (`*.local`) — sursă observată de descoperire și validare. Confirmă prezența unui host sau propune aliasuri, dar nu creează automat intrări `madagascar.xdev.ro`.
|
|
|
42
|
6. DNS public — folosit doar pentru acces extern. Local, numele interne trebuie shadow-uite exact sau lăsate nerezolvate; wildcard-ul public nu este autoritate pentru LAN.
|
|
|
43
|
|
|
|
44
|
Reguli de împăcare:
|
|
|
45
|
|
|
|
46
|
- Pentru un IP de LAN, DHCP câștigă în fața oricărei valori hardcodate în inventare.
|
|
|
47
|
- Pentru un IP de serviciu non-LAN, `madagascar.json` câștigă dacă explică explicit interfața sau rolul.
|
|
|
48
|
- Pentru VM-uri, regula `vmid -> 192.168.2.vmid` este convenție de propunere și audit, nu autoritate. Rezervarea DHCP finală decide.
|
|
|
49
|
- Prefixele istorice `is-`, `vad-` și `b-` se elimină la normalizarea numelor. `.vad.is.xdev.ro` rămâne deprecated și nu se reactivează prin aliasuri.
|
|
|
50
|
- Dacă o sursă observată există doar în mDNS sau doar în lease-uri dinamice, se raportează ca propunere, nu se sincronizează automat în DNS.
|
|
|
51
|
|
|
|
52
|
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.
|
|
|
53
|
|
|
|
54
|
`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`.
|
|
|
55
|
|
|
|
56
|
Rulează întâi dry-run:
|
|
|
57
|
|
|
|
58
|
```bash
|
|
|
59
|
./scripts/sync_local_hosts.sh
|
|
|
60
|
```
|
|
|
61
|
|
|
|
62
|
Aplică și verifică:
|
|
|
63
|
|
|
|
64
|
```bash
|
|
|
65
|
./scripts/sync_local_hosts.sh --apply --verify
|
|
|
66
|
```
|
|
|
67
|
|
|
|
68
|
## Pași pentru un hostname nou
|
|
|
69
|
|
|
|
70
|
```bash
|
|
|
71
|
# 1. Adaugă hostul în config/local-hosts.tsv
|
|
|
72
|
# Format: hosts_ip<TAB>dns_ip<TAB>name alias...
|
|
|
73
|
192.168.2.XXX 192.168.2.XXX host.madagascar.xdev.ro host
|
|
|
74
|
|
|
|
75
|
# 2. Aplică pe ambele resolvere
|
|
|
76
|
./scripts/sync_local_hosts.sh --apply --verify
|
|
|
77
|
|
|
|
78
|
# 3. Verificare manuală, dacă e nevoie
|
|
|
79
|
dig @192.168.2.100 host.madagascar.xdev.ro +short # via is-vpn-gw
|
|
|
80
|
dig @192.168.2.2 host.madagascar.xdev.ro +short # via as01
|
|
|
81
|
|
|
|
82
|
# 4. Verificare negativă: numele inexistente nu trebuie să se rezolve
|
|
|
83
|
dig @192.168.2.100 nohost.madagascar.xdev.ro +short
|
|
|
84
|
dig @192.168.2.2 nohost.madagascar.xdev.ro +short
|
|
|
85
|
```
|
|
|
86
|
|
|
|
87
|
Comenzile negative de mai sus trebuie să întoarcă output gol, iar cu `+comments` statusul trebuie să fie `NXDOMAIN`.
|
|
|
88
|
|
|
|
89
|
## Hosturi speciale — excepții
|
|
|
90
|
|
|
|
91
|
| Hostname | /etc/hosts pe is-vpn-gw | cloaking-rules | Motiv |
|
|
|
92
|
|----------|------------------------|----------------|-------|
|
|
|
93
|
| `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 |
|
|
|
94
|
| `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 |
|
|
|
95
|
|
|
|
96
|
## Hosturi existente
|
|
|
97
|
|
|
|
98
|
| Hostname | IP |
|
|
|
99
|
|----------|----|
|
|
|
100
|
| `baobab.madagascar.xdev.ro` | 192.168.10.91 |
|
|
|
101
|
| `mazeri.madagascar.xdev.ro` | 192.168.2.102 |
|
|
|
102
|
| `jumper.madagascar.xdev.ro` | 192.168.2.100 (127.0.0.1 local) |
|
|
|
103
|
| `hosts.madagascar.xdev.ro` | 192.168.2.100 (vhost nginx pe jumper) |
|
|
|
104
|
| `zabbix.madagascar.xdev.ro` | 192.168.2.107 |
|
|
|
105
|
| `toltec.madagascar.xdev.ro` | 192.168.2.103 |
|
|
|
106
|
| `ebony.madagascar.xdev.ro` | 192.168.10.92 |
|
|
|
107
|
| `tapia.madagascar.xdev.ro` | 192.168.10.93 |
|
|
|
108
|
| `autonas01.madagascar.xdev.ro` | 192.168.10.21 |
|
|
|
109
|
| `autonas02.madagascar.xdev.ro` | 192.168.10.22 |
|
|
|
110
|
| `anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
|
|
|
111
|
| `andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
|
|
|
112
|
| `pmx.baobab.madagascar.xdev.ro` | 192.168.10.91 |
|
|
|
113
|
| `pmx.ebony.madagascar.xdev.ro` | 192.168.10.92 |
|
|
|
114
|
| `pmx.tapia.madagascar.xdev.ro` | 192.168.10.93 |
|
|
|
115
|
| `pbs.anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
|
|
|
116
|
| `pbs.andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
|
|
|
117
|
|
|
|
118
|
## Verificări obligatorii după modificări
|
|
|
119
|
|
|
|
120
|
```bash
|
|
|
121
|
# Host real: trebuie să întoarcă IP intern pe ambele resolvere
|
|
|
122
|
dig @192.168.2.100 baobab.madagascar.xdev.ro +short
|
|
|
123
|
dig @192.168.2.2 baobab.madagascar.xdev.ro +short
|
|
|
124
|
|
|
|
125
|
# Host inexistent: trebuie să rămână nerezolvat local
|
|
|
126
|
dig @192.168.2.100 nohost.madagascar.xdev.ro +noall +comments
|
|
|
127
|
dig @192.168.2.2 nohost.madagascar.xdev.ro +noall +comments
|
|
|
128
|
```
|
|
|
129
|
|
|
|
130
|
## DNS public (zones/xdev.ro.zone)
|
|
|
131
|
|
|
|
132
|
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.
|
|
|
133
|
|
|
|
134
|
> 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`.
|