# DNS Namen für die Freifunk Knoten

**URL:** <https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336>\
**Category:** Regio Aachen\
**Created:** [25. Mai 2016 um 18:00 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336 "2016-05-25T18:00:00Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![MrMM](https://forum.freifunk.net/user_avatar/forum.freifunk.net/mrmm/32/328_2.png) [@MrMM](https://forum.freifunk.net/u/MrMM)\
**Post date:** [25. Mai 2016 um 18:00 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/1 "2016-05-25T18:00:00Z")

</div>

Wir bieten seit einiger Zeit eine interne DNS Auflösung für alle Knoten im Freifunk Aachen Netz an. Insbesondere da ja die iPv6 Adressen nicht gleich bleiben wenn ein Knoten zwischen den Segmenten verschoben wird wollte ich das hier nochmal bekannt machen:

```
<knotenname>.nodes.ffac

```

Also beispielsweise:

```
IHK-Aachen.nodes.ffac

```

Naturlich auch:  
[http://IHK-Aachen.nodes.ffac](http://IHK-Aachen.nodes.ffac)

---

<div class="post-metadata">

**Author:** ![anon7128436](https://forum.freifunk.net/letter_avatar_proxy/v4/letter/a/a5b964/32.png) [@anon7128436](https://forum.freifunk.net/u/anon7128436)\
**Post date:** [25. Mai 2016 um 18:51 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/2 "2016-05-25T18:51:16Z")

</div>

Könntest du/ihr noch erklären wie die Auflösung technisch umgesetzt ist?

In unserer Community (FFWP) kamen wir diese Woche ebenfalls auf dieses Thema.

---

<div class="post-metadata">

**Author:** ![MrMM](https://forum.freifunk.net/user_avatar/forum.freifunk.net/mrmm/32/328_2.png) [@MrMM](https://forum.freifunk.net/u/MrMM)\
**Post date:** [25. Mai 2016 um 21:13 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/4 "2016-05-25T21:13:38Z")

</div>

> [@anon7128436](#):
>
> Könntest du/ihr noch erklären wie die Auflösung technisch umgesetzt ist?

Aus den Karten Daten wird eine config datei für bind generiert, details dazu hat am besten @monty

Interne Dienste haben sich bisher nicht ergeben.

---

<div class="post-metadata">

**Author:** ![monty](https://forum.freifunk.net/user_avatar/forum.freifunk.net/monty/32/116_2.png) [@monty](https://forum.freifunk.net/u/monty)\
**Post date:** [25. Mai 2016 um 21:32 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/5 "2016-05-25T21:32:36Z")

</div>

Ehm ja 😄.  
Also wir nutzen aktuell Hopglass als Karten-Backend und realisieren die DNS-Auflösung mittels `dnsmasq` (da man dort einfach eine hosts-Datei angeben kann, die bei Änderungen automatisch neu geladen wird).  
Anfragen an unsere DNS-Server auf den Supernodes (aus dem Freifunk-Netz heraus, bind9) deligieren „\*.nodes.ffac“-Anfragen dann an unseren Monitoring/Map-Server (dort läuft `dnsmasq`).

Die entsprechenden Scripts / Config sehen bei uns so aus:

```
# Cronjob
/usr/bin/curl -s --globoff "http://[::1]:4000/hosts" | grep -E "^2a03:2260:114" | sed -e 's/$/.nodes.ffac/' > /opt/freifunk/data/hosts

# /etc/dnsmasq.d/freifunk
no-negcache
interface=br-aachen
no-dhcp-interface=br-aachen
bind-interfaces
addn-hosts=/opt/freifunk/data/hosts

```

Mit Meshviewer sah das ganze ähnlich aus, da könnte ich die Config bei Bedarf noch mal raussuchen.

Achja, wichtig ist noch, wenn Ihr `dnsmasq` verwenden möchtet, dass ihr die Default-Config deaktiviert, da Ihr sonst noch 'nen weiteren DHCP-Server habt (glaube ich zumindest) ;-).

---

<div class="post-metadata">

**Author:** ![anon7128436](https://forum.freifunk.net/letter_avatar_proxy/v4/letter/a/a5b964/32.png) [@anon7128436](https://forum.freifunk.net/u/anon7128436)\
**Post date:** [26. Mai 2016 um 06:00 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/6 "2016-05-26T06:00:48Z")

</div>

Cool, danke! Bei der Meshviewer config ändert sich vermutlich nur die Erstellung der Hosts Datei oder?

---

<div class="post-metadata">

**Author:** ![MrMM](https://forum.freifunk.net/user_avatar/forum.freifunk.net/mrmm/32/328_2.png) [@MrMM](https://forum.freifunk.net/u/MrMM)\
**Post date:** [26. Mai 2016 um 10:20 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/7 "2016-05-26T10:20:29Z")

</div>

@monty wir haben einen knoten mit \_ im Namen, alle die hinter ihm auftauchen lassen sich nicht mehr auflösen:

ffac-haus\_fuer\_guerzenich.nodes.ffac

Das wird wohl nicht mehr korrekt abgefangen.

---

<div class="post-metadata">

**Author:** ![monty](https://forum.freifunk.net/user_avatar/forum.freifunk.net/monty/32/116_2.png) [@monty](https://forum.freifunk.net/u/monty)\
**Post date:** [26. Mai 2016 um 16:57 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/8 "2016-05-26T16:57:05Z")

</div>

Genau, die haben wir mit den Informationen aus der `nodes.json` und mit Hilfe von `jq` erstellt:

`jq -r '.nodes[]|.nodeinfo|select(.network.addresses|length > 0)|.network.addresses[] +" " +.hostname +".nodes.ffac"|.' nodes.json | grep -E "^2a03:2260:114" > /opt/freifunk/data/hosts`

---

<div class="post-metadata">

**Author:** ![monty](https://forum.freifunk.net/user_avatar/forum.freifunk.net/monty/32/116_2.png) [@monty](https://forum.freifunk.net/u/monty)\
**Post date:** [26. Mai 2016 um 17:00 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/9 "2016-05-26T17:00:44Z")

</div>

Ne, das hier ist das Problem:

```
Fehlerhafter Name in /opt/freifunk/data/hosts Zeile 1118:
2a03:2260:114:7:16cc:20ff:fee1:ae52 praxis-fuer-physiotherapie-und-osteopathie-eijgenraam-und-pracht.nodes.ffac

```

Ich schau mir mal das RFC an und entferne alle nicht validen Hostnamen.

---

<div class="post-metadata">

**Author:** ![monty](https://forum.freifunk.net/user_avatar/forum.freifunk.net/monty/32/116_2.png) [@monty](https://forum.freifunk.net/u/monty)\
**Post date:** [26. Mai 2016 um 18:07 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/10 "2016-05-26T18:07:31Z")

</div>

So, läuft wieder:

`jq -r '.nodes[]|.nodeinfo|select(.network.addresses|length > 0)|.network.addresses[] +" " +.hostname +".nodes.ffac"|.' nodes.json | grep -E "^2a03:2260:114" | grep -P ' (?!\-)(?:[a-zA-Z\d\-_]{0,62}[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}$' > /opt/freifunk/data/hosts`

---

<div class="post-metadata">

**Author:** ![monty](https://forum.freifunk.net/user_avatar/forum.freifunk.net/monty/32/116_2.png) [@monty](https://forum.freifunk.net/u/monty)\
**Post date:** [26. Mai 2016 um 18:29 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/11 "2016-05-26T18:29:35Z")

</div>

Was das automatische Neuladen angeht, bin ich mir nicht mehr so sicher 😄  
Im Zweifel hilft aber ein `kill -SIGHUP $(pidof dnsmasq)`.

---

<div class="post-metadata">

**Author:** ![rubo77](https://forum.freifunk.net/user_avatar/forum.freifunk.net/rubo77/32/799_2.png) [@rubo77](https://forum.freifunk.net/u/rubo77)\
**Post date:** [5. September 2017 um 08:43 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/12 "2017-09-05T08:43:58Z")

</div>

kannst du den regex mal erläutern?

bei mir sind da immer noch die knotennamen mit dem unterstrich drin

am besten man ersetzt alle nicht gültigen zeichen durch ein minus bevor man die rausschmeissst.

---

<div class="post-metadata">

**Author:** ![rubo77](https://forum.freifunk.net/user_avatar/forum.freifunk.net/rubo77/32/799_2.png) [@rubo77](https://forum.freifunk.net/u/rubo77)\
**Post date:** [5. September 2017 um 12:15 UTC](https://forum.freifunk.net/t/dns-namen-fur-die-freifunk-knoten/12336/13 "2017-09-05T12:15:39Z")

</div>

Ich habe jetzt ein neues script geschrieben, das automatisch aus einer `nodes.json` ein include file für **bind** erstellt:

```auto
NODES="https://mesh.freifunk.in-kiel.de/nodes.json"
TLD=ffki
NODESUB=knoten

IsValidHostname () {
  #[a-z] would include umlauts like äöü if LOCALE is set to german
  REGEX="^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9-]+$"
  if [["$@" =~ $REGEX]]; then return 0; else return 1; fi
}

wget $NODES -O nodes.json
jq -r '.nodes[]|.nodeinfo|select(.network.addresses|length > 0)|.network.addresses[] +" " +.hostname|.' nodes.json | grep -E "^fda1:384a:74de:4242" > knotenliste
echo "; \$ORIGIN $TLD." > db.$NODESUB.$TLD
echo "" > db.temp
cat knotenliste | while read k; do
  IP6="$(echo $k | cut -d" " -f1)"
  KNOTEN="$(echo $k | cut -d" " -f2-99|tr _ -|tr . -|tr " " -|tr '[:upper:]' '[:lower:]'|sed 's/ä/ae/;s/ö/oe/;s/ü/ue/;s/ß/ss/g')"
  IsValidHostname "$KNOTEN"
  if [$? == 0]; then
    echo -e "$KNOTEN \t\t\t\t\t86400 \tIN \tAAAA \t$IP6" >> db.temp
  fi
done
sort db.temp >> db.$NODESUB.$TLD
echo "output file: db.$NODESUB.$TLD"

```

Habe das hier gehostet jetzt: [https://github.com/freifunk-kiel/nodes-bind/blob/master/createdb.sh](https://github.com/freifunk-kiel/nodes-bind/blob/master/createdb.sh)
