# TP23 Stufe 1 — DoH auf crs326-core (schliesst zugleich TP21.1 TODO 1). # # WARUM NUR EIN ROOT UND KEIN CA-BUNDLE # ------------------------------------ # Die Kette von px35ynlol3.cloudflare-gateway.com ist # Leaf(CN=cloudflare-gateway.com) -> GTS WE1 -> GTS Root R4 # (am 2026-08-17 per openssl s_client verifiziert). Fuer verify-doh-cert=yes # reicht der Root. Das ist hier kein Geiz, sondern Notwendigkeit: der Core hat # nur ~2,8 MB freien Flash, ein Mozilla-Bundle (~230 KB) waere Verschwendung # und muesste gepflegt werden. Der Root laeuft bis 2036, das Leaf rotiert # darunter ohne Zutun. # # Datei liegt schon auf dem Geraet: gtsrootr4.pem (per SFTP hochgeladen statt # per fetch geholt — fetch haette check-certificate=no gebraucht, also genau # die Pruefung ausgehebelt, die wir gerade aufbauen wollen). # SHA-256 des Roots, lokal gegengeprueft: # 34:9D:FA:40:58:C5:E2:63:12:3B:39:8A:E7:95:57:3C:4E:13:13:C8:3F:E6:8F:93:55:6C:D5:E8:03:1B:3C:7D # # servers=1.1.1.1 BLEIBT stehen: RouterOS loest damit den DoH-Hostnamen selbst # auf (Bootstrap). Ohne das haette man ein Henne-Ei. Alles andere laeuft danach # ueber DoH. # # Push: python3 nautobot/gc-manual-plan.py --device crs326-core \ # --commands-file routeros/tp23-stufe1-doh-core.rsc \ # --change-id TP23-Stufe1-DoH --deploy \ # --assert '/ip/dns|use-doh-server=https://px35ynlol3.cloudflare-gateway.com/dns-query' \ # --assert '/ip/dns|verify-doh-cert=true' # Backup davor: core-pre-tp23-doh-20260817.backup # # Rollback: /ip dns set use-doh-server="" — eine Zeile, sofort wirksam. # 1) Import. Idempotent: nur wenn der Root noch nicht da ist. :do { :if ([:len [/certificate find where common-name="GTS Root R4"]] = 0) do={ /certificate import file-name=gtsrootr4.pem passphrase="" } } on-error={ :log info "tp23s1: 01 import warf" } # 2) Explizit vertrauen. Der Import allein setzt trusted nicht zuverlaessig, # und ohne trusted=yes scheitert verify-doh-cert=yes stumm. :do { /certificate set [find where common-name="GTS Root R4"] trusted=yes } on-error={ :log info "tp23s1: 02 trust warf" } # 3) DoH scharf. verify-doh-cert=yes ist der ganze Punkt der Uebung — ohne # Pruefung waere DoH nur Verschleierung, kein Vertrauensanker. :do { /ip dns set use-doh-server=https://px35ynlol3.cloudflare-gateway.com/dns-query verify-doh-cert=yes } on-error={ :log info "tp23s1: 03 doh-set warf" } # 4) Cache leeren, damit die naechste Antwort nachweislich ueber DoH kommt und # nicht aus dem Bestand von vorher. :do { /ip dns cache flush } on-error={ :log info "tp23s1: 04 flush warf" } # Selbstprotokoll — der Deploy-Job zeigt den Geraete-Output nicht. :log info ("tp23s1: ENDE roots=" . [:tostr [:len [/certificate find where common-name="GTS Root R4"]]] . " trusted=" . [:tostr [/certificate get [find where common-name="GTS Root R4"] trusted]] . " doh=" . [/ip dns get use-doh-server])