{"id":15709,"date":"2026-09-06T01:21:53","date_gmt":"2026-09-05T23:21:53","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/dns-delegation-serial-ttl-auditor\/"},"modified":"2026-09-06T01:21:53","modified_gmt":"2026-09-05T23:21:53","slug":"dns-delegation-serial-ttl-auditor","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/","title":{"rendered":"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Domena ma zwykle dwa lub wi\u0119cej serwer\u00f3w nazw, a zwyk\u0142e zapytanie trafia do tego, kt\u00f3ry odpowie pierwszy. To ukrywa ciekawe awarie. Ta kontrola pobiera najpierw delegacj\u0119 z publicznego resolvera, a nast\u0119pnie zadaje ka\u017cdemu serwerowi nazw te same trzy pytania bezpo\u015brednio: jaki numer seryjny niesie strefa, jakie serwery nazw wymienia sama strefa i na jaki adres wskazuje domena. Odpowiedzi, kt\u00f3re si\u0119 rozchodz\u0105, s\u0105 ustaleniem.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"dnszone-domain\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Domena<\/label><br \/>\n        <input id=\"dnszone-domain\" type=\"text\" value=\"lukaswojcik.com\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box; font-family: monospace;\">\n    <\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Z tego serwera: wy\u0142\u0105cznie zapytania DNS, do publicznych resolver\u00f3w i do serwer\u00f3w nazw domeny. \u017badna strona nie jest pobierana, \u017cadne ciasteczka nie s\u0105 wysy\u0142ane, nic nie jest zapisywane poza stanem licznika.<\/p>\n<p>    <button id=\"dnszone-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Sprawd\u017a delegacj\u0119<\/button><\/p>\n<div id=\"dnszone-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Granice, kt\u00f3re warto zna\u0107: pytanych jest najwy\u017cej sze\u015b\u0107 serwer\u00f3w nazw, po UDP, a odpowied\u017a powy\u017cej 4 KB zostaje uci\u0119ta. Serwer za zapor\u0105 odrzucaj\u0105c\u0105 UDP z nieznanych adres\u00f3w wyda si\u0119 tutaj niemy, cho\u0107 resolverom odpowiada normalnie.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Domena ma zwykle dwa lub wi\u0119cej serwer\u00f3w nazw, a zwyk\u0142e zapytanie trafia do tego, kt\u00f3ry odpowie pierwszy. To ukrywa ciekawe awarie. Ta kontrola pobiera najpierw delegacj\u0119 z publicznego resolvera, a nast\u0119pnie zadaje ka\u017cdemu serwerowi nazw te same trzy pytania bezpo\u015brednio: jaki numer seryjny niesie strefa, jakie serwery nazw wymienia sama strefa i na jaki adres wskazuje domena. Odpowiedzi, kt\u00f3re si\u0119 rozchodz\u0105, s\u0105 ustaleniem.\",\"label_domain\":\"Domena\",\"datenschutz\":\"Z tego serwera: wy\u0142\u0105cznie zapytania DNS, do publicznych resolver\u00f3w i do serwer\u00f3w nazw domeny. \u017badna strona nie jest pobierana, \u017cadne ciasteczka nie s\u0105 wysy\u0142ane, nic nie jest zapisywane poza stanem licznika.\",\"knopf\":\"Sprawd\u017a delegacj\u0119\",\"laeuft\":\"Pytanie serwer\u00f3w nazw...\",\"grenze\":\"Granice, kt\u00f3re warto zna\u0107: pytanych jest najwy\u017cej sze\u015b\u0107 serwer\u00f3w nazw, po UDP, a odpowied\u017a powy\u017cej 4 KB zostaje uci\u0119ta. Serwer za zapor\u0105 odrzucaj\u0105c\u0105 UDP z nieznanych adres\u00f3w wyda si\u0119 tutaj niemy, cho\u0107 resolverom odpowiada normalnie.\",\"h_server\":\"Serwery nazw pytane bezpo\u015brednio\",\"tabelle_hinweis\":\"Autorytet oznacza, \u017ce serwer odpowiedzia\u0142 z flag\u0105 AA: sam trzyma stref\u0119, a nie jej kopi\u0119. Numery seryjne rozchodz\u0105ce si\u0119 mi\u0119dzy serwerami to najwyra\u017aniejszy znak, \u017ce transfer strefy nie dotar\u0142.\",\"h_befunde\":\"Ustalenia\",\"sp_ns\":\"Serwer nazw\",\"sp_ip\":\"Adres\",\"sp_erreichbar\":\"Odpowiada\",\"sp_autoritaet\":\"Autorytet\",\"sp_serial\":\"Seria\",\"sp_a\":\"Rekord A\",\"art_ns\":\"NS\",\"art_a\":\"A\",\"zeile_domain\":\"Domena\",\"zeile_ns\":\"Delegowane serwery nazw\",\"zeile_a\":\"Adres\",\"zeile_aaaa\":\"IPv6\",\"zeile_dnssec\":\"DNSSEC\",\"zeile_dauer\":\"Czas\",\"zeile_limit\":\"Pozosta\u0142e kontrole w tej godzinie\",\"wert_ja\":\"tak\",\"wert_nein\":\"nie\",\"wert_keine\":\"brak\",\"wert_dnssec_validiert\":\"podpisana i zweryfikowana\",\"wert_dnssec_ohne\":\"podpisana, bez weryfikacji\",\"stufe_hoch\":\"Wysoki\",\"stufe_mittel\":\"\u015aredni\",\"stufe_niedrig\":\"Niski\",\"stufe_info\":\"Informacja\",\"stufe_gut\":\"W porz\u0105dku\",\"keine_befunde\":\"Nie ma nic do zg\u0142oszenia.\",\"urteil_gut\":\"Wszystkie serwery nazw s\u0105 zgodne.\",\"urteil_warnung\":\"Domena si\u0119 rozwi\u0105zuje, ale konfiguracja ma s\u0142aby punkt.\",\"urteil_kritisch\":\"Serwery nazw przecz\u0105 sobie albo jeden z nich w og\u00f3le nie odpowiada.\",\"fehler_kein_token\":\"Kontrola nie mog\u0142a ruszy\u0107, poniewa\u017c reCAPTCHA si\u0119 nie wczyta\u0142a.\",\"fehler_captcha\":\"reCAPTCHA uzna\u0142a zapytanie za zautomatyzowane. Zwykle pomaga ponowne wczytanie strony.\",\"fehler_zu_viele\":\"Limit {limit} kontroli na godzin\u0119 dla tego adresu zosta\u0142 osi\u0105gni\u0119ty.\",\"fehler_adresse\":\"Tej domeny nie da si\u0119 u\u017cy\u0107.\",\"fehler_domain\":\"Tej domeny nie da si\u0119 u\u017cy\u0107.\",\"fehler_kein_dns\":\"\u017baden resolver nie odpowiedzia\u0142 dla tej domeny.\",\"fehler_zaehler\":\"Licznik jest niedost\u0119pny, dlatego nic nie zosta\u0142o sprawdzone.\",\"fehler_pruefdienst\":\"Us\u0142uga reCAPTCHA by\u0142a nieosi\u0105galna.\",\"fehler_aufbau\":\"Us\u0142uga nie jest poprawnie skonfigurowana. B\u0142\u0105d le\u017cy po tej stronie.\",\"fehler_eingabe\":\"Zapytania nie da\u0142o si\u0119 odczyta\u0107.\",\"fehler_methode\":\"Niew\u0142a\u015bciwa metoda zapytania.\",\"fehler_netz\":\"Us\u0142uga by\u0142a nieosi\u0105galna.\",\"fehler_antwort\":\"Odpowiedzi nie da\u0142o si\u0119 odczyta\u0107.\",\"fehler_unbekannt\":\"Co\u015b posz\u0142o nie tak i nie ma na to osobnego komunikatu.\",\"grund_leer\":\"Nic nie zosta\u0142o wpisane.\",\"grund_zu_lang\":\"Wpis jest za d\u0142ugi.\",\"grund_unlesbar\":\"To nie uk\u0142ada si\u0119 w nazw\u0119 domeny.\",\"grund_kein_punkt\":\"Domena potrzebuje co najmniej jednej kropki.\",\"grund_hostform\":\"Oczekiwana jest nazwa domeny, nie adres IP.\",\"grund_keine_antwort\":\"\u017baden resolver nie odpowiedzia\u0142.\",\"befund_keine_ns\":\"Domena nie ma serwer\u00f3w nazw || Albo nie istnieje, albo jej delegacja jest zepsuta. Bez serwer\u00f3w nazw nie da si\u0119 sprawdzi\u0107 nic wi\u0119cej.\",\"befund_nur_ein_ns\":\"Delegowany jest tylko jeden serwer nazw || {name}. Ka\u017cda specyfikacja od 1987 roku wymaga co najmniej dw\u00f3ch, a pow\u00f3d jest prosty: jeden serwer oznacza, \u017ce wystarczy restart, awaria sieci albo wygas\u0142y certyfikat, by domena przesta\u0142a si\u0119 rozwi\u0105zywa\u0107.\",\"befund_ns_anzahl\":\"Delegowanych jest {n} serwer\u00f3w nazw || {liste}\",\"befund_cname_am_apex\":\"Domena ma CNAME na najwy\u017cszym poziomie || Wskazuje na {ziel}. To niedozwolone: CNAME nie mo\u017ce sta\u0107 obok rekord\u00f3w SOA i NS, kt\u00f3re musi nie\u015b\u0107 ka\u017cdy wierzcho\u0142ek strefy. Niekt\u00f3rzy dostawcy to na\u015bladuj\u0105, co dzia\u0142a, dop\u00f3ki kto\u015b nie zada niew\u0142a\u015bciwego pytania.\",\"befund_ns_stumm\":\"{name} nie odpowiada || Pow\u00f3d: {grund}. Serwer wci\u0105\u017c figuruje w delegacji, resolvery pytaj\u0105 go wi\u0119c dalej i czekaj\u0105 na przekroczenie czasu, zanim spr\u00f3buj\u0105 nast\u0119pnego. Dla odwiedzaj\u0105cych wygl\u0105da to jak wolna witryna, nie jak b\u0142\u0105d.\",\"befund_ns_ohne_autoritaet\":\"{name} odpowiada bez znacznika autorytetu || Odpowiada, ale nie jako serwer trzymaj\u0105cy stref\u0119. Zwykle oznacza to, \u017ce strefa zosta\u0142a tam usuni\u0119ta, podczas gdy delegacja nadal na niego wskazuje.\",\"befund_alle_ns_antworten\":\"Wszystkie {n} serwer\u00f3w nazw odpowiada autorytatywnie || Ka\u017cdy z nich trzyma stref\u0119 i to potwierdza.\",\"befund_serial_drift\":\"Serwery nazw nios\u0105 {n} r\u00f3\u017cnych numer\u00f3w seryjnych || {werte}, r\u00f3\u017cnica {abstand}. Serwery trzymaj\u0105 r\u00f3\u017cne wersje strefy, wi\u0119c to, jak\u0105 odpowied\u017a dostanie odwiedzaj\u0105cy, zale\u017cy od tego, kt\u00f3ry serwer akurat zapyta jego resolver. Zwykle transfer strefy zawi\u00f3d\u0142 albo ukryty serwer g\u0142\u00f3wny nie powiadomi\u0142 wszystkich.\",\"befund_serial_gleich\":\"Wszystkie {n} serwer\u00f3w nazw niesie numer seryjny {serial} || Wsz\u0119dzie ta sama wersja strefy.\",\"befund_ns_uneinig\":\"Serwery nazw wymieniaj\u0105 {n} r\u00f3\u017cnych zestaw\u00f3w NS || Nie s\u0105 zgodne co do tego, kto odpowiada za stref\u0119. Resolvery mog\u0105 zapami\u0119ta\u0107 dowoln\u0105 z wersji.\",\"befund_ns_weicht_von_delegation_ab\":\"Strefa wymienia inne serwery nazw ni\u017c delegacja || W strefie: {zone}. Delegowane u operatora nadrz\u0119dnego: {delegation}. W praktyce u\u017cywane s\u0105 oba \u2014 resolvery zaczynaj\u0105 od delegacji i mog\u0105 j\u0105 p\u00f3\u017aniej zast\u0105pi\u0107 list\u0105 ze strefy.\",\"befund_ns_stimmt_ueberein\":\"Delegacja i strefa wymieniaj\u0105 te same {n} serwer\u00f3w nazw || Poziom nadrz\u0119dny i strefa s\u0105 zgodne.\",\"befund_ns_ein_netz\":\"Wszystkie {n} serwer\u00f3w nazw le\u017cy w {netz} || Dwa serwery w tym samym segmencie sieci padaj\u0105 razem. Rozdzielone sieci, najlepiej r\u00f3\u017cni dostawcy, s\u0105 tym, co dopiero czyni drugi serwer warto\u015bciowym.\",\"befund_ns_mehrere_netze\":\"Serwery nazw le\u017c\u0105 w {n} r\u00f3\u017cnych sieciach || Awaria sieci wy\u0142\u0105cza jeden z nich, nie wszystkie.\",\"befund_dnssec_ds\":\"Strefa jest podpisana: {n} rekord\u00f3w DS na poziomie nadrz\u0119dnym || \u0141a\u0144cuch zaufania stoi, wi\u0119c zmanipulowan\u0105 odpowied\u017a da si\u0119 rozpozna\u0107.\",\"befund_ds_ohne_validierung\":\"Rekord DS istnieje, ale resolver nie ustawi\u0142 flagi AD || Podpisu nie da\u0142o si\u0119 zweryfikowa\u0107. Wskazuje to na wygas\u0142y podpis albo klucz, kt\u00f3ry nie pasuje ju\u017c do rekordu DS \u2014 dok\u0142adnie ten stan, w kt\u00f3rym weryfikuj\u0105cy resolver przestaje odpowiada\u0107 dla domeny w og\u00f3le.\",\"befund_kein_dnssec\":\"Strefa nie jest podpisana || Bez DNSSEC odpowiedzi nie da si\u0119 zweryfikowa\u0107. To wci\u0105\u017c przypadek typowy i przy wielu domenach \u015bwiadomy wyb\u00f3r.\",\"befund_kein_a\":\"Domena nie ma rekordu A || Przez poddomen\u0119 mo\u017ce nadal dzia\u0142a\u0107, ale sama nazwa nie rozwi\u0105zuje si\u0119 na \u017caden adres.\",\"befund_kein_aaaa\":\"Domena nie ma rekordu AAAA || Jest osi\u0105galna wy\u0142\u0105cznie przez IPv4.\",\"befund_mit_aaaa\":\"Domena ma {n} rekord\u00f3w AAAA || Osi\u0105galna tak\u017ce przez IPv6.\",\"befund_ttl_kurz\":\"Rekord {art} ma TTL {ttl} sekund || Kr\u00f3tkie TTL sprawiaj\u0105, \u017ce zmiany dzia\u0142aj\u0105 szybko, i kosztuj\u0105 zapytanie przy niemal ka\u017cdej wizycie. Przydatne podczas przenosin, drogie jako stan sta\u0142y.\",\"befund_ttl_lang\":\"Rekord {art} ma TTL {ttl} sekund ({stunden} godzin) || Zmiana potrzebuje wtedy tyle czasu, by dotrze\u0107 wsz\u0119dzie. Przed planowan\u0105 przeprowadzk\u0105 warto\u015b\u0107 nale\u017cy odpowiednio wcze\u015bnie obni\u017cy\u0107 do kilku minut.\",\"befund_soa\":\"SOA: g\u0142\u00f3wny {primaer}, seria {serial}, refresh {refresh}, retry {retry}, expire {expire}, minimum {minimum} || Te liczby reguluj\u0105, jak serwery zapasowe pod\u0105\u017caj\u0105 za g\u0142\u00f3wnym.\",\"befund_soa_expire_kurz\":\"Warto\u015b\u0107 expire w SOA wynosi {tage} dni || Je\u015bli serwer g\u0142\u00f3wny jest tak d\u0142ugo nieosi\u0105galny, serwery zapasowe przestaj\u0105 odpowiada\u0107 za stref\u0119. Tydzie\u0144 to zwyk\u0142a warto\u015b\u0107 minimalna.\",\"befund_soa_retry_gross\":\"retry ({retry}) nie jest mniejsze ni\u017c refresh ({refresh}) || retry dotyczy przypadku, w kt\u00f3rym refresh zawi\u00f3d\u0142; warto\u015b\u0107 r\u00f3wna refresh albo wy\u017csza pozostaje wi\u0119c bez efektu.\",\"befund_primaer_nicht_delegiert\":\"SOA wskazuje {primaer} jako serwer g\u0142\u00f3wny, kt\u00f3rego nie ma w\u015br\u00f3d delegowanych || To zwyk\u0142a posta\u0107 ukrytego serwera g\u0142\u00f3wnego: trzyma stref\u0119, delegowane serwery kopiuj\u0105 z niego, a nikt nie pyta go bezpo\u015brednio.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-dnszone.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];<\/p>\n<p>    function liste(w) { return Array.isArray(w) ? w : []; }\n    function zahl(w) { return (typeof w === 'number' && isFinite(w)) ? w : null; }\n    function zeichen(w) { return (typeof w === 'string' && w !== '') ? w : null; }\n    function text(schluessel, daten) {\n        var t = T[schluessel];\n        if (typeof t !== 'string') { return null; }\n        return t.replace(\/\\{([a-z_0-9]+)\\}\/g, function (m, k) {\n            var w = (daten && daten[k] !== undefined && daten[k] !== null) ? daten[k] : null;\n            if (w === null) { return m; }\n            if (k === 'art' && T['art_' + w]) { return T['art_' + w]; }\n            return String(w);\n        });\n    }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) { return { fehler: String(a.fehler), grund: a.grund || null, limit: zahl(a.limit) }; }\n        var befunde = liste(a.befunde).map(function (f) {\n            return { key: String(f.key || ''), stufe: STUFEN.indexOf(f.stufe) === -1 ? 'info' : f.stufe, daten: (f.daten && typeof f.daten === 'object') ? f.daten : {} };\n        });\n        var gruppen = {};\n        STUFEN.forEach(function (s) { gruppen[s] = befunde.filter(function (f) { return f.stufe === s; }); });\n        var server = liste(a.server).map(function (z) {\n            return { name: String(z.name || ''), ip: zeichen(z.ip), erreichbar: z.erreichbar === true, aa: z.aa === true,\n                serial: zahl(z.serial), ns: zahl(z.ns), a: zeichen(z.a) };\n        });\n        return {\n            fehler: null, domain: String(a.domain || ''),\n            urteil: (a.urteil === 'gut' || a.urteil === 'warnung' || a.urteil === 'kritisch') ? a.urteil : 'kritisch',\n            ns: liste(a.ns).filter(function (x) { return typeof x === 'string'; }),\n            adressen: liste(a.a).filter(function (x) { return typeof x === 'string'; }),\n            aaaa: liste(a.aaaa).filter(function (x) { return typeof x === 'string'; }),\n            dnssec: a.dnssec === true, ad: a.ad === true, server: server,\n            befunde: befunde, gruppen: gruppen, dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }<\/p>\n<p>    function skriptLaden() {\n        return new Promise(function (auf) {\n            if (window.grecaptcha) { auf(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { auf(true); }; s.onerror = function () { auf(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { auf(!!window.grecaptcha); }, 8000);\n        });\n    }\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (auf) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; auf(w); } }\n                setTimeout(function () { einmal(null); }, 12000);\n                try {\n                    window.grecaptcha.ready(function () {\n                        if (fertig) { return; }\n                        if (!window.grecaptcha.execute) { einmal(null); return; }\n                        window.grecaptcha.execute(SITEKEY, { action: 'dnszone' }).then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(domain) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ domain: domain, token: token || '' }) })\n                .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n        });\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.DNSZONE = { bewerten: bewerten, darstellen: null, text: text, ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, T: T };<\/p>\n<p>    var btn = document.getElementById('dnszone-btn');\n    var out = document.getElementById('dnszone-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    function el(tag, stil, txt) { var e = document.createElement(tag); if (stil) { e.setAttribute('style', stil); } if (txt !== undefined && txt !== null) { e.textContent = txt; } return e; }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.95rem; margin: 22px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace; word-break: break-all;';\n    var KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 8px; padding: 14px 16px; margin: 0 0 10px;';\n    var GUT = ' color: #7ee787;', WARN = ' color: #ffa94d;', ROT = ' color: #ff7b72;', GRAU = ' color: #8a8a99;';\n    var FARBEN = { hoch: '#ff7b72', mittel: '#ffa94d', niedrig: '#e3b341', info: '#8a8a99', gut: '#7ee787' };\n    var URTEIL = { gut: GUT, warnung: WARN, kritisch: ROT };\n    function gitter(sp) { return el('div', 'display: grid; grid-template-columns: ' + sp + '; gap: 0 18px; align-items: baseline;'); }\n    function paar(g, n, w, stil) { g.appendChild(el('div', ZELLE, n)); g.appendChild(el('div', ZELLE_WERT + (stil || ''), w)); }<\/p>\n<p>    function tabelle(b) {\n        var huelle = el('div', 'overflow-x: auto; margin: 0 0 6px;');\n        var t = el('table', 'border-collapse: collapse; width: 100%; min-width: 640px; font-size: 0.84rem;');\n        var kopf = el('tr', '');\n        [T.sp_ns, T.sp_ip, T.sp_erreichbar, T.sp_autoritaet, T.sp_serial, T.sp_a].forEach(function (n) {\n            kopf.appendChild(el('th', 'text-align: left; padding: 6px 12px 6px 0; color: #8a8a99; font-weight: 700; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid var(--border, #2a2a35); white-space: nowrap;', n));\n        });\n        t.appendChild(kopf);\n        var serials = {};\n        b.server.forEach(function (z) { if (z.serial !== null) { serials[z.serial] = true; } });\n        var drift = Object.keys(serials).length > 1;\n        b.server.forEach(function (z) {\n            var r = el('tr', '');\n            function zelle(txt, stil) { r.appendChild(el('td', 'padding: 7px 12px 7px 0; border-bottom: 1px solid var(--border, #2a2a35); font-family: monospace; color: var(--text-primary, #e8e8ee);' + (stil || ''), txt)); }\n            zelle(z.name, ' word-break: break-all;');\n            zelle(z.ip || '-', GRAU);\n            zelle(z.erreichbar ? T.wert_ja : T.wert_nein, z.erreichbar ? GUT : ROT);\n            zelle(z.aa ? T.wert_ja : T.wert_nein, z.aa ? GUT : WARN);\n            zelle(z.serial !== null ? String(z.serial) : '-', drift ? ROT : GRAU);\n            zelle(z.a || '-', GRAU);\n            t.appendChild(r);\n        });\n        huelle.appendChild(t);\n        return huelle;\n    }<\/p>\n<p>    function darstellen(b, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var txt = T['fehler_' + b.fehler] || T.fehler_unbekannt;\n            if (b.grund && T['grund_' + b.grund]) { txt = txt + ' ' + T['grund_' + b.grund]; }\n            if (b.limit !== null) { txt = txt.replace('{limit}', String(b.limit)); }\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', txt));\n            return;\n        }\n        ziel.appendChild(el('div', 'font-size: 1.05rem; font-weight: 700; margin: 0 0 12px;' + URTEIL[b.urteil], T['urteil_' + b.urteil]));<\/p>\n<p>        var g = gitter('auto auto');\n        paar(g, T.zeile_domain, b.domain, GRAU);\n        paar(g, T.zeile_ns, b.ns.length ? b.ns.join(', ') : '-', GRAU);\n        paar(g, T.zeile_a, b.adressen.length ? b.adressen.join(', ') : '-', b.adressen.length ? GRAU : WARN);\n        paar(g, T.zeile_aaaa, b.aaaa.length ? b.aaaa.join(', ') : T.wert_keine, b.aaaa.length ? GUT : GRAU);\n        paar(g, T.zeile_dnssec, b.dnssec ? (b.ad ? T.wert_dnssec_validiert : T.wert_dnssec_ohne) : T.wert_nein, b.dnssec ? GUT : GRAU);\n        if (b.dauer !== null) { paar(g, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        if (b.limitRest !== null) { paar(g, T.zeile_limit, String(b.limitRest), GRAU); }\n        ziel.appendChild(g);<\/p>\n<p>        if (b.server.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_server));\n            ziel.appendChild(tabelle(b));\n            ziel.appendChild(el('p', ZELLE + ' margin: 0 0 6px; font-size: 0.8rem;', T.tabelle_hinweis));\n        }<\/p>\n<p>        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        var irgendwas = false;\n        STUFEN.forEach(function (s) {\n            var gr = b.gruppen[s];\n            if (!gr.length) { return; }\n            irgendwas = true;\n            ziel.appendChild(el('div', 'font-weight: 700; font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.5px; margin: 14px 0 6px; color: ' + FARBEN[s] + ';', T['stufe_' + s] + ' (' + gr.length + ')'));\n            gr.forEach(function (f) {\n                var k = el('div', KASTEN + ' border-left: 3px solid ' + FARBEN[s] + ';');\n                var t = text('befund_' + f.key, f.daten) || f.key;\n                var teile = t.split(' || ');\n                k.appendChild(el('div', 'color: var(--text-primary, #e8e8ee); font-size: 0.9rem; font-weight: 700;', teile[0]));\n                if (teile[1]) { k.appendChild(el('div', ZELLE + ' padding: 6px 0 0; line-height: 1.55;', teile[1])); }\n                ziel.appendChild(k);\n            });\n        });\n        if (!irgendwas) { ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.keine_befunde)); }\n    }\n    window.LW_TEST.DNSZONE.darstellen = darstellen;<\/p>\n<p>    var laeuft = false;\n    btn.addEventListener('click', function () {\n        if (laeuft) { return; }\n        laeuft = true; btn.disabled = true;\n        out.innerHTML = '';\n        out.appendChild(el('p', ZELLE + GRAU + ' margin: 0;', T.laeuft));\n        abfragen(wert('dnszone-domain')).then(function (a) { darstellen(bewerten(a), out); laeuft = false; btn.disabled = false; },\n            function () { darstellen(bewerten({ fehler: 'netz' }), out); laeuft = false; btn.disabled = false; });\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Narz\u0119dzie pyta najpierw publiczny resolver o delegacj\u0119, a potem ka\u017cdy autorytatywny serwer nazw bezpo\u015brednio. Dopiero drugi krok pokazuje awarie, kt\u00f3rych zwyk\u0142e zapytanie nigdy nie ujawnia: serwer ze starsz\u0105 wersj\u0105 strefy, serwer wci\u0105\u017c wpisany w delegacj\u0119, lecz ju\u017c nieodpowiadaj\u0105cy, albo wszystkie serwery w jednej sieci.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92774,92295,92762],"class_list":["post-15709","page","type-page","status-publish","hentry","tag-it-networks-pl","tag-seo-pl","tag-web-development-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Narz\u0119dzie pyta najpierw publiczny resolver o delegacj\u0119, a potem ka\u017cdy autorytatywny serwer nazw bezpo\u015brednio. Dopiero drugi krok pokazuje awarie, kt\u00f3rych zwyk\u0142e zapytanie nigdy nie ujawnia: serwer ze starsz\u0105 wersj\u0105 strefy, serwer wci\u0105\u017c wpisany w delegacj\u0119, lecz ju\u017c nieodpowiadaj\u0105cy, albo wszystkie serwery w jednej sieci.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/dns-delegation-serial-ttl-auditor\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/dns-delegation-serial-ttl-auditor\\\/\",\"name\":\"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-05T23:21:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/dns-delegation-serial-ttl-auditor\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/dns-delegation-serial-ttl-auditor\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/dns-delegation-serial-ttl-auditor\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/","og_locale":"en_US","og_type":"article","og_title":"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno - Lukas Wojcik - Blog","og_description":"Narz\u0119dzie pyta najpierw publiczny resolver o delegacj\u0119, a potem ka\u017cdy autorytatywny serwer nazw bezpo\u015brednio. Dopiero drugi krok pokazuje awarie, kt\u00f3rych zwyk\u0142e zapytanie nigdy nie ujawnia: serwer ze starsz\u0105 wersj\u0105 strefy, serwer wci\u0105\u017c wpisany w delegacj\u0119, lecz ju\u017c nieodpowiadaj\u0105cy, albo wszystkie serwery w jednej sieci.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/","name":"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-05T23:21:53+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/dns-delegation-serial-ttl-auditor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Audyt delegacji DNS, numeru seryjnego i TTL: ka\u017cdy serwer nazw pytany osobno"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=15709"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15709\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=15709"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}