LocalAuthority / .doc / local-hosts.md
Newer Older
168 lines | 9.083kb
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
|--------|-----|
Xdev Host Manager authored a week ago
29
| `config/hosts.yaml` | registrul versionat pentru hosturi și FQDN-uri canonice |
30
| `config/local-hosts.tsv` | manifest DNS generat, cu aliasuri scurte derivate |
Xdev Host Manager authored a week ago
31
| `scripts/sync_local_hosts.sh` | generează și sincronizează `/etc/hosts`, `cloaking-rules.txt` și `/ip dns static` |
32

            
Xdev Host Manager authored a week ago
33
`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`.
34

            
Xdev Host Manager authored a week ago
35
## Ierarhia surselor
36

            
37
Când inventarele se contrazic, ordinea de încredere este:
38

            
39
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.
40
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`.
Xdev Host Manager authored a week ago
41
3. `config/local-hosts.tsv` — manifestul DNS local publicat pe jumper și as01. Acesta trebuie să fie derivat sau validat din DHCP plus topologia clusterului, nu folosit ca sursă primară de alocare IP.
Xdev Host Manager authored a week ago
42
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.
43
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`.
44
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.
45

            
46
Reguli de împăcare:
47

            
48
- Pentru un IP de LAN, DHCP câștigă în fața oricărei valori hardcodate în inventare.
49
- Pentru un IP de serviciu non-LAN, `madagascar.json` câștigă dacă explică explicit interfața sau rolul.
50
- Pentru VM-uri, regula `vmid -> 192.168.2.vmid` este convenție de propunere și audit, nu autoritate. Rezervarea DHCP finală decide.
51
- 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.
52
- Dacă o sursă observată există doar în mDNS sau doar în lease-uri dinamice, se raportează ca propunere, nu se sincronizează automat în DNS.
53

            
Bogdan Timofte authored 5 days ago
54
## Listener mDNS
55

            
56
`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 de observații mDNS.
57

            
58
Locația implicită:
59

            
60
```text
61
var/mdns-observations.yaml
62
```
63

            
64
Regulă importantă: `config/hosts.yaml` este un output generat din surse, nu store-ul primar al listenerului. Listenerul mDNS nu modifică `config/hosts.yaml` și nu publică nimic direct în `config/local-hosts.tsv`.
65

            
66
Rulare manuală pentru test:
67

            
68
```bash
69
perl scripts/mdns_host_seed.pl --verbose --once --timeout 120
70
```
71

            
72
Dry-run:
73

            
74
```bash
75
perl scripts/mdns_host_seed.pl --dry-run --verbose --timeout 30
76
```
77

            
78
Pe jumper, listenerul poate rula ca serviciu separat:
79

            
80
```bash
81
sudo install -m 0644 deploy/jumper/host-manager-mdns.service /etc/systemd/system/host-manager-mdns.service
82
sudo systemctl daemon-reload
83
sudo systemctl enable --now host-manager-mdns
84
```
85

            
Xdev Host Manager authored a week ago
86
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
87

            
88
`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`.
89

            
90
Rulează întâi dry-run:
91

            
92
```bash
93
./scripts/sync_local_hosts.sh
94
```
95

            
96
Aplică și verifică:
97

            
98
```bash
99
./scripts/sync_local_hosts.sh --apply --verify
100
```
101

            
102
## Pași pentru un hostname nou
103

            
104
```bash
105
# 1. Adaugă hostul în config/local-hosts.tsv
106
# Format: hosts_ip<TAB>dns_ip<TAB>name alias...
107
192.168.2.XXX   192.168.2.XXX   host.madagascar.xdev.ro host
108

            
109
# 2. Aplică pe ambele resolvere
110
./scripts/sync_local_hosts.sh --apply --verify
111

            
112
# 3. Verificare manuală, dacă e nevoie
Xdev Host Manager authored a week ago
113
dig @192.168.2.100 host.madagascar.xdev.ro +short   # via jumper
Xdev Host Manager authored a week ago
114
dig @192.168.2.2   host.madagascar.xdev.ro +short   # via as01
115

            
116
# 4. Verificare negativă: numele inexistente nu trebuie să se rezolve
117
dig @192.168.2.100 nohost.madagascar.xdev.ro +short
118
dig @192.168.2.2   nohost.madagascar.xdev.ro +short
119
```
120

            
121
Comenzile negative de mai sus trebuie să întoarcă output gol, iar cu `+comments` statusul trebuie să fie `NXDOMAIN`.
122

            
123
## Hosturi speciale — excepții
124

            
Xdev Host Manager authored a week ago
125
| Hostname | /etc/hosts pe jumper | cloaking-rules | Motiv |
Xdev Host Manager authored a week ago
126
|----------|------------------------|----------------|-------|
Xdev Host Manager authored a week ago
127
| `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 |
128
| `jumper.madagascar.xdev.ro` | 127.0.0.1 | 192.168.2.100 | Jumper se referă la sine prin loopback (necesar pentru Exim local delivery); clienții LAN primesc IP-ul real |
Xdev Host Manager authored a week ago
129

            
130
## Hosturi existente
131

            
132
| Hostname | IP |
133
|----------|----|
134
| `baobab.madagascar.xdev.ro` | 192.168.10.91 |
135
| `mazeri.madagascar.xdev.ro` | 192.168.2.102 |
136
| `jumper.madagascar.xdev.ro` | 192.168.2.100 (127.0.0.1 local) |
137
| `hosts.madagascar.xdev.ro` | 192.168.2.100 (vhost nginx pe jumper) |
138
| `zabbix.madagascar.xdev.ro` | 192.168.2.107 |
139
| `toltec.madagascar.xdev.ro` | 192.168.2.103 |
140
| `ebony.madagascar.xdev.ro` | 192.168.10.92 |
141
| `tapia.madagascar.xdev.ro` | 192.168.10.93 |
142
| `autonas01.madagascar.xdev.ro` | 192.168.10.21 |
143
| `autonas02.madagascar.xdev.ro` | 192.168.10.22 |
144
| `anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
145
| `andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
146
| `pmx.baobab.madagascar.xdev.ro` | 192.168.10.91 |
147
| `pmx.ebony.madagascar.xdev.ro` | 192.168.10.92 |
148
| `pmx.tapia.madagascar.xdev.ro` | 192.168.10.93 |
149
| `pbs.anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
150
| `pbs.andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
151

            
152
## Verificări obligatorii după modificări
153

            
154
```bash
155
# Host real: trebuie să întoarcă IP intern pe ambele resolvere
156
dig @192.168.2.100 baobab.madagascar.xdev.ro +short
157
dig @192.168.2.2   baobab.madagascar.xdev.ro +short
158

            
159
# Host inexistent: trebuie să rămână nerezolvat local
160
dig @192.168.2.100 nohost.madagascar.xdev.ro +noall +comments
161
dig @192.168.2.2   nohost.madagascar.xdev.ro +noall +comments
162
```
163

            
164
## DNS public (zones/xdev.ro.zone)
165

            
166
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.
167

            
168
> 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`.