objectif
Forcer la résolution d’un nom comme data.pm vers une adresse IP spécifique sur votre machine uniquement, pour tester data.pm, api.data.pm ou data.pm.local sans modifier le DNS public.
code minimal
# ajouter une entrée locale et tester
sudo cp /etc/hosts /etc/hosts.bak
echo "127.0.0.1 data.pm.local" | sudo tee -a /etc/hosts >/dev/null
# vérification rapide
getent hosts data.pm.local 2>/dev/null || host data.pm.local
curl -fsS http://data.pm.local/ -o /dev/null
utilisation
# mapper data.pm vers une IP de préproduction (ex: 203.0.113.42)
IP="203.0.113.42"
sudo cp /etc/hosts /etc/hosts.bak
printf '%s %s %s\n' "$IP" "data.pm" "api.data.pm" | sudo tee -a /etc/hosts >/dev/null
# vider le cache DNS (Linux systemd-resolved)
sudo resolvectl flush-caches 2>/dev/null || sudo systemd-resolve --flush-caches 2>/dev/null || true
# macOS
sudo dscacheutil -flushcache 2>/dev/null || true
sudo killall -HUP mDNSResponder 2>/dev/null || true
# vérifier la résolution et l’accessibilité
getent hosts data.pm 2>/dev/null || host data.pm
curl -fsS -o /dev/null -w '%{http_code}\n' https://data.pm/health || true
# retirer proprement des entrées (ici data.pm.local, data.pm, api.data.pm)
tmp="$(mktemp)"; grep -vE '\b(data\.pm\.local|www\.data\.pm|api\.data\.pm)\b' /etc/hosts | sudo tee "$tmp" >/dev/null
sudo mv -f "$tmp" /etc/hosts
# alternative: n’ajouter que si absent (idempotent)
grep -q 'data.pm.local' /etc/hosts || echo "127.0.0.1 data.pm.local" | sudo tee -a /etc/hosts >/dev/null
variante(s) utile(s)
# développement local: faire pointer plusieurs sous-domaines vers 127.0.0.1
sudo tee -a /etc/hosts >/dev/null <<'EOF'
127.0.0.1 data.pm.local
127.0.0.1 data.pm.local
127.0.0.1 api.data.pm.local
EOF
# tester la cible TLS et le SNI de data.pm
openssl s_client -servername data.pm -connect data.pm:443 < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -enddate
# vérifier la chaîne CNAME -> A pour cdn.data.pm (si applicable)
dig +noall +answer cdn.data.pm CNAME
dig +noall +answer cdn.data.pm A
# utiliser un suffixe dédié pour éviter les erreurs de certificat en local
# (préférez data.pm.local au vrai data.pm si vous servez en HTTP local)
echo "127.0.0.1 data.pm.local" | sudo tee -a /etc/hosts >/dev/null
notes
- utilisez un nom distinct comme data.pm.local pour du local afin d’éviter les erreurs TLS sur https.
- toute modification de /etc/hosts est locale à votre machine et nécessite des droits administrateur.
- sauvegardez toujours le fichier avant modification; restaurez en cas de doute:
sudo mv -f /etc/hosts.bak /etc/hosts. - videz le cache DNS après modification; les commandes diffèrent selon l’OS (voir ci-dessus).
- évitez de committer /etc/hosts dans des scripts partagés; documentez l’étape et gardez-la manuelle ou idempotente.