LocalAuthority / .doc / local-hosts.md
Newer Older
136 lines | 8.142kb
Xdev Host Manager authored 2 days ago
1
# Adăugare hosturi locale — madagascar network
2

            
Xdev Host Manager authored 2 days 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 2 days 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 2 days 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 2 days ago
14

            
15
## Unde se adaugă
16

            
17
| Loc | Fișier | Rol |
18
|-----|--------|-----|
Xdev Host Manager authored 2 days 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 2 days 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 2 days 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 2 days ago
31
| `scripts/sync_local_hosts.sh` | generează și sincronizează `/etc/hosts`, `cloaking-rules.txt` și `/ip dns static` |
32

            
Xdev Host Manager authored 2 days 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 2 days 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 2 days 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 2 days 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

            
Xdev Host Manager authored 2 days ago
54
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 2 days ago
55

            
56
`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`.
57

            
58
Rulează întâi dry-run:
59

            
60
```bash
61
./scripts/sync_local_hosts.sh
62
```
63

            
64
Aplică și verifică:
65

            
66
```bash
67
./scripts/sync_local_hosts.sh --apply --verify
68
```
69

            
70
## Pași pentru un hostname nou
71

            
72
```bash
73
# 1. Adaugă hostul în config/local-hosts.tsv
74
# Format: hosts_ip<TAB>dns_ip<TAB>name alias...
75
192.168.2.XXX   192.168.2.XXX   host.madagascar.xdev.ro host
76

            
77
# 2. Aplică pe ambele resolvere
78
./scripts/sync_local_hosts.sh --apply --verify
79

            
80
# 3. Verificare manuală, dacă e nevoie
Xdev Host Manager authored 2 days ago
81
dig @192.168.2.100 host.madagascar.xdev.ro +short   # via jumper
Xdev Host Manager authored 2 days ago
82
dig @192.168.2.2   host.madagascar.xdev.ro +short   # via as01
83

            
84
# 4. Verificare negativă: numele inexistente nu trebuie să se rezolve
85
dig @192.168.2.100 nohost.madagascar.xdev.ro +short
86
dig @192.168.2.2   nohost.madagascar.xdev.ro +short
87
```
88

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

            
91
## Hosturi speciale — excepții
92

            
Xdev Host Manager authored 2 days ago
93
| Hostname | /etc/hosts pe jumper | cloaking-rules | Motiv |
Xdev Host Manager authored 2 days ago
94
|----------|------------------------|----------------|-------|
Xdev Host Manager authored 2 days ago
95
| `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 |
96
| `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 2 days ago
97

            
98
## Hosturi existente
99

            
100
| Hostname | IP |
101
|----------|----|
102
| `baobab.madagascar.xdev.ro` | 192.168.10.91 |
103
| `mazeri.madagascar.xdev.ro` | 192.168.2.102 |
104
| `jumper.madagascar.xdev.ro` | 192.168.2.100 (127.0.0.1 local) |
105
| `hosts.madagascar.xdev.ro` | 192.168.2.100 (vhost nginx pe jumper) |
106
| `zabbix.madagascar.xdev.ro` | 192.168.2.107 |
107
| `toltec.madagascar.xdev.ro` | 192.168.2.103 |
108
| `ebony.madagascar.xdev.ro` | 192.168.10.92 |
109
| `tapia.madagascar.xdev.ro` | 192.168.10.93 |
110
| `autonas01.madagascar.xdev.ro` | 192.168.10.21 |
111
| `autonas02.madagascar.xdev.ro` | 192.168.10.22 |
112
| `anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
113
| `andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
114
| `pmx.baobab.madagascar.xdev.ro` | 192.168.10.91 |
115
| `pmx.ebony.madagascar.xdev.ro` | 192.168.10.92 |
116
| `pmx.tapia.madagascar.xdev.ro` | 192.168.10.93 |
117
| `pbs.anjothibe.madagascar.xdev.ro` | 192.168.2.95 |
118
| `pbs.andrafiabe.madagascar.xdev.ro` | 192.168.2.96 |
119

            
120
## Verificări obligatorii după modificări
121

            
122
```bash
123
# Host real: trebuie să întoarcă IP intern pe ambele resolvere
124
dig @192.168.2.100 baobab.madagascar.xdev.ro +short
125
dig @192.168.2.2   baobab.madagascar.xdev.ro +short
126

            
127
# Host inexistent: trebuie să rămână nerezolvat local
128
dig @192.168.2.100 nohost.madagascar.xdev.ro +noall +comments
129
dig @192.168.2.2   nohost.madagascar.xdev.ro +noall +comments
130
```
131

            
132
## DNS public (zones/xdev.ro.zone)
133

            
134
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.
135

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