In folgendem Artikel haben wir bereits beschrieben wie der Dienst DNS4EU für eine Filterung auf den Schülergeräten eingesetzt werden kann.
Diese DNS-Einstellung greift folglich zuhause UND in der Schule gleichermaßen. Jetzt kann es aber der Fall sein, dass in der Schule ein anderer DNS-Eintrag vorrangig genutzt werden soll (weil z.B. weitere Sperrmöglichkeiten, interne Domainnamen, usw.).
Um einen automatischen Wechsel verschiedener DNS-Einträge abhängig vom häuslichen/schulischen Netz zu realisieren hat mein Kollege Martin Gruber folgendes Script für die automatische DNS-Umschaltung geschrieben:
#!/bin/bash
#DNS-Switching außerhalb des Schulnetzes
#BRG Kremszeile, v0.01, letzte Änderung: 2026-01-15
IFACE="$1"
STATUS="$2"
TEST_IP="10.1.1.9"
TEST_PORT="3142"
PROTECT_DNS="86.54.11.12"
# Nur bei aktiver Verbindung arbeiten
[[ "$STATUS" != "up" ]] && exit 0
# Nur für echte IP-Interfaces (kein lo, kein VPN-Tunnel)
[[ "$IFACE" == lo* || "$IFACE" == tun* || "$IFACE" == wg* ]] && exit 0
# Warten bis DHCP DNS da ist (max 5s)
for _ in {1..10}; do
if resolvectl status "$IFACE" | grep -q "DNS Servers:"; then
break
fi
sleep 0.5
done
# Schulnetz-Erkennung
if nc -z -w 5 "$TEST_IP" "$TEST_PORT" >/dev/null 2>&1; then
#Schulnetz - DHCP weiter nutzen, keine Änderung notwendig
logger "[$IFACE] Schulnetz - DHCP-DNS aktiv lassen"
else
#Fremdnetz - Kinderschutz-DNS nutzen
logger "[$IFACE] Fremdnetz - Kinderschutz-DNS $PROTECT_DNS"
resolvectl dns "$IFACE" "$PROTECT_DNS"
resolvectl domain "$IFACE" "~."
fi
resolvectl flush-caches
Wie funktioniert das Script? Es wird im Hintergrund bei der Aktivierung der Netzwerk-Schnittstelle kontrolliert ob die IP Adresse 10.1.1.9 mit dem Port 3142 erreichbar ist (diese Daten müssen natürlich an die Gegebenheiten am jeweiligen Schulstandort angepasst werden). Falls dem so ist soll der vom schulischen DHCP vorgeschriebene DNS-Eintrag belassen werden. Falls die Netzwerkschnittstelle aber zuhause aktiviert wird, erfolgt eine Eintragung des DNS4EU-Wertes.
Ausgeführt wird das Script im Verzeichnis /etc/NetworkManager/dispatcher.d/ als Eintrag 50-auto-dns. networkd-dispatcher bietet sich als Standardkomponente auf Ubuntu-Systemen für genau diese Dinge an, da man hier elegant auf Zustandswechsel von Netzwerkschnittstellen reagieren kann.
Auch eine Ausrollung auf bereits vorhandene Geräte ist einfach möglich. Mittels Ansible Pull und dem entsprechenden Playbook (kinderschutz.yml) laden die Clients (falls noch nicht vorhanden) automatisch das passende Script herunter. Alle erforderlichen Dateirechte werden ebenso korrekt gesetzt.

Wie Ansible Pull genauer funktioniert bzw. Ansible an sich eingerichtet werden kann, hat mein Kollege Thomas Krupa bereits vor einiger Zeit in folgendem Artikel dargelegt:
0 Kommentare