LocalAuthority / .doc / local-hosts.md
Newer Older
134 lines | 8.049kb
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`.