|
Xdev Host Manager
authored
a week ago
|
1
|
# Adăugare hosturi locale — madagascar network
|
|
|
2
|
|
|
Xdev Host Manager
authored
a week ago
|
3
|
Rețeaua madagascar folosește un **DNS intern dual**: jumper (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
|
Numele vechi `is-vpn-gw` este deprecated. Folosește `jumper` sau `jumper.madagascar.xdev.ro` în scripturi și documentație.
|
|
Xdev Host Manager
authored
a week ago
|
6
|
|
|
|
7
|
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`.
|
|
|
8
|
|
|
|
9
|
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.
|
|
|
10
|
|
|
|
11
|
## De ce dual?
|
|
|
12
|
|
|
Xdev Host Manager
authored
a week ago
|
13
|
Jumper 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.
|
|
Xdev Host Manager
authored
a week ago
|
14
|
|
|
|
15
|
## Unde se adaugă
|
|
|
16
|
|
|
|
17
|
| Loc | Fișier | Rol |
|
|
|
18
|
|-----|--------|-----|
|
|
Xdev Host Manager
authored
a week ago
|
19
|
| jumper `/etc/hosts` | resolver principal, precedență maximă față de dnscrypt-proxy | Funcționează și când dnscrypt-proxy e down |
|
|
|
20
|
| jumper `/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 |
|
|
|
21
|
| as01 `/ip dns static` (MikroTik) | fallback când jumper e oprit | as01 servește direct din cache static propriu |
|
|
Xdev Host Manager
authored
a week ago
|
22
|
|
|
|
23
|
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`.
|
|
|
24
|
|
|
|
25
|
Implementarea versionată este:
|
|
|
26
|
|
|
|
27
|
| Fișier | Rol |
|
|
|
28
|
|--------|-----|
|
|
Bogdan Timofte
authored
4 days ago
|
29
|
| `var/host-manager.sqlite` | sursa de adevăr runtime pentru registry și Work Orders |
|
|
|
30
|
| `config/hosts.yaml` | seed/snapshot export pentru hosturi și FQDN-uri canonice |
|
|
Bogdan Timofte
authored
4 days ago
|
31
|
| `config/local-hosts.tsv` | export DNS generat din registry-ul SQLite, cu A records pentru hosturi/aliasuri de host și CNAME records pentru vhosturi |
|
|
|
32
|
| `scripts/sync_local_hosts.sh` | citește manifestul DNS din SQLite-ul runtime de pe jumper și sincronizează `/etc/hosts`, `cloaking-rules.txt` și `/ip dns static` |
|
|
Xdev Host Manager
authored
a week ago
|
33
|
|
|
Bogdan Timofte
authored
4 days ago
|
34
|
`madagascar.xdev.ro` este domeniul implicit. Pentru orice host real `*.madagascar.xdev.ro`, aliasul scurt este derivat automat. De exemplu, `autonas01.madagascar.xdev.ro` publică și `autonas01`. Vhosturile, de exemplu `pmx.baobab.madagascar.xdev.ro`, se publică drept CNAME către hostul care le servește; aliasul scurt derivat, de exemplu `pmx.baobab`, este tot CNAME. Aliasurile derivate nu se declară separat în registry.
|
|
Xdev Host Manager
authored
a week ago
|
35
|
|
|
Xdev Host Manager
authored
a week ago
|
36
|
## Ierarhia surselor
|
|
|
37
|
|
|
|
38
|
Când inventarele se contrazic, ordinea de încredere este:
|
|
|
39
|
|
|
|
40
|
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.
|
|
|
41
|
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`.
|
|
Bogdan Timofte
authored
4 days ago
|
42
|
3. `var/host-manager.sqlite` — registry-ul operațional aprobat, editat prin Madagascar Local Authority.
|
|
Bogdan Timofte
authored
4 days ago
|
43
|
4. `config/local-hosts.tsv` — manifestul DNS local publicat pe jumper și as01. Acesta este un export al registry-ului SQLite și nu sursa primară pentru sync; sincronizarea citește manifestul runtime de pe jumper.
|
|
Bogdan Timofte
authored
4 days ago
|
44
|
5. `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.
|
|
|
45
|
6. 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`.
|
|
|
46
|
7. 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.
|
|
Xdev Host Manager
authored
a week ago
|
47
|
|
|
|
48
|
Reguli de împăcare:
|
|
|
49
|
|
|
|
50
|
- Pentru un IP de LAN, DHCP câștigă în fața oricărei valori hardcodate în inventare.
|
|
|
51
|
- Pentru un IP de serviciu non-LAN, `madagascar.json` câștigă dacă explică explicit interfața sau rolul.
|
|
|
52
|
- Pentru VM-uri, regula `vmid -> 192.168.2.vmid` este convenție de propunere și audit, nu autoritate. Rezervarea DHCP finală decide.
|
|
|
53
|
- 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.
|
|
|
54
|
- Dacă o sursă observată există doar în mDNS sau doar în lease-uri dinamice, se raportează ca propunere, nu se sincronizează automat în DNS.
|
|
|
55
|
|
|
Bogdan Timofte
authored
5 days ago
|
56
|
## Listener mDNS
|
|
|
57
|
|
|
Bogdan Timofte
authored
4 days ago
|
58
|
`scripts/mdns_host_seed.pl` ascultă multicast mDNS pe `224.0.0.251:5353`, colectează recorduri `A` pentru nume `*.local` din intervale private/link-local și seeduiește baza runtime SQLite.
|
|
Bogdan Timofte
authored
5 days ago
|
59
|
|
|
|
60
|
Locația implicită:
|
|
|
61
|
|
|
|
62
|
```text
|
|
Bogdan Timofte
authored
4 days ago
|
63
|
var/host-manager.sqlite#mdns_observations
|
|
Bogdan Timofte
authored
5 days ago
|
64
|
```
|
|
|
65
|
|
|
Bogdan Timofte
authored
4 days ago
|
66
|
Regulă importantă: listenerul mDNS scrie doar în tabelul `mdns_observations`; nu modifică registry-ul de hosturi, `config/hosts.yaml` sau `config/local-hosts.tsv`. Seed-ul mDNS rămâne observație separată până la review.
|
|
Bogdan Timofte
authored
5 days ago
|
67
|
|
|
|
68
|
Rulare manuală pentru test:
|
|
|
69
|
|
|
|
70
|
```bash
|
|
|
71
|
perl scripts/mdns_host_seed.pl --verbose --once --timeout 120
|
|
|
72
|
```
|
|
|
73
|
|
|
|
74
|
Dry-run:
|
|
|
75
|
|
|
|
76
|
```bash
|
|
|
77
|
perl scripts/mdns_host_seed.pl --dry-run --verbose --timeout 30
|
|
|
78
|
```
|
|
|
79
|
|
|
|
80
|
Pe jumper, listenerul poate rula ca serviciu separat:
|
|
|
81
|
|
|
|
82
|
```bash
|
|
|
83
|
sudo install -m 0644 deploy/jumper/host-manager-mdns.service /etc/systemd/system/host-manager-mdns.service
|
|
|
84
|
sudo systemctl daemon-reload
|
|
|
85
|
sudo systemctl enable --now host-manager-mdns
|
|
|
86
|
```
|
|
|
87
|
|
|
Xdev Host Manager
authored
a week ago
|
88
|
Pe jumper, 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.
|
|
Xdev Host Manager
authored
a week ago
|
89
|
|
|
|
90
|
`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`.
|
|
|
91
|
|
|
|
92
|
Rulează întâi dry-run:
|
|
|
93
|
|
|
|
94
|
```bash
|
|
|
95
|
./scripts/sync_local_hosts.sh
|
|
|
96
|
```
|
|
|
97
|
|
|
|
98
|
Aplică și verifică:
|
|
|
99
|
|
|
|
100
|
```bash
|
|
|
101
|
./scripts/sync_local_hosts.sh --apply --verify
|
|
|
102
|
```
|
|
|
103
|
|
|
|
104
|
## Pași pentru un hostname nou
|
|
|
105
|
|
|
|
106
|
```bash
|
|
Bogdan Timofte
authored
4 days ago
|
107
|
# 1. Adaugă hostul în Madagascar Local Authority.
|
|
|
108
|
# Aplicația păstrează registry-ul în var/host-manager.sqlite.
|
|
Xdev Host Manager
authored
a week ago
|
109
|
|
|
|
110
|
# 2. Aplică pe ambele resolvere
|
|
|
111
|
./scripts/sync_local_hosts.sh --apply --verify
|
|
|
112
|
|
|
|
113
|
# 3. Verificare manuală, dacă e nevoie
|
|
Xdev Host Manager
authored
a week ago
|
114
|
dig @192.168.2.100 host.madagascar.xdev.ro +short # via jumper
|
|
Xdev Host Manager
authored
a week ago
|
115
|
dig @192.168.2.2 host.madagascar.xdev.ro +short # via as01
|
|
|
116
|
|
|
|
117
|
# 4. Verificare negativă: numele inexistente nu trebuie să se rezolve
|
|
|
118
|
dig @192.168.2.100 nohost.madagascar.xdev.ro +short
|
|
|
119
|
dig @192.168.2.2 nohost.madagascar.xdev.ro +short
|
|
|
120
|
```
|
|
|
121
|
|
|
|
122
|
Comenzile negative de mai sus trebuie să întoarcă output gol, iar cu `+comments` statusul trebuie să fie `NXDOMAIN`.
|
|
|
123
|
|
|
Bogdan Timofte
authored
4 days ago
|
124
|
## Politica de adresare
|
|
|
125
|
|
|
|
126
|
Registry-ul de cluster publică un singur IP rutabil pentru fiecare host. Micromanagement-ul local, inclusiv orice intrări `127.0.0.1 localhost localhost.localdomain` sau override-uri locale pe host, nu se administrează din Madagascar Local Authority.
|
|
|
127
|
|
|
Xdev Host Manager
authored
a week ago
|
128
|
## Hosturi speciale — excepții
|
|
|
129
|
|
|
Xdev Host Manager
authored
a week ago
|
130
|
| Hostname | /etc/hosts pe jumper | cloaking-rules | Motiv |
|
|
Xdev Host Manager
authored
a week ago
|
131
|
|----------|------------------------|----------------|-------|
|
|
Xdev Host Manager
authored
a week ago
|
132
|
| `mazeri.madagascar.xdev.ro` | 192.168.2.102 | 192.168.2.102 | Mașina Debian la .102, separată de jumper chiar dacă Exim folosește acest hostname |
|
|
Bogdan Timofte
authored
4 days ago
|
133
|
| `jumper.madagascar.xdev.ro` | 192.168.2.100 | 192.168.2.100 | Registry-ul publică doar adresa rutabilă; orice comportament local special rămâne responsabilitatea hostului |
|
|
Xdev Host Manager
authored
a week ago
|
134
|
|
|
|
135
|
## Hosturi existente
|
|
|
136
|
|
|
|
137
|
| Hostname | IP |
|
|
|
138
|
|----------|----|
|
|
|
139
|
| `baobab.madagascar.xdev.ro` | 192.168.10.91 |
|
|
|
140
|
| `mazeri.madagascar.xdev.ro` | 192.168.2.102 |
|
|
Bogdan Timofte
authored
4 days ago
|
141
|
| `jumper.madagascar.xdev.ro` | 192.168.2.100 |
|
|
Xdev Host Manager
authored
a week ago
|
142
|
| `hosts.madagascar.xdev.ro` | 192.168.2.100 (vhost nginx pe jumper) |
|
|
|
143
|
| `zabbix.madagascar.xdev.ro` | 192.168.2.107 |
|
|
|
144
|
| `toltec.madagascar.xdev.ro` | 192.168.2.103 |
|
|
|
145
|
| `ebony.madagascar.xdev.ro` | 192.168.10.92 |
|
|
|
146
|
| `tapia.madagascar.xdev.ro` | 192.168.10.93 |
|
|
|
147
|
| `autonas01.madagascar.xdev.ro` | 192.168.10.21 |
|
|
|
148
|
| `autonas02.madagascar.xdev.ro` | 192.168.10.22 |
|
|
|
149
|
| `anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
|
|
|
150
|
| `andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
|
|
|
151
|
| `pmx.baobab.madagascar.xdev.ro` | 192.168.10.91 |
|
|
|
152
|
| `pmx.ebony.madagascar.xdev.ro` | 192.168.10.92 |
|
|
|
153
|
| `pmx.tapia.madagascar.xdev.ro` | 192.168.10.93 |
|
|
|
154
|
| `pbs.anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
|
|
|
155
|
| `pbs.andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
|
|
|
156
|
|
|
|
157
|
## Verificări obligatorii după modificări
|
|
|
158
|
|
|
|
159
|
```bash
|
|
|
160
|
# Host real: trebuie să întoarcă IP intern pe ambele resolvere
|
|
|
161
|
dig @192.168.2.100 baobab.madagascar.xdev.ro +short
|
|
|
162
|
dig @192.168.2.2 baobab.madagascar.xdev.ro +short
|
|
|
163
|
|
|
|
164
|
# Host inexistent: trebuie să rămână nerezolvat local
|
|
|
165
|
dig @192.168.2.100 nohost.madagascar.xdev.ro +noall +comments
|
|
|
166
|
dig @192.168.2.2 nohost.madagascar.xdev.ro +noall +comments
|
|
|
167
|
```
|
|
|
168
|
|
|
|
169
|
## DNS public (zones/xdev.ro.zone)
|
|
|
170
|
|
|
|
171
|
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.
|
|
|
172
|
|
|
|
173
|
> 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`.
|