# DNS-Konfiguration und Netzwerk-Optimierung ## Übersicht Das MYP Kiosk-System implementiert eine intelligente DNS-Konfiguration mit automatischer Router-Erkennung, Fallback-Mechanismen und IPv6-Deaktivierung für optimale Netzwerk-Performance. ## Funktionen ### 🎯 Intelligente DNS-Prioritäten 1. **Router-DNS** (Höchste Priorität) - Automatische Erkennung via DHCP, systemd-resolved, NetworkManager - Route-basierte Fallback-Erkennung - Funktionalitätstest vor Verwendung 2. **Google DNS** (Fallback 1) - `8.8.8.8` und `8.8.4.4` - Zuverlässig und schnell 3. **Cloudflare DNS** (Fallback 2) - `1.1.1.1` und `1.0.0.1` - Privacy-fokussiert 4. **Custom DNS** (Fallback 3) - `163.116.178.73` und `163.116.178.74` - Benutzerdefinierte Server ### 🚫 IPv6-Deaktivierung - **Kernel-Level**: Systemweite IPv6-Deaktivierung - **Boot-Level**: GRUB und cmdline.txt Parameter - **Network-Level**: NetworkManager und DHCP-Konfiguration ### 🔄 Automatische Aktualisierung - **Alle 30 Minuten**: DNS-Prioritäten neu bewerten - **Alle 10 Minuten**: DNS-Gesundheitscheck - **Wöchentlich**: Root Hints aktualisieren ## Architektur ``` ┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐ │ MYP Kiosk │───▶│ Unbound │───▶│ Router DNS │ │ Application │ │ Resolver │ │ (Priorität 1) │ └─────────────────┘ │ 127.0.0.1 │ └─────────────────┘ │ │ ┌─────────────────┐ │ │───▶│ Google DNS │ │ │ │ (Fallback 1) │ │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │───▶│ Cloudflare DNS │ │ │ │ (Fallback 2) │ │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │───▶│ Custom DNS │ │ │ │ (Fallback 3) │ └──────────────┘ └─────────────────┘ ``` ## Konfigurationsdateien ### Unbound Hauptkonfiguration ```bash /etc/unbound/unbound.conf ``` **Wichtige Einstellungen:** - IPv6 deaktiviert (`do-ip6: no`) - Lokale Netzwerke erlaubt - DNSSEC aktiviert - Performance-optimiert (64MB Cache) ### DNS-Prioritätsskript ```bash /usr/local/bin/configure-dns-priority ``` **Funktionen:** - Router-DNS automatisch erkennen - DNS-Server-Funktionalität testen - Unbound-Konfiguration dynamisch aktualisieren - Logging aller Änderungen ### Systemd-Services ```bash /etc/systemd/system/dns-priority-config.service ``` **Abhängigkeiten:** - Nach `network-online.target` - Nach `unbound.service` - Vor `myp-druckerverwaltung.service` ## Router-DNS-Erkennung ### Methode 1: DHCP Lease-Datei ```bash grep "domain-name-servers" /var/lib/dhcp/dhclient.leases ``` ### Methode 2: systemd-resolved ```bash systemd-resolve --status | grep "DNS Servers" ``` ### Methode 3: NetworkManager ```bash nmcli dev show | grep "IP4.DNS" ``` ### Methode 4: Route-basierte Erkennung ```bash # Gateway als DNS-Server testen gateway=$(ip route | grep default | awk '{print $3}') nslookup google.com "$gateway" ``` ## IPv6-Deaktivierung ### Kernel-Parameter ```bash # /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 ``` ### Boot-Parameter ```bash # /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 ..." # /boot/cmdline.txt (Raspberry Pi) ... ipv6.disable=1 ``` ### NetworkManager ```bash # /etc/NetworkManager/conf.d/dns-priority.conf [connection] ipv6.method=ignore ``` ## DHCP-Schutz ### dhclient-Konfiguration ```bash # /etc/dhcp/dhclient.conf supersede domain-name-servers 127.0.0.1; ``` ### resolv.conf-Schutz ```bash # Schreibschutz aktivieren chattr +i /etc/resolv.conf ``` ## Monitoring und Wartung ### DNS-Status prüfen ```bash myp-maintenance dns-status ``` **Zeigt an:** - Unbound Service-Status - Aktuelle DNS-Server - Erkannte Router-DNS - DNS-Statistiken - Letzte Logs ### DNS-Test durchführen ```bash myp-maintenance dns-test ``` **Testet:** - google.com - github.com - debian.org - cloudflare.com ### DNS-Konfiguration neu laden ```bash myp-maintenance dns-reconfigure ``` ### IPv6-Status prüfen ```bash myp-maintenance ipv6-status ``` ## Automatische Überwachung ### Cron-Jobs ```bash # /etc/cron.d/dns-priority-update # DNS-Priorität alle 30 Minuten aktualisieren */30 * * * * root /usr/local/bin/configure-dns-priority # Root Hints wöchentlich aktualisieren 0 3 * * 0 root curl -s -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache # DNS-Gesundheitscheck alle 10 Minuten */10 * * * * root /usr/local/bin/dns-health-check ``` ### Gesundheitscheck ```bash /usr/local/bin/dns-health-check ``` **Prüft:** - Unbound Service-Status - DNS-Auflösung für Test-Domains - Automatischer Neustart bei Fehlern - Konfiguration neu laden bei kritischen Fehlern ## Log-Dateien ### DNS-Konfiguration ```bash /var/log/dns-configuration.log ``` **Enthält:** - Router-DNS-Erkennungen - Konfigurationsänderungen - DNS-Server-Tests - Unbound-Neustarts ### DNS-Gesundheit ```bash /var/log/dns-health.log ``` **Enthält:** - Regelmäßige Gesundheitschecks - DNS-Auflösungsfehler - Service-Neustarts - Kritische Fehler ### Unbound-Logs ```bash /var/log/unbound.log ``` **Enthält:** - Unbound Service-Logs - DNS-Anfragen (optional) - Fehler und Warnungen ## Troubleshooting ### DNS-Auflösung funktioniert nicht 1. **Service-Status prüfen:** ```bash systemctl status unbound ``` 2. **DNS-Test durchführen:** ```bash nslookup google.com 127.0.0.1 ``` 3. **Konfiguration neu laden:** ```bash /usr/local/bin/configure-dns-priority ``` ### Router-DNS wird nicht erkannt 1. **DHCP-Lease prüfen:** ```bash cat /var/lib/dhcp/dhclient.leases | grep domain-name-servers ``` 2. **Gateway-Test:** ```bash gateway=$(ip route | grep default | awk '{print $3}') nslookup google.com "$gateway" ``` 3. **Manuelle Konfiguration:** ```bash # Router-DNS manuell in Unbound eintragen echo "forward-addr: 192.168.1.1" >> /etc/unbound/unbound.conf systemctl reload unbound ``` ### IPv6 noch aktiv 1. **Kernel-Parameter prüfen:** ```bash sysctl net.ipv6.conf.all.disable_ipv6 ``` 2. **Boot-Parameter prüfen:** ```bash cat /proc/cmdline | grep ipv6.disable ``` 3. **Neustart erforderlich:** ```bash sudo reboot ``` ### Unbound startet nicht 1. **Konfiguration testen:** ```bash unbound-checkconf /etc/unbound/unbound.conf ``` 2. **Berechtigungen prüfen:** ```bash chown -R unbound:unbound /var/lib/unbound ``` 3. **Port-Konflikt prüfen:** ```bash netstat -tulpn | grep :53 ``` ## Performance-Optimierung ### Cache-Einstellungen ```bash # Unbound Cache-Konfiguration msg-cache-size: 64m rrset-cache-size: 128m cache-max-ttl: 86400 cache-min-ttl: 300 ``` ### Thread-Konfiguration ```bash # Optimiert für Raspberry Pi num-threads: 2 msg-cache-slabs: 4 rrset-cache-slabs: 4 ``` ### Netzwerk-Puffer ```bash # Erhöhte Puffer für bessere Performance so-rcvbuf: 4m so-sndbuf: 4m outgoing-range: 4096 ``` ## Sicherheit ### Zugriffskontrolle ```bash # Nur lokale Netzwerke erlaubt access-control: 127.0.0.0/8 allow access-control: 192.168.0.0/16 allow access-control: 10.0.0.0/8 allow access-control: 172.16.0.0/12 allow ``` ### DNSSEC ```bash # Automatische Trust-Anchor-Verwaltung auto-trust-anchor-file: "/var/lib/unbound/root.key" ``` ### Private Adressen ```bash # Verhindert DNS-Rebinding-Angriffe private-address: 192.168.0.0/16 private-address: 172.16.0.0/12 private-address: 10.0.0.0/8 private-address: 127.0.0.0/8 ``` --- **Status**: ✅ Produktionsreif **Letzte Aktualisierung**: $(date +%Y-%m-%d) **Version**: 1.0 (DNS-Optimiert) ## Referenzen - [Unbound DNS Resolver](https://nlnetlabs.nl/projects/unbound/about/) - [DNS-over-HTTPS RFC 8484](https://tools.ietf.org/html/rfc8484) - [IPv6 Deaktivierung Best Practices](https://wiki.debian.org/DebianIPv6) - [DNSSEC Validation](https://tools.ietf.org/html/rfc4033)