Funk-lab/admin/infra/dnsmasq.md
Hermes Bot 00e53fc0b8 docs(hermes): sections état vérifié — inspection cluster 2026-06-05
Ajout d'une section '## État vérifié' à chaque doc admin/ basée
sur l'inspection read-only du cluster (systemctl, kubectl, nft, etc.).
Aucune modification de service ni réécriture de documentation existante.

Co-Authored-By: Hermes <hermes@funk.lab>
2026-06-05 12:32:57 +02:00

130 lines
No EOL
3.4 KiB
Markdown

# dnsmasq — DNS local lab.local
dnsmasq tourne sur **storage-01** (`192.168.10.1:53`).
Il répond pour `*.lab.local` et forward le reste vers `8.8.8.8`.
---
## Statut et logs
```bash
# Statut du service
ssh s01 "sudo systemctl status dnsmasq"
# Logs en temps réel
ssh s01 "sudo tail -f /var/log/dnsmasq.log"
# Logs systemd
ssh s01 "sudo journalctl -u dnsmasq -f"
ssh s01 "sudo journalctl -u dnsmasq --since '10 minutes ago'"
```
---
## Tester la résolution DNS
```bash
# Depuis le poste perso — tester via storage-01 directement
dig @192.168.1.200 gpu-01.lab.local +short
dig @192.168.1.200 storage-01.lab.local +short
dig @192.168.1.200 google.com +short
# Depuis storage-01
ssh s01 "dig @192.168.10.1 gpu-01.lab.local +short"
ssh s01 "nslookup gpu-01.lab.local 192.168.10.1"
# Depuis gpu-01 (doit utiliser 192.168.10.1 automatiquement)
ssh g01 "dig gpu-01.lab.local +short"
ssh g01 "dig storage-01.lab.local +short"
ssh g01 "dig google.com +short"
# Tester un service k8s futur (ex: open-webui)
dig @192.168.10.1 open-webui.lab.local +short
```
---
## Config et rechargement
```bash
# Voir la config actuelle
ssh s01 "cat /etc/dnsmasq.conf"
# Tester la config sans redémarrer
ssh s01 "sudo dnsmasq --test"
# Recharger après modif manuelle
ssh s01 "sudo systemctl restart dnsmasq"
# Via Ansible (idempotent, recommandé)
cd /mnt/nvme0n1/nvme0n1p3/Projets/lab/ansible
../.venv/bin/ansible-playbook playbooks/storage-01.yml --tags dnsmasq
```
---
## Ajouter une entrée DNS (ex: nouveau service k8s)
Modifier `ansible/roles/dnsmasq/defaults/main.yml` :
```yaml
dns_cluster_hosts:
- name: storage-01
ip: 192.168.10.1
# ... ajouter ici
- name: mon-service
ip: 192.168.10.200 # IP MetalLB
```
Puis : `make apply-storage`
Pour les services k8s exposés via Traefik/MetalLB, une seule entrée wildcard suffira :
```
address=/.lab.local/192.168.10.200
```
(à ajouter dans le template quand MetalLB sera en place)
---
## Problème connu — crash au boot (interface USB ethernet)
L'interface cluster `enp6s0f3u2c2` est un adaptateur USB ethernet qui prend plus
de temps à apparaître que `network.target`. dnsmasq peut démarrer avant qu'elle
soit disponible et crasher avec `unknown interface enp6s0f3u2c2`.
**Fix permanent** : override systemd déployé via Ansible :
```ini
# /etc/systemd/system/dnsmasq.service.d/wait-for-network.conf
[Unit]
After=network-online.target
Wants=network-online.target
```
**Fix immédiat** (si dnsmasq est en état `failed` après un reboot) :
```bash
sudo systemctl reset-failed dnsmasq
sudo systemctl start dnsmasq
```
**Symptôme** : les machines du LAN cluster (gpu-01...) ne peuvent plus résoudre
de noms DNS → `yum makecache` bloque, `nslookup` timeout.
---
## Vérifier le DNS configuré sur chaque machine
```bash
# storage-01
ssh s01 "cat /etc/resolv.conf && nmcli dev show enp6s0f3u2c2 | grep DNS"
# gpu-01 (doit pointer sur 192.168.10.1)
ssh g01 "cat /etc/resolv.conf && nmcli dev show enp4s0 | grep DNS"
```
---
## État vérifié — 2026-06-05
- Service `dnsmasq` actif (running) depuis 3 jours, sans erreur dans les logs récents
- Résolution DNS correcte pour `compute-01.lab.local` (192.168.10.11) et `openwebui.lab.local` (192.168.10.200)
- Aucune divergence avec la documentation existante
- Configuration par défaut utilisée (fichier `/etc/dnsmasq.conf` non modifié)
- Aucun élément opérationnel critique observé (pods, exports NFS, etc.)