Ausgangslage: im WLAN nutzt das iphone den pihole im LAN und ist dadurch werbefrei. Im Mobilfunknetz nutzt es den von T-Mobile vorgegebenen Standard und zeigt deshalb Werbung an. Weil apple nicht einfach die Einstellung eines eigenen DNS-Servers erlaubt, war das bis jetzt nicht zu ändern.

Abhilfe

Auf dem root-Server pihole installieren, mit traefik dafür sorgen, dass er auf port 853 TLS-verschlüsselte DNS-over-TCP Requests entgegennimmt. Diesen Server in einen Profilgenerator eintragen und das Profil auf dem iphone laden und aktivieren. Wichtig: Wenn der Server nicht per verschlüsseltem DOT befragt wird, laufen die DNS-Abfragen im Klartext durchs Netz. Privatsphäre ade…

Sperren von Port 53 nach außen

crontab -e
#
@reboot   ufw deny 53/udp ; ufw deny 53/tcp

Traefik-Einstellungen

    ports:
      # DNS over TCP
      - "853:853" 
labels:
  # DNS over TLS proto
  # Source - https://stackoverflow.com/a/78160723
  - "traefik.tls.option.default.alpnProtocols=http/1.1,h2,dot"
 
entryPoints:
  # ...
  dot:
    address: ":853/tcp"
    transport:
      lifeCycle:
        requestAcceptGraceTimeout: 0
      respondingTimeouts:
        readTimeout: 0
        writeTimeout: 0
        idleTimeout: 0

pihole docker-compose labels

      # --- TCP für DNS-over-TLS (DoT) ---
      - "traefik.tcp.routers.${SERVICE}-dot.rule=HostSNI(`${HOST}`)"
      - "traefik.tcp.routers.${SERVICE}-dot.entrypoints=dot"
      - "traefik.tcp.routers.${SERVICE}-dot.tls=true"
      - "traefik.tcp.routers.${SERVICE}-dot.tls.certresolver=cloudflare"
      - "traefik.tcp.routers.${SERVICE}-dot.service=${SERVICE}-dot"
      # Pi-hole hört auf Port 53 (TCP) für unverschlüsseltes DNS  
      - "traefik.tcp.services.${SERVICE}-dot.loadBalancer.server.port=53"  

Testen

auf dem Desktop-Rechner

kdig -d @89.xx.xx.xxx +tls-ca +tls-host=pi.meine.domäne heise.de
openssl s_client -connect pi.meine.domäne:853 -alpn dot -tls1_3

Pihole-Nutzung auf dem iphone

pihole auch für iphone