Erkenntnisse
Scheinbar werden von dnsmasq die lokalen Namen erst geliefert, wenn die DHCP Clients die Lease aktualisiert haben. Theoretisch überleben die Leases auch einen Neustart des Routers. Ich hatte aber oft die Situation, da war nach dem Start alles erstmal weg. Die Leasetime steht per Standard auf 12 h. Da dauert es dann ganz schön lange, wenn ein Client mal die Lease erneuern will. Irgendwo hatte ich mal gelesen, dass passiert nach der halben Leasetime (6 h). Dafür muss eine Lösung her.Frage: Wo packt man jetzt Hostnamen hin, damit sie sofort zur Verfügung stehen?
Antwort: /etc/hosts
Code
Die static Leases sind schlecht lesbar wenn sie nur die IP und Mac enthalten, der Hostname sollte da schon mit in die Liste. Damit man nicht alles doppelt halten und konfigurieren muss, wäre es jetzt sinnvoll die static Leases einfach auszulesen und in die hosts Datei zu schreiben.Teile des Codes habe ich aus dem Ubuntu Wiki.
Die Abschnitte im Code sind entsprechend kommentiert.
#!/bin/ash # Perform work in temporary files temphosts1=`mktemp` temphosts2=`mktemp` dom=$(uci get dhcp.@dnsmasq[0].domain) # If this is our first run, save a copy of the system's original hosts file and set to read-only for safety if [ ! -f ~/hosts-system ] then echo "Saving copy of system's original hosts file..." cp /etc/hosts ~/hosts-system chmod 444 ~/hosts-system fi # Read Hostnames from DHCP for i in $(uci show dhcp | grep -oE "host\[\d+\].ip"|grep -oE '\d+'); do ip=$(uci get dhcp.@host[$i].ip) name=$(uci get dhcp.@host[$i].name) if [ ! -z $name ] then echo $ip $name.$dom $name >>$temphosts2 fi done echo -e "\n# Ad hosts from dhcp "`date` | cat ~/hosts-system - $temphosts2 > $temphosts1 cp $temphosts1 /etc/hosts # Clean up temp files and remind user to copy new file echo "Cleaning up..." rm $temphosts1 $temphosts2 # The File must be readable for everyone chmod 644 /etc/hosts #Restart Service /etc/init.d/dnsmasq restart echo "Done."
Keine Kommentare:
Kommentar veröffentlichen