voxdemonix : infernalis creatorem (18 janvier 2018 19:21:14)
Introduction
============
Si vous disposez d'une "Box internet" (un routeur de votre [Fournisseur d'Accès Internet](https://fr.wikipedia.org/wiki/Fournisseur_d%27acc%C3%A8s_%C3%A0_Internet)) il est plus que probable que vous n'arriviez pas à joindre le nom de domaine de votre serveur auto-hébergé lorsque vous êtes connecté sur le même réseau [LAN](https://fr.wikipedia.org/wiki/R%C3%A9seau_local).
Ce problème n'est pas un bug mais d'une fonctionnalité ([hairpinning](https://fr.wikipedia.org/wiki/Hairpinning)) volontairement supprimée des box afin de décourager l'auto-hébergement.
En résumé : si chez vous vous disposez d'une machine que vos amis joignent à l'adresse www.helloworld.com, vous, depuis votre réseau LAN, êtes obligé d'entrer son adresse IP fixe (192.168.1.42 par exemple) ou de faire vous-même la correspondance dans votre fichier _/etc/hosts_. Si vous utilisez l'adresse IP dans la barre d'adresse, vous perdez en sécurité (car vous êtes obligé de vérifier vous même les [certificats TLS](https://fr.wikipedia.org/wiki/Transport_Layer_Security) pour [https](https://fr.wikipedia.org/wiki/Https)).
Nous allons voir ici plusieurs méthodes (hacks) pour contrer ce problème.
Note pour la rédaction : se serait pas con d'ouvrir une page wiki pour la version android, windows etc
Méthode 1 : En automatisant la mise à jours du fichiers _/etc/hosts_ (méthode la plus simple).
==================================================================================
**Résumé :** cette méthode est très simple, on va utiliser un scripts et le planificateur de tâche (cron) afin d'automatiser la mise à jours du fichiers _/etc/hosts_
Le script s'appel de la façon suivante :
* _sudo /opt/scripts/updateHost.bash [adresse_IP_LAN] [adresse_MAC] [HOSTNAME] [ip wan (pas obligatoire)]_
Il se résume à une vérification de si la machine est présente sur le LAN ou non et d'éditer le fichiers /etc/hosts pour ajouter ou retirer la correspondance vers le nom de domaine spécifié.
Mise en place
-------------
#### Créez le fichiers _/etc/scripts/updateHost.bash_
```
sudo nano /etc/scripts/updateHost.bash
```
#### Collez le script suivant
```bash
#!/bin/bash
# Version : 1.1 ; Licence WTFPL ; Dev by VoxDemonix
# Infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=9&t=765
# example :
# /path/scripts/updateHost.bash 192.168.1.42 00:11:22:33:44:55 www.linuxfr.org
# uncomment next line for debug
#set -x
ipLAN="$1" # IP Lan of the machine
macLan="$2" # mac address (tape ifconfig for check)
hostnameMachine="$3" # the domain name to insert
ipWAN="$4" # set only for force an ip hostname in wan, unset by default.
fileHosts="/etc/hosts"
function CheckEntryInHosts {
#$hostnameMachine=$1
#$ipMachine=$2
# check if entry is not already in the /etc/hosts
if [ "$(cat $fileHosts | grep $1 | grep -o $2)" == "$2" ];then
# detected
echo "1"
else
# not detected
echo "0"
fi
}
# check machine is on LAN
ping $ipLAN -c 2 >> /dev/null 2>&1
macRecover=$(arp -n | grep -i -o $macLan)
if [ "$macRecover" == "$macLan" ]; then
# echo "local/LAN"
if [ $(CheckEntryInHosts "$hostnameMachine" "$ipLAN") -eq 0 ]; then
sed -i "/$ipWAN $hostnameMachine/d" $fileHosts
echo "$ipLAN $hostnameMachine" >> $fileHosts
fi
else
# echo "tor/wan"
# we remove the entry in /etc/hosts
sed -i "/$ipLAN $hostnameMachine/d" $fileHosts
if [ ! -z $ipWAN ];then
#user want force ip for wan
if [ $(CheckEntryInHosts "$hostnameMachine" "$ipWAN") -eq 0 ]; then
echo "$ipWAN $hostnameMachine" >> $fileHosts
fi
fi
fi
```
#### Enregistrez et quittez en tapant _CTRL+X_
#### Rendez le script exécutable
```
sudo chmod +x /etc/scripts/updateHost.bash
```
#### Éditez le cron en admin (root)
```
sudo crontab -e
```
#### Copiez-Collez le cron et adaptez les valeurs mises en exemple ici
```
*/5 * * * * sudo /opt/scripts/updateHost.bash [adresse_IP_LAN] [adresse_MAC] [HOSTNAME] [ip wan (pas obligatoire)]
```
* _[adresse_IP_LAN]_ => l'adresse IP en [LAN (réseau local)](https://fr.wikipedia.org/wiki/R%C3%A9seau_local) de la machine lié au hostname par exemple 192.168.1.42
* _[adresse_MAC]_ => l'[adresse MAC](https://fr.wikipedia.org/wiki/Adresse_MAC) de la machine lié au hostname. Par exemple 00:11:22:33:44:55
* _[HOSTNAME]_ => le nom de domaine de votre machine. Par exemple linuxfr.org
* _[ip wan (pas obligatoire)]_ => Non requis. Si vous souhaitez forcer une adresse ip lorsque connecté en [WAN (internet)](https://fr.wikipedia.org/wiki/R%C3%A9seau_%C3%A9tendu). Par exemple 10.8.0.42