zev dns پیدا میکند کدام سرورهای DNS واقعاً از شبکهٔ شما کار میکنند و از چه راهی (رمزنگاریشده، پورتی دیگر، TCP، از راه پروکسی شما)، جوابهای فیلترینگ را دور میریزد، امضاهای DNSSEC را خودش بررسی میکند و اگر همه از کار بیفتند به DNS خود شبکه برمیگردد تا نامها هیچوقت از کار نیفتند.
هر سایتی با یک پرسش DNS شروع میشود: «نشانی github.com چیست؟». روی شبکهٔ فیلترشده این پرسش بیصدا خراب میشود: جواب دروغ است (یک نشانی، مثل `10.10.34.36`، برای هر سایت مسدود)، DNS رمزنگاریشده قطع میشود، DNS خود شبکه کند است یا جواب نمیدهد. برنامهها فقط میگویند «وصل نمیشود».
`zev dns` همهٔ سرورهای DNS شناختهشده را، با هر راهی که میشود از آنها پرسید، از همانجا که هستید اندازه میگیرد؛ میگوید شبکه با DNS چه میکند؛ و وقتی روشنش کنید، نامهای این رایانه را از راه بهترین چندتا جواب میدهد. امضاهای DNSSEC را خودش بررسی میکند، پس جواب جعلی برای یک نام امضاشده از هر راهی که آمده باشد گیر میافتد. اگر همه از کار بیفتند، از DNS خود شبکه میپرسد: zev dns هیچوقت شما را بینام نمیگذارد.
```bash
zev dns check # این شبکه با DNS چه میکند، و چه راهی از آن میگذرد
sudo zev dns on # نامهای این رایانه از بهترین راهها (لینوکس)
zev dns status # الان از چه راهی میپرسد و چطور پیش میرود
sudo zev dns off # درست همانطور که بود
```
```diagram
type: flow
title: zev dns برای هر سرور DNS چطور راهی پیدا میکند
---
رمزنگاریشده | DNS روی HTTPS و DNS روی TLS، مستقیم به نشانی سرور (بیآنکه اول نامی را بپرسد) | good | 🔒
~ دستدادن TLS قطع میشود
نامهای دیگر | همان سرور با هر نامی که گواهیاش دارد: فیلتر اغلب فقط نام اصلی را میشناسد | | 🔁
~ باز هم قطع
سلام تکهتکه | سلام TLS در دو رکورد و تکههای کوچک، تا فیلتر نتواند نام سرور را در آن بخواند | | ✂️
~ باز هم بسته
پورتی دیگر | DNS ساده روی پورتهایی که بعضی سرورها روی آنها هم جواب میدهند (OpenDNS پورت 443، Quad9 پورت 9953)، و روی TCP | warn | 🚪
~ هیچ راه مستقیمی کار نمیکند
پروکسی شما | DNS روی HTTPS از راه zev proxy، وقتی `zev proxy share` روشن است | accent | 🛰️
~ همه از کار افتادند
DNS شبکه | آخر از همه، انگار zev dns نبود: نامها کار میکنند | dim | 🏠
```
## در یک دقیقه شروع کنید
```diagram
type: cards
title: DNS درست با سه دستور
---
1️⃣ | نگاه | zev dns check: این شبکه با DNS چه میکند (دروغ، بستن) و کدام راهها هنوز راست میگویند، در حدود ۱۵ ثانیه
2️⃣ | روشن | sudo zev dns on: نامهای این رایانه از بهترین چندتا، DNS شبکه پشتشان، امضاها بررسیشده
3️⃣ | دیدن | zev dns status، و zev dns why <name> برای هر نامی
```
## همهٔ دستورها
| دستور | نمونه | چه میکند |
|---|---|---|
| `check` | `zev dns check` | این شبکه با DNS چه میکند، و چه راهی از آن میگذرد |
| `bench` | `zev dns bench` · `zev dns bench --for private` | همهٔ سرورها، با همهٔ راهها، اندازهگیریشده از اینجا؛ بهترین برای هر کاربرد |
| `why` | `zev dns why twitter.com` · `zev dns why example.com AAAA` | هر سرور دربارهٔ یک نام چه میگوید، چه کسی دروغ میگوید، کدام امضاشده است |
| `verify` | `zev dns verify www.wikipedia.org` · `zev dns verify example.com --json` | کدام سرورها نشانی واقعی سایت را دادند، با اثبات از روی گواهی HTTPS هر نشانی |
| `on` | `sudo zev dns on` · `sudo zev dns on --for adblock` | نامهای این رایانه از zev dns (لینوکس)، با بررسی اینکه سیستم واقعاً از آن میپرسد |
| `off` | `sudo zev dns off` | درست همانطور که بود |
| `status` | `zev dns status` | الان از کجا میپرسد، چقدر سریع، حافظهٔ موقت، دروغهای دورریخته، جوابهای جعلی |
| `log` | `sudo zev dns log` · `sudo zev dns log -f` · `sudo zev dns log github` · `--json` | نامهایی که این کامپیوتر پرسید، تازهترین در آخر، و اینکه هر کدام چطور جواب گرفت |
| `top` | `sudo zev dns top` · `sudo zev dns top --json` | پرتکرارترینها، چطور جواب گرفتند، کدام راه جواب داد، چه چیزی نشد، کدام دستگاهها پرسیدند |
| `share` | `sudo zev dns share on` · `sudo zev dns share off` · `zev dns share` | گوشیها، تلویزیونها و کنسولهای این شبکه هم از آن استفاده کنند |
| `use` | `sudo zev dns use family` | کاربردی دیگر در حالی که روشن است: balanced، fast، private، secure، family، adblock، gaming |
| `rule` | `sudo zev dns rule add corp.example system` · `sudo zev dns rule country de` | بعضی نامها از DNS شبکه، بسته، یا از یک سرور |
| `sanctions` | `sudo zev dns sanctions on` | سرویسهای توسعهدهندهٔ تحریمی از راه یک سرور رلهٔ محلی |
| `set` | `sudo zev dns set strict=on` · `set dnssec=off` · `set log=off` | strict، proxy، rebinding، dnssec، log، share، listen |
| `ls` | `zev dns ls` | سرورهایی که میشناسد، و هر کدام به چه کار میآید |
| `restore` | `sudo zev dns restore` | DNS سیستم مثل قبل (آنچه systemd اجرا میکند اگر zev dns از کار بیفتد) |
## این شبکه با DNS چه میکند؟ zev dns check
```bash
zev dns check
```
حدود ۲۰ سرور را با نزدیک ۹۰ راه همزمان میپرسد، چند ثانیه طول میکشد و به نصب چیزی نیاز ندارد. روی یک شبکهٔ فیلترشده چنین است:
```text
This network's DNS
! 192.168.1.1 answers in 4 ms, but gives the censor's address for 4 of 4 blocked sites
On the way out
✗ something on this network answers DNS questions meant for other servers (an address with no DNS server answered 10.10.34.36)
✗ plain DNS on port 53: 19 of 19 resolvers' answers were the censor's
What gets through
✓ DNS over HTTPS (encrypted): 1 work
dnssb DoH as dot.sb
✗ DNS over TLS (encrypted): blocked: the handshake is cut when the filter reads the resolver's name (9 of 13)
✓ plain DNS on another port: 4 work
quad9 UDP :9953, quad9-unfiltered UDP :9953, opendns UDP :443, opendns-family UDP :443
✓ plain DNS over TCP: 15 work
✗ plain DNS (UDP 53): blocked
What zev dns would use (balanced)
1. dnssb DoH as dot.sb 110 ms
2. quad9 UDP :9953 125 ms
3. opendns UDP :443 140 ms
then this network's own DNS, if all of those fail
```
آنجا چه پیدا کرد، و چطور:
- **کسی سر راه جواب میدهد.** zev از نشانیای میپرسد که هیچ سرور DNSی روی آن نیست (192.0.2.53، رزروشده برای مثالها). سکوت طبیعی است؛ جواب یعنی چیزی بین شما و اینترنت خودش به DNS جواب میدهد. هر نشانیای که میدهد دروغ این شبکه است و zev از آن به بعد آن را از هر سروری دور میریزد.
- **دروغ روی پورت 53.** جواب سادهٔ همهٔ سرورها برای سایت مسدود، نشانی فیلترینگ بود، چون فیلتر زودتر جواب داد.
- **چه چیزی هنوز میگذرد.** اینجا: DNS رمزنگاریشدهٔ DNS.SB با نام دوم گواهیاش، DNS ساده روی پورتهایی جز 53، و TCP.
`zev dns check --json` همین را برای اسکریپتها و عاملها میدهد.
## روشن کردن: sudo zev dns on
```bash
sudo zev dns on # balanced: سریع و درست، رمزنگاریشده وقتی هزینهٔ کمی دارد
sudo zev dns on --for private # یا کاربردی دیگر، پایینتر
```
یک سرور DNS کوچک روی `127.0.0.153` راه میاندازد (سرویسی سیستمی که با رایانه بالا میآید) و سیستم را به آن میسپارد:
- **با systemd-resolved** (اوبونتو، فدورا، بیشتر دسکتاپها): تنظیمی در `/run/systemd/resolved.conf.d/zev-dns.conf`، و لینکهای شبکه دیگر مسیر پیشفرض نامها نیستند. دامنههایی که یک لینک خودش میخواهد، مثلاً دامنهٔ ویپیان کاری، همچنان به همان لینک میروند.
- **بدون آن:** `/etc/resolv.conf` به zev dns اشاره میکند؛ فایل قبلی نگه داشته و برگردانده میشود.
بعد **بررسی میکند که سیستم واقعاً از آن میپرسد**: نامی را که فقط zev dns میتواند جواب بدهد، همانطور میپرسد که هر برنامهای میپرسد. اگر نشد، همهچیز همانطور که بود برمیگردد و این را به شما میگوید. هیچ چیز نیمهکاره نمیماند.
اولین اندازهگیری چند ثانیه طول میکشد؛ تا آن موقع DNS خود شبکه جواب میدهد، پس نامها از ثانیهٔ اول کار میکنند.
## نامها هیچوقت از کار نمیافتند
```diagram
type: sequence
title: یک نام، وقتی کارها خراب میشود
lanes: یک برنامه | zev dns | بهترین راهها | DNS شبکه
alt: برنامه از zev dns میپرسد؛ اگر بتواند از حافظه جواب میدهد؛ وگرنه از بهترین راه میپرسد و اگر کند بود از بعدی هم، و اولین جواب درست را برمیدارد؛ جواب فیلترینگ دور ریخته میشود؛ اگر هیچکدام از بهترین راهها جواب ندهند از DNS شبکه میپرسد؛ اگر هیچ چیز جواب ندهد، نسخهٔ قدیمی را میدهد
---
یک برنامه -> zev dns : github.com?
note zev dns : نگه داشته و هنوز تازه است؟ فوری جواب میدهد | good
zev dns -> بهترین راهها : سریعترین اول؛ اگر کند بود بعدی هم میپیوندد
بهترین راهها --> zev dns : 10.10.34.36 (جواب فیلترینگ، از سر راه)
note zev dns : دور ریخته میشود: جواب نیست | warn
بهترین راهها --> zev dns : 140.82.121.3
zev dns --> یک برنامه : 140.82.121.3
== اگر هیچکدام از بهترین راهها جواب ندهند ==
zev dns -> DNS شبکه : github.com?
DNS شبکه --> zev dns : هرچه بگوید
== اگر هیچ چیز جواب ندهد ==
zev dns --> یک برنامه : آخرین جوابی که داشت، تا ۳ روز نگه داشته
```
- **مسابقه، نه صف.** اول از بهترین راه میپرسد. اگر تا وقتی که معمولاً جواب میداد جواب نداد، دومی هم میپیوندد، بعد سومی؛ اولین جواب درست برنده است. یک سرور کند هیچوقت شما را منتظر نمیگذارد.
- **راههایی که خراب میشوند استراحت میکنند.** بعد از سه شکست پشت سر هم، یک راه مدتی کنار گذاشته میشود (۵ ثانیه، بعد بیشتر، تا ۲ دقیقه) و دوباره امتحان میشود.
- **جوابهایی که در UDP جا نمیشوند.** نامی با نشانیهای زیاد، یا کلیدهای یک zone امضاشده، در یک جواب UDP جا نمیشود: سرور آن را بریده میفرستد و zev dns دوباره روی TCP میپرسد. جایی که شبکه TCP به آن سرور را بسته، zev dns دو راه دیگر درست برای همین نگه میدارد (بهترین راههای TCP، DoT یا DoH که اندازه گرفته و اینجا کار میکنند، مثل TCP روی پورت 5353 در AdGuard) و از آنها میپرسد. `zev dns status` آنها را با ◇ نشان میدهد، با شمار جوابهایی که کامل از راه آنها رسید.
- **DNS شبکه پشت سرشان.** اگر هیچکدام از بهترین راهها تا ۲٫۵ ثانیه جواب ندهند، از DNS شبکه میپرسد: درست همان اتفاقی که بدون zev dns میافتاد. اگر بهترین راهها کلاً از کار بیفتند (قطعی، یک مسدودسازی تازه)، zev dns مدتی اول از DNS شبکه میپرسد، دوباره اندازه میگیرد، و همین که یکی جواب داد به بهترین راهها برمیگردد.
- **نسخههای قدیمی.** وقتی هیچ چیز جواب نمیدهد، نامی را که قبلاً جواب داده با نسخهٔ قدیمیاش جواب میدهد (تا ۳ روز، با TTL سیثانیهای، همانطور که RFC 8767 پیشنهاد میکند). سایتهایی که از قبل استفاده میکنید هنگام قطعی هم باز میشوند.
- **جوابهای نگهداشته.** جوابها تا وقتی TTL آنها میگوید نگه داشته میشوند. نامی که زیاد پرسیده میشود کمی پیش از تمام شدن دوباره گرفته میشود، تا هیچوقت منتظر نماند.
- **شبکهٔ تازه، اندازهگیری تازه.** zev dns وقتی شبکه را عوض میکنید (وایفای دیگر، هاتاسپات گوشی) متوجه میشود و دوباره اندازه میگیرد، با شروع از آنچه دفعهٔ قبل آنجا کار کرد. به هر حال هر نیم ساعت، و تا وقتی بهترین راهها خراباند هر دو دقیقه، اندازه میگیرد.
## بهترین برای آنچه لازم دارید
| کاربرد | چه چیزی را انتخاب میکند |
|---|---|
| `balanced` (پیشفرض) | سریع و درست؛ رمزنگاریشده وقتی کمی بیشتر از ساده هزینه دارد. اگر DNS خود شبکه راست گفته و سریعترین است، میتواند همان باشد |
| `fast` | سریعترین جواب درست، رمزنگاریشده یا نه |
| `private` | فقط رمزنگاریشده (DNS روی HTTPS یا TLS)، به سرورهایی که لاگ نگه نمیدارند و بخشی از نشانی شما را به سایتها نمیدهند (ECS) |
| `secure` | سرورهایی که بدافزار و فیشینگ را میبندند (Quad9، Cloudflare 1.1.1.2، AdGuard) |
| `family` | بدافزار و سایتهای بزرگسالان بسته (Cloudflare 1.1.1.3، AdGuard Family، OpenDNS FamilyShield، CleanBrowsing) |
| `adblock` | تبلیغها و ردیابها بسته (AdGuard، Mullvad adblock) |
| `gaming` | پایدارترین: کمترین فاصله بین جواب معمول و جوابهای کندش |
```bash
zev dns bench # همهٔ راهها، از همینجا اندازهگیریشده، و بهترین برای هر کاربرد
zev dns bench --for gaming # مرتب برای یک کاربرد
sudo zev dns use private # عوض کردن وقتی روشن است
```
```text
✓ quad9 UDP :9953 122 ms 168 ms 17/17
✓ dnssb DoH as dot.sb 110 ms 265 ms 17/17 handshake 380 ms
✗ cloudflare UDP 31 ms 48 ms 17/17 lied 4× (censor's address)
· google DoT - - 0/1 TLS handshake cut
```
یک راه فقط وقتی حساب میشود که **هیچوقت دروغ نگفته باشد**: نشانی فیلترینگ، نشانی خصوصی برای یک نام عمومی، یا جواب برای نامی که وجود ندارد (بعضی شبکهها برای نمایش تبلیغ اینها را میسازند) آن را بیرون میگذارد. سرعت، میانه و کندترین دهم جوابهایش است، تا سروری که به طور میانگین سریع است ولی گاهی گیر میکند برنده نشود. اندازهگیریها برای هر شبکه نگه داشته میشوند، پس شبکهای که به آن برمیگردید با آنچه آنجا کار کرد شروع میشود.
`zev dns ls` سرورهایی را که zev میشناسد، اینکه هر کدام به چه زبانی حرف میزند و برای چه خوب است فهرست میکند.
## چرا این جواب؟ zev dns why
```bash
zev dns why twitter.com
```
```text
twitter.com A, asked 22 ways at once
✓ cloudflare TCP 162.159.140.229 273 ms
✓ quad9 UDP :9953 162.159.140.229 118 ms
✗ local-relay UDP 10.10.34.36 51 ms ← the censor's address, not the site's
✗ network DNS 192.168.1.1 10.10.34.36 4 ms ← the censor's address, not the site's
zev dns answers: 162.159.140.229 2 ms
```
همهٔ سرورها، هر کدام با راهی که از اینجا برایش بهتر کار میکند، کنار هم: چه کسی راست میگوید، چه کسی نام را عمداً میبندد (`⊘`)، چه کسی دروغ میگوید، و خود zev dns چه جوابی میدهد. برای رکوردهای دیگر نوعش را بدهید: `zev dns why example.com AAAA`.
برای یک نام امضاشده، هر جواب با امضاها هم سنجیده میشود، با کلیدهایی که از همان سرور و از همان راه پرسیده میشوند. `signed ✓` یعنی جوابش ثابت شده؛ `forged` یعنی با امضا جور نیست، حتی وقتی نشانی از آنهایی نیست که فیلترینگ به آنها شناخته میشود. خطهای زیر از یک شبکهٔ فیلترشدهٔ واقعیاند، و خط آخر از آزمایش آزمایشگاهی zev، که در آن یک سرور نشانی cloudflare.com را زیر امضای واقعیاش جعل میکند:
```text
cloudflare.com A, asked 25 ways at once
✓ cloudflare UDP 104.16.132.229 104.16.133.229 109 ms signed ✓
✓ adguard-family UDP :5353 104.16.132.229 104.16.133.229 82 ms signed ✓
✓ cleanbrowsing-family UDP 104.16.132.229 104.16.133.229 118 ms
✗ liar UDP 198.51.100.66 40 ms ← forged: the signature on cloudflare.com doesn't match cloudflare.com's keys
cloudflare.com is signed (DNSSEC): an answer whose signatures check out from the root's key is the real one
```
خطی که علامتی ندارد نشانی درست را داد ولی امضایی برای سنجیدن نداشت (بعضی سرورها، از جمله CleanBrowsing، امضاها را میاندازند)، یا کلیدهایش نرسید.
## واقعاً همان سایت است؟ zev dns verify
DNSSEC فقط جواب نامهایی را ثابت میکند که صاحبشان امضایشان کرده، و بیشتر نامها امضا ندارند. `zev dns verify` جوابها را از راه دیگری ثابت میکند که برای **هر سایتی که HTTPS دارد** کار میکند: از همهٔ سرورها، از همهٔ راهها میپرسد، بعد به هر نشانیای که گرفته HTTPS باز میکند و گواهی همان نام را میخواهد. جاعل میتواند نشانی بسازد، اما نه گواهی آن سایت را.
```bash
zev dns verify www.wikipedia.org
```
```text
www.wikipedia.org 37 ways asked; each address checked by opening HTTPS to it and asking for www.wikipedia.org's certificate
The addresses
✓ 185.15.59.224 the site: a valid certificate for www.wikipedia.org (740 ms)
✓ 208.80.153.224 the site: a valid certificate for www.wikipedia.org (1066 ms)
✓ 198.35.26.224 the site: a valid certificate for www.wikipedia.org (1112 ms)
The resolvers
✓ cloudflare UDP 185.15.59.224
✓ quad9 UDP 185.15.59.224
✓ dnssb UDP 198.35.26.224
· google DoH TLS handshake cut
✓ network DNS 192.168.1.1 185.15.59.224
Every address that could be checked is really www.wikipedia.org.
```
وقتی جوابی جعلی باشد، verify میگوید کدام، و با کد ۱ خارج میشود:
```text
The addresses
✓ 104.16.123.96 the site: a valid certificate for www.cloudflare.com (3 ms)
✓ 104.16.124.96 the site: a valid certificate for www.cloudflare.com (2 ms)
✗ 198.51.100.66 not the site: its certificate isn't for www.cloudflare.com
The resolvers
✓ honest UDP 104.16.124.96 104.16.123.96
✗ liar UDP 198.51.100.66 ← not the site
✗ network DNS 192.168.1.1 198.51.100.66 ← not the site
2 answer(s) weren't www.cloudflare.com: forged by the resolver, or on the way to it (plain DNS can be
answered by anything in between). zev dns check finds the ways that answer honestly from here,
and sudo zev dns on uses only those.
```
```diagram
type: sequence
title: اثبات یک جواب با گواهی خود سایت
lanes: zev dns verify | سرورهای DNS | نشانی
alt: zev dns verify نشانیهای یک نام را از همهٔ سرورها میپرسد، بعد به هر نشانی با همان نام HTTPS باز میکند و گواهیای را که نشان میدهد بررسی میکند؛ نشانیای که گواهی معتبر آن نام را نشان دهد خود سایت است، و نشانیای که گواهی نام دیگری را نشان دهد نیست؛ سروری درستکار است که نشانیهایش خود سایت باشند
---
zev dns verify -> سرورهای DNS : www.cloudflare.com؟ (همه، از همهٔ راهها)
سرورهای DNS --> zev dns verify : 104.16.123.96 · 198.51.100.66
zev dns verify -> نشانی : HTTPS به 104.16.123.96، برای www.cloudflare.com
نشانی --> zev dns verify : گواهی معتبر برای www.cloudflare.com | good
zev dns verify -> نشانی : HTTPS به 198.51.100.66، برای www.cloudflare.com
نشانی --> zev dns verify : گواهی یک نام دیگر | bad
note zev dns verify : سروری که 198.51.100.66 را داد درستکار نیست | warn
```
```diagram
type: cards
title: هر نشانه چه معنایی دارد
---
✓ | خود سایت | گواهی معتبری برای آن نام نشان داد، امضاشده از مرجعی که این کامپیوتر به آن اعتماد دارد | good
✗ | خود سایت نیست | گواهی یک نام دیگر، یا نشانی خصوصی برای یک نام عمومی | bad
? | معلوم نشد | از اینجا به HTTPS جواب نداد (مسدود، قطع، یا اصلاً سایت وب نیست). دروغ حساب نمیشود |
· | جوابی نیامد | آن سرور یا راه نشانیای نداد |
```
`--json` اثبات هر نشانی (`site`، `wrong_certificate`، `private`، `unknown`) و حکم هر سرور را میدهد، برای اسکریپتها و پایش.
## نامهای امضاشده: DNSSEC، همینجا بررسی میشود
بسیاری از نامها امضاشدهاند (DNSSEC): صاحب ناحیه هر جواب را امضا میکند، ناحیهٔ بالاتر کلید او را تأیید میکند، و همینطور تا ریشه، که کلیدش درون zev است. فیلترینگ میتواند هر نشانیای بدهد، ولی نمیتواند امضا را با آن جور کند. zev dns هر جواب را خودش از کلید ریشه به پایین بررسی میکند، پس جواب جعلی برای یک نام امضاشده **از هر راهی که آمده باشد** گیر میافتد: از سرور رمزنگاریشده، از DNS ساده روی پورتی دیگر، یا از DNS خود شبکه وقتی هیچ چیز دیگری جواب نداد.
```diagram
type: flow
title: چرا میشود به نشانی cloudflare.com اعتماد کرد
---
کلید ریشه | درون zev ساخته شده (KSK-2017 و KSK-2024 از IANA): تنها چیزی که بیدلیل پذیرفته میشود | good | 🔑
~ امضا میکند
رکورد DS دامنهٔ .com | ریشه میگوید .com کدام کلید را به کار میبرد | | 📜
~ جور است با
کلیدهای .com | همهچیز را در .com امضا میکنند | | 🔐
~ امضا میکند
رکورد DS دامنهٔ cloudflare.com | .com میگوید cloudflare.com کدام کلید را به کار میبرد | | 📜
~ جور است با
کلیدهای cloudflare.com | جوابهای cloudflare.com را امضا میکنند | | 🔐
~ امضا میکند
نشانی | 104.16.132.229، با امضایش: ثابتشده | good | ✅
```
هر جواب یکی از این چهار حالت میشود:
```diagram
type: cards
title: zev dns از یک جواب چه میفهمد
---
✅ | ثابتشده | امضاشده، و همهٔ امضاها از کلید ریشه به پایین درستاند. جواب داده میشود، با بیت AD برای برنامههایی که آن را میخواهند
📭 | امضانشده | ثابت شده که امضا ندارد: یکی از ناحیههای سر راه کلیدی بالای خود ندارد (بیشتر نامها، از جمله twitter.com). مثل قبل جواب داده میشود
❔ | نشد بررسی کرد | کلیدها نرسیدند (برای UDP بزرگاند و TCP بسته است، یا سروری امضاها را میاندازد)، یا ساعت رایانه درست نیست. مثل قبل جواب داده میشود: هرگز بدتر از بدون DNSSEC نیست
⛔ | جعلی | با امضاها جور نیست. دور ریخته میشود و راه بعدی پرسیده میشود، تا سه راه؛ اگر جواب همه جعلی باشد، برنامه SERVFAIL میگیرد همراه با دلیلش (خطای DNS گسترده، کد ۶)
```
در عمل یعنی:
- **«جعلی» فقط وقتی چیزی هست و غلط است.** جوابی که امضایش جور نیست، یا جوابی بیامضا برای ناحیهای که ثابت شده امضاشده است، از سروری که DNSSEC بلد است. هر چیزی که فقط نرسیده (کلیدهایی که نمیآیند، سروری که امضاها را جلو نمیفرستد) «نشد بررسی کرد» است و نام مثل قبل جواب داده میشود. zev dns هیچ نامی را فقط به این دلیل که DNSSEC بررسی نشد از کار نمیاندازد.
- **کلیدها از بهترین راهها میآیند**، از راه حافظهٔ موقت، و برایشان فقط جوابهایی حساب میشوند که امضا دارند. کلیدها تا وقتی TTL آنها میگوید (معمولاً یکی دو روز) در حافظه میمانند، پس بررسی فقط بار اولی که یک ناحیه دیده میشود چند رفتوبرگشت اضافه میکند و بعد هیچ. پرسش کلیدی که شکست بخورد تا ۵ دقیقه دوباره پرسیده نمیشود.
- **کلیدها از پیش.** zev dns درست پس از اندازهگیری یک شبکه، کلیدهای ریشه و پرکاربردترین نامهای سطحبالا (.com، .net، .org، .io، .dev و چند تای دیگر) را میگیرد، تا نخستین نام امضاشده منتظرشان نماند. `zev dns status` زیر *lately* همین را میگوید: `dnssec keys ready: the root's, and 17 of 17 top-level names'`.
- **برنامههایی که خودشان بررسی میکنند** (بیت CD را میگذارند) جواب را همانطور که آمده، بررسینشده میگیرند. برنامههایی که با DO میپرسند امضاها را هم میگیرند؛ بقیه جواب را بدون آنها.
- **نامهای اداری و خانگی** بررسی نمیشوند: نامهای زیر `.lan`، `.home.arpa`، `.local`، `.internal`، `.corp`، نامهای معکوس بازههای نشانی خصوصی، و هر نامی زیر یک نام سطح بالا که در DNS عمومی وجود ندارد. قاعدههایی که نامها را به `system` میفرستند هم بررسی نمیشوند.
- **ساعت**: امضاها بین دو تاریخ معتبرند. اگر ساعت رایانه خیلی غلط باشد، نامهای امضاشده «نشد بررسی کرد» میشوند (نه جعلی)، با یک ساعت فرصت.
روی یک شبکهٔ فیلترشدهٔ واقعی (۲۶ اکتبر ۲۰۲۶) جواب هر سرور درستکار برای cloudflare.com، ed25519.nl، nlnetlabs.nl و nic.cz ثابت شد، با ECDSA، Ed25519، RSA، NSEC و NSEC3. جوابی که فیلترینگ برای torproject.org (امضاشده) تزریق میکند امضایی ندارد. کلیدهای `.org` برای UDP بزرگاند و TCP بسته بود، پس نامهای `.org` از راه همهٔ سرورها «نشد بررسی کرد» شدند، جز AdGuard روی پورت 5353 که روی TCP جواب میدهد. حالا zev dns راهی مثل این را برای جوابهای بزرگتر از UDP نگه میدارد و چنین کلیدهایی را از آن میگیرد (ببینید [نامها هیچوقت از کار نمیافتند](#نامها-هیچوقت-از-کار-نمیافتند)).
`zev dns status` هر دو را میشمارد:
```text
dnssec 412 answers proven by their signatures, 3 forged ones thrown away
```
و هر جواب جعلی را با راهی که از آن آمد زیر *lately* فهرست میکند.
راههایی را هم که از آنها میپرسد فهرست میکند، با راههایی که برای جوابهای بزرگ نگه داشته:
```text
asking
● quad9 UDP :9953 41 ms ±6, 1290 answered, 2 failed
● cloudflare UDP 48 ms ±9, 980 answered, 0 failed
◇ adguard TCP :5353 (for answers too big for UDP; 37 so far)
○ network DNS 192.168.1.1 (the network's DNS, behind them)
```
## این کامپیوتر چه میپرسد: zev dns log و top
وقتی `zev dns on` روشن است، هر نامی که جواب میدهد در فهرستی کوتاه میرود: زمان، نام، اینکه چطور جواب گرفت، کدام راه جواب داد، چقدر طول کشید، و کدام دستگاه پرسید. در حافظه و در `/run` نگه داشته میشود (فقط root، با ریاستارت پاک میشود) و ۲٬۰۰۰ نام آخر را دارد.
```bash
sudo zev dns log # ۳۰ تای آخر، تازهترین در آخر
sudo zev dns log -f # همانطور که میآیند، مثل tail -f
sudo zev dns log github # فقط نامهایی که github در آنهاست
sudo zev dns log -n 200 --json
```
```text
Names this computer asked newest last
10:05:32 www.wikipedia.org A asked 4 ms quad9 TCP
10:05:33 github.com A asked 5 ms quad9 TCP
10:05:33 www.wikipedia.org A cache 0 ms
10:05:33 api.github.com A asked 4 ms quad9 TCP
10:05:38 github.com A cache 0 ms from 192.168.1.20
```
```diagram
type: cards
title: یک نام چطور جواب گرفت
---
asked | پرسیده شد | از راهی که کنارش نوشته شده | good
cache | از حافظهٔ موقت | هیچ پرسشی بیرون نرفت: نه زمانی گرفت، نه کسی چیزی دید |
kept copy | نسخهٔ منقضی | هیچ چیز جواب نداد، پس جوابی تازه نام را سرپا نگه داشت | warn
blocked | مسدود | با یکی از قاعدههای شما، یا کاربردی که انتخاب کردید (family، adblock) | warn
forged / failed | دورریخته / بیجواب | جواب DNSSEC جعلی، یا اصلاً هیچ جوابی | bad
```
`zev dns top` جمعشان میکند: نامها چطور جواب گرفتند (و حافظهٔ موقت چقدر صرفهجویی کرد)، پرتکرارترین سایتها، کدام راه چند تا و با چه سرعتی جواب داد، چه چیزی مسدود، جعلی یا بیجواب ماند، و کدام دستگاهها پرسیدند.
```bash
sudo zev dns top
```
```text
The last 6 names (over 1 min)
how they were answered
asked 4 66%
cache 2 33%
a name asked out took 3 ms on average; one from the cache takes none
most asked
github.com 3
wikipedia.org 2
answered by
quad9 TCP 4 3 ms average
asked from
127.0.0.1 5 (this computer)
192.168.1.20 1
```
نمیخواهید هیچ فهرستی نگه داشته شود؟ `sudo zev dns set log=off`، و فایل پاک میشود.
## برای همهٔ خانه: zev dns share
گوشیها، تلویزیونها و کنسولها نمیتوانند zev را اجرا کنند، و همان DNS دروغگو یا خراب گریبانشان را میگیرد. `sudo zev dns share on` اجازه میدهد از zev dns این کامپیوتر استفاده کنند: سرورهای درستکار، حافظهٔ موقت، جایگزین، قاعدههای شما و بررسی DNSSEC، برای همهٔ دستگاههای شبکه.
```bash
sudo zev dns share on
```
```text
● zev dns answers the local network too, on 192.168.1.34
On a phone, TV or console: in its network settings, set DNS to 192.168.1.34 (manual).
For every device at once: put 192.168.1.34 as the DNS server in the router's DHCP settings.
Only private addresses (192.168.x, 10.x, 172.16–31.x) are answered, so it's never open to the internet.
sudo zev dns share off stops it; zev dns top shows which devices asked.
```
```diagram
type: flow
title: گوشی از لپتاپ میپرسد؛ لپتاپ از سرورهای درستکار
---
گوشی | DNS روی 192.168.1.34 | | 📱
~ یک نام
این کامپیوتر | zev dns: حافظهٔ موقت، قاعدهها، DNSSEC، راههای درستکار | accent | 💻
~ فقط آنچه در حافظه نیست
سرورهای DNS | راههایی که از این شبکه درست جواب میدهند | good | 🌍
```
روی همهٔ نشانیهای شبکهٔ محلی این کامپیوتر (وایفای، کابل) گوش میدهد، نه روی نشانیهای Docker یا VPN، و دنبالشان میرود: به وایفای دیگری وصل شوید و آن هم جابهجا میشود. پرسشهایی که از نشانیای غیر خصوصی بیایند اصلاً جوابی نمیگیرند، پس از اینترنت نمیشود از آن بهعنوان سرور باز استفاده کرد. `zev dns share` میگوید کجا گوش میدهد؛ `sudo zev dns share off` خاموشش میکند. اگر اینجا فایروال دارید، پورت ۵۳ را برای شبکهٔ محلی باز کنید.
## قاعدهها: بعضی نامها جای دیگر
```bash
sudo zev dns rule add corp.example system # دامنهٔ کاری از راه DNS شبکه
sudo zev dns rule add ads.example block # 0.0.0.0 برای آن و همهٔ نامهای زیرش
sudo zev dns rule add example.org quad9 # یک نام از راه یک سرور
sudo zev dns rule country de # سایتهای یک کشور (.de) از راه DNS شبکه
zev dns rule ls
sudo zev dns rule rm corp.example
```
هر قاعده خود نام و همهٔ زیرمجموعههایش را میگیرد؛ بلندترین قاعدهٔ منطبق برنده است. فرستادن نام سطحبالای یک کشور به `system` سایتهایش را به DNS خود شبکه میفرستد: در همان کشور از داخل سریعتر جواب میدهند، و بعضی فقط از داخل جواب میدهند.
### سرورهای ضدتحریم
بعضی سرویسها کاربران بعضی کشورها را راه نمیدهند (Docker Hub، بخشهایی از سایتهای توسعهدهندهٔ گوگل، JetBrains، HashiCorp…). در آن کشورها، سرورهای DNS محلی این نامها را با نشانی رلهٔ خودشان جواب میدهند که شما را رد میکند.
```bash
sudo zev dns sanctions on
```
فقط نام همین سرویسها را به بهترینشان میفرستد؛ بقیه روی بهترین راهها میمانند. بدانید یعنی چه: رله میبیند از کدامیک از این سرویسها استفاده میکنید، و این سرورها داخل همان کشورند، پس دروغهای فیلترینگ آنجا روی آنها هم هست (`zev dns why` نشانش میدهد). تا خودتان روشنش نکنید خاموش است.
## تنظیمات
```bash
zev dns set # دیدنشان
sudo zev dns set strict=on # هرگز DNS شبکه: بیجواب، به جای جواب رمزنگارینشده
sudo zev dns set proxy=off # zev proxy share را برای DNS به کار نبر
sudo zev dns set rebinding=on # نشانی خصوصی برای نامهای عمومی مجاز باشد
sudo zev dns set dnssec=off # امضاها را اینجا بررسی نکن
sudo zev dns set log=off # فهرستی از نامهای پرسیدهشده نگه ندار
sudo zev dns set share=on # همان sudo zev dns share on
sudo zev dns set listen=127.0.0.153:53
```
- **strict**: برای حریم خصوصی. با آن، وقتی بهترین راهها خراباند، نام به جای رفتن به DNS شبکه بیجواب میماند. پیشفرض خاموش است، چون از کار افتادن نامها برای بیشتر مردم بدتر است.
- **dnssec** (پیشفرض روشن): امضاها همینجا بررسی میشوند و جوابهای جعلی برای نامهای امضاشده دور ریخته میشوند. [نامهای امضاشده](#نامهای-امضاشده-dnssec-همینجا-بررسی-میشود) را ببینید.
- **محافظت در برابر rebinding** (پیشفرض روشن): جوابی با نشانی خصوصی (192.168.x، 10.x…) برای یک نام عمومی دور ریخته میشود. این یا دروغ است یا حمله به دستگاههای خانهٔ شما (DNS rebinding). قاعدههایی که به `system` میروند اثر نمیپذیرند، پس نامهای اداری کار میکنند.
- **log** (بهطور پیشفرض روشن): ۲٬۰۰۰ نام آخری که پرسیده شد، در حافظه و در `/run/zev-dns/queries.jsonl`، که فقط root میتواند بخواند و با ریاستارت پاک میشود. خاموش که باشد چیزی نگه داشته نمیشود و فایل پاک میشود.
- **share** (بهطور پیشفرض خاموش): [برای همهٔ خانه](#برای-همهٔ-خانه-zev-dns-share) را ببینید.
- تنظیمات ظرف چند ثانیه اعمال میشوند؛ چیزی دوباره راهاندازی نمیشود.
## با zev proxy و zev vpn
- وقتی `zev proxy share` روشن است، zev dns DNS روی HTTPS را **از راه پروکسی شما** هم امتحان میکند: وقتی هیچ راه مستقیمی درست کار نمیکند، این یکی همچنان کار میکند.
- وقتی `sudo zev vpn on` روشن است، DNS خود ویپیان از تونل میگذرد؛ zev dns به لینک ویپیان دست نمیزند و هر دو درست جواب میدهند.
## خاموش کردن، از کار افتادن و ریاستارت
```bash
sudo zev dns off # خاموشش کن و دقیقاً آنچه تغییر داده را برگردان
sudo zev dns restore # فقط تنظیمات DNS سیستم را برگردان (همان که systemd اجرا میکند اگر zev dns از کار بیفتد)
zev dns serve --listen 127.0.0.1:5353 # همان سرور در این ترمینال، روی هر پورتی، بی تغییر دادن چیز دیگر
dig @127.0.0.1 -p 5353 example.com # از آن بپرس
```
سرویس را متوقف میکند و دقیقاً همان چیزهایی را که عوض کرده برمیگرداند: تنظیم resolved، لینکهایی که عوض کرد (و فقط همانها) یا `/etc/resolv.conf` قبلی.
طوری ساخته شده که یک خرابی نتواند رایانه را بی DNS بگذارد:
- اگر zev dns به هر دلیلی متوقف شود، حتی اگر کشته شود، systemd فوراً DNS سیستم را برمیگرداند (`zev dns restore`) و دوباره راهش میاندازد.
- تنظیم resolved در `/run` است: ریاستارت همیشه پاکش میکند و zev dns هنگام شروع دوباره میگذاردش.
- `sudo zev dns on` بررسی میکند که سیستم واقعاً نامها را از آن میگیرد، و اگر نه همهچیز را برمیگرداند.
## دروغ را چطور میشناسد
| نشانه | zev چه میکند |
|---|---|
| نشانیای که فیلترینگ میدهد (مثل `10.10.34.x`)، یا نشانیای که از جایی بی سرور DNS جواب آمد | جواب دور ریخته میشود؛ UDP ساده همچنان منتظر جواب واقعی میماند |
| نشانی خصوصی برای یک نام عمومی | دور ریخته میشود (محافظت rebinding) |
| جواب برای نامی که نمیتواند وجود داشته باشد (نامی تصادفی زیر example.com) | آن سرور به کار نمیرود |
| 0.0.0.0 برای یک نام معمولی | سرور عمداً نامها را میبندد: شمرده میشود، فقط برای `adblock` و `family` قبول است |
| حروف نام با بزرگی و کوچکیای جز آنچه پرسیده شد (DNS 0x20) | جواب جعلی: دور ریخته میشود، برای سرورهایی که بزرگی و کوچکی حروف را نگه میدارند |
| برای یک نام امضاشده، جوابی که با امضاهای DNSSEC آن جور نیست | دور ریخته میشود و راه بعدی پرسیده میشود؛ اگر جواب همهٔ راهها جعلی باشد SERVFAIL |
## هر راه چه چیزی را نشان میدهد
- **DNS روی HTTPS / TLS**: شبکه فقط میبیند با یک سرور DNS حرف میزنید، نه چه نامهایی. zev پرسشها را تا ۱۲۸ بایت پر میکند (RFC 8467) تا طولشان نام را لو ندهد.
- **DNS ساده، هر پورتی، UDP یا TCP**: شبکه میتواند همهٔ نامها را ببیند. درست است (zev بررسی میکند)، نه خصوصی.
- **خود سرور DNS** در هر حال نامهای شما را میبیند؛ کاربرد `private` سرورهایی را برمیگزیند که لاگ نگه نمیدارند و نشانی شما را جلو نمیفرستند.
## محدودیتها
- `sudo zev dns on` فعلاً برای لینوکس است. روی macOS، `sudo zev dns serve --listen 127.0.0.1:53` را اجرا کنید و DNS سیستم را 127.0.0.1 بگذارید. `check`، `bench` و `why` روی لینوکس و macOS کار میکنند.
- سرورها از راه IPv4 پرسیده میشوند؛ نامهایی با نشانی IPv6 (AAAA) به طور عادی جواب داده میشوند.
- DNSSEC برای الگوریتمهایی که امروز به کار میروند بررسی میشود (RSA/SHA-1، RSA/SHA-256، RSA/SHA-512، ECDSA P-256 و P-384، Ed25519)؛ ناحیهای که فقط با الگوریتمهای دیگر امضا شده (Ed448، DSA و GOST قدیمی) امضانشده حساب میشود. NSEC3 با بیش از ۱۵۰ تکرار هم امضانشده حساب میشود (RFC 9276).
- DNS ساده روی TCP برای هر پرسش یک اتصال باز میکند، پس راههای TCP پایینتر از بقیه قرار میگیرند.
هر سایتی با یک پرسش DNS شروع میشود: «نشانی github.com چیست؟». روی شبکهٔ فیلترشده این پرسش بیصدا خراب میشود: جواب دروغ است (یک نشانی، مثل 10.10.34.36، برای هر سایت مسدود)، DNS رمزنگاریشده قطع میشود، DNS خود شبکه کند است یا جواب نمیدهد. برنامهها فقط میگویند «وصل نمیشود».
zev dns همهٔ سرورهای DNS شناختهشده را، با هر راهی که میشود از آنها پرسید، از همانجا که هستید اندازه میگیرد؛ میگوید شبکه با DNS چه میکند؛ و وقتی روشنش کنید، نامهای این رایانه را از راه بهترین چندتا جواب میدهد. امضاهای DNSSEC را خودش بررسی میکند، پس جواب جعلی برای یک نام امضاشده از هر راهی که آمده باشد گیر میافتد. اگر همه از کار بیفتند، از DNS خود شبکه میپرسد: zev dns هیچوقت شما را بینام نمیگذارد.
Terminal
zev dns check # این شبکه با DNS چه میکند، و چه راهی از آن میگذردsudo zev dns on # نامهای این رایانه از بهترین راهها (لینوکس)zev dns status # الان از چه راهی میپرسد و چطور پیش میرودsudo zev dns off # درست همانطور که بود
zev dns برای هر سرور DNS چطور راهی پیدا میکند
🔒
رمزنگاریشده
DNS روی HTTPS و DNS روی TLS، مستقیم به نشانی سرور (بیآنکه اول نامی را بپرسد)
دستدادن TLS قطع میشود
🔁
نامهای دیگر
همان سرور با هر نامی که گواهیاش دارد: فیلتر اغلب فقط نام اصلی را میشناسد
باز هم قطع
✂️
سلام تکهتکه
سلام TLS در دو رکورد و تکههای کوچک، تا فیلتر نتواند نام سرور را در آن بخواند
باز هم بسته
🚪
پورتی دیگر
DNS ساده روی پورتهایی که بعضی سرورها روی آنها هم جواب میدهند (OpenDNS پورت 443، Quad9 پورت 9953)، و روی TCP
هیچ راه مستقیمی کار نمیکند
🛰️
پروکسی شما
DNS روی HTTPS از راه zev proxy، وقتی zev proxy share روشن است
همه از کار افتادند
🏠
DNS شبکه
آخر از همه، انگار zev dns نبود: نامها کار میکنند
حدود ۲۰ سرور را با نزدیک ۹۰ راه همزمان میپرسد، چند ثانیه طول میکشد و به نصب چیزی نیاز ندارد. روی یک شبکهٔ فیلترشده چنین است:
Text
This network's DNS ! 192.168.1.1 answers in 4 ms, but gives the censor's address for 4 of 4 blocked sitesOn the way out ✗ something on this network answers DNS questions meant for other servers (an address with no DNS server answered 10.10.34.36) ✗ plain DNS on port 53: 19 of 19 resolvers' answers were the censor'sWhat gets through ✓ DNS over HTTPS (encrypted): 1 work dnssb DoH as dot.sb ✗ DNS over TLS (encrypted): blocked: the handshake is cut when the filter reads the resolver's name (9 of 13) ✓ plain DNS on another port: 4 work quad9 UDP :9953, quad9-unfiltered UDP :9953, opendns UDP :443, opendns-family UDP :443 ✓ plain DNS over TCP: 15 work ✗ plain DNS (UDP 53): blockedWhat zev dns would use (balanced) 1. dnssb DoH as dot.sb 110 ms 2. quad9 UDP :9953 125 ms 3. opendns UDP :443 140 ms then this network's own DNS, if all of those fail
آنجا چه پیدا کرد، و چطور:
کسی سر راه جواب میدهد. zev از نشانیای میپرسد که هیچ سرور DNSی روی آن نیست (192.0.2.53، رزروشده برای مثالها). سکوت طبیعی است؛ جواب یعنی چیزی بین شما و اینترنت خودش به DNS جواب میدهد. هر نشانیای که میدهد دروغ این شبکه است و zev از آن به بعد آن را از هر سروری دور میریزد.
دروغ روی پورت 53. جواب سادهٔ همهٔ سرورها برای سایت مسدود، نشانی فیلترینگ بود، چون فیلتر زودتر جواب داد.
چه چیزی هنوز میگذرد. اینجا: DNS رمزنگاریشدهٔ DNS.SB با نام دوم گواهیاش، DNS ساده روی پورتهایی جز 53، و TCP.
zev dns check --json همین را برای اسکریپتها و عاملها میدهد.
sudo zev dns on # balanced: سریع و درست، رمزنگاریشده وقتی هزینهٔ کمی داردsudo zev dns on --for private # یا کاربردی دیگر، پایینتر
یک سرور DNS کوچک روی 127.0.0.153 راه میاندازد (سرویسی سیستمی که با رایانه بالا میآید) و سیستم را به آن میسپارد:
با systemd-resolved (اوبونتو، فدورا، بیشتر دسکتاپها): تنظیمی در /run/systemd/resolved.conf.d/zev-dns.conf، و لینکهای شبکه دیگر مسیر پیشفرض نامها نیستند. دامنههایی که یک لینک خودش میخواهد، مثلاً دامنهٔ ویپیان کاری، همچنان به همان لینک میروند.
بدون آن:/etc/resolv.conf به zev dns اشاره میکند؛ فایل قبلی نگه داشته و برگردانده میشود.
بعد بررسی میکند که سیستم واقعاً از آن میپرسد: نامی را که فقط zev dns میتواند جواب بدهد، همانطور میپرسد که هر برنامهای میپرسد. اگر نشد، همهچیز همانطور که بود برمیگردد و این را به شما میگوید. هیچ چیز نیمهکاره نمیماند.
اولین اندازهگیری چند ثانیه طول میکشد؛ تا آن موقع DNS خود شبکه جواب میدهد، پس نامها از ثانیهٔ اول کار میکنند.
مسابقه، نه صف. اول از بهترین راه میپرسد. اگر تا وقتی که معمولاً جواب میداد جواب نداد، دومی هم میپیوندد، بعد سومی؛ اولین جواب درست برنده است. یک سرور کند هیچوقت شما را منتظر نمیگذارد.
راههایی که خراب میشوند استراحت میکنند. بعد از سه شکست پشت سر هم، یک راه مدتی کنار گذاشته میشود (۵ ثانیه، بعد بیشتر، تا ۲ دقیقه) و دوباره امتحان میشود.
جوابهایی که در UDP جا نمیشوند. نامی با نشانیهای زیاد، یا کلیدهای یک zone امضاشده، در یک جواب UDP جا نمیشود: سرور آن را بریده میفرستد و zev dns دوباره روی TCP میپرسد. جایی که شبکه TCP به آن سرور را بسته، zev dns دو راه دیگر درست برای همین نگه میدارد (بهترین راههای TCP، DoT یا DoH که اندازه گرفته و اینجا کار میکنند، مثل TCP روی پورت 5353 در AdGuard) و از آنها میپرسد. zev dns status آنها را با ◇ نشان میدهد، با شمار جوابهایی که کامل از راه آنها رسید.
DNS شبکه پشت سرشان. اگر هیچکدام از بهترین راهها تا ۲٫۵ ثانیه جواب ندهند، از DNS شبکه میپرسد: درست همان اتفاقی که بدون zev dns میافتاد. اگر بهترین راهها کلاً از کار بیفتند (قطعی، یک مسدودسازی تازه)، zev dns مدتی اول از DNS شبکه میپرسد، دوباره اندازه میگیرد، و همین که یکی جواب داد به بهترین راهها برمیگردد.
نسخههای قدیمی. وقتی هیچ چیز جواب نمیدهد، نامی را که قبلاً جواب داده با نسخهٔ قدیمیاش جواب میدهد (تا ۳ روز، با TTL سیثانیهای، همانطور که RFC 8767 پیشنهاد میکند). سایتهایی که از قبل استفاده میکنید هنگام قطعی هم باز میشوند.
جوابهای نگهداشته. جوابها تا وقتی TTL آنها میگوید نگه داشته میشوند. نامی که زیاد پرسیده میشود کمی پیش از تمام شدن دوباره گرفته میشود، تا هیچوقت منتظر نماند.
شبکهٔ تازه، اندازهگیری تازه. zev dns وقتی شبکه را عوض میکنید (وایفای دیگر، هاتاسپات گوشی) متوجه میشود و دوباره اندازه میگیرد، با شروع از آنچه دفعهٔ قبل آنجا کار کرد. به هر حال هر نیم ساعت، و تا وقتی بهترین راهها خراباند هر دو دقیقه، اندازه میگیرد.
تبلیغها و ردیابها بسته (AdGuard، Mullvad adblock)
gaming
پایدارترین: کمترین فاصله بین جواب معمول و جوابهای کندش
Terminal
zev dns bench # همهٔ راهها، از همینجا اندازهگیریشده، و بهترین برای هر کاربردzev dns bench --for gaming # مرتب برای یک کاربردsudo zev dns use private # عوض کردن وقتی روشن است
Text
✓ quad9 UDP :9953 122 ms 168 ms 17/17✓ dnssb DoH as dot.sb 110 ms 265 ms 17/17 handshake 380 ms✗ cloudflare UDP 31 ms 48 ms 17/17 lied 4× (censor's address)· google DoT - - 0/1 TLS handshake cut
یک راه فقط وقتی حساب میشود که هیچوقت دروغ نگفته باشد: نشانی فیلترینگ، نشانی خصوصی برای یک نام عمومی، یا جواب برای نامی که وجود ندارد (بعضی شبکهها برای نمایش تبلیغ اینها را میسازند) آن را بیرون میگذارد. سرعت، میانه و کندترین دهم جوابهایش است، تا سروری که به طور میانگین سریع است ولی گاهی گیر میکند برنده نشود. اندازهگیریها برای هر شبکه نگه داشته میشوند، پس شبکهای که به آن برمیگردید با آنچه آنجا کار کرد شروع میشود.
zev dns ls سرورهایی را که zev میشناسد، اینکه هر کدام به چه زبانی حرف میزند و برای چه خوب است فهرست میکند.
twitter.com A, asked 22 ways at once ✓ cloudflare TCP 162.159.140.229 273 ms ✓ quad9 UDP :9953 162.159.140.229 118 ms ✗ local-relay UDP 10.10.34.36 51 ms ← the censor's address, not the site's ✗ network DNS 192.168.1.1 10.10.34.36 4 ms ← the censor's address, not the site's zev dns answers: 162.159.140.229 2 ms
همهٔ سرورها، هر کدام با راهی که از اینجا برایش بهتر کار میکند، کنار هم: چه کسی راست میگوید، چه کسی نام را عمداً میبندد (⊘)، چه کسی دروغ میگوید، و خود zev dns چه جوابی میدهد. برای رکوردهای دیگر نوعش را بدهید: zev dns why example.com AAAA.
برای یک نام امضاشده، هر جواب با امضاها هم سنجیده میشود، با کلیدهایی که از همان سرور و از همان راه پرسیده میشوند. signed ✓ یعنی جوابش ثابت شده؛ forged یعنی با امضا جور نیست، حتی وقتی نشانی از آنهایی نیست که فیلترینگ به آنها شناخته میشود. خطهای زیر از یک شبکهٔ فیلترشدهٔ واقعیاند، و خط آخر از آزمایش آزمایشگاهی zev، که در آن یک سرور نشانی cloudflare.com را زیر امضای واقعیاش جعل میکند:
Text
cloudflare.com A, asked 25 ways at once ✓ cloudflare UDP 104.16.132.229 104.16.133.229 109 ms signed ✓ ✓ adguard-family UDP :5353 104.16.132.229 104.16.133.229 82 ms signed ✓ ✓ cleanbrowsing-family UDP 104.16.132.229 104.16.133.229 118 ms ✗ liar UDP 198.51.100.66 40 ms ← forged: the signature on cloudflare.com doesn't match cloudflare.com's keys cloudflare.com is signed (DNSSEC): an answer whose signatures check out from the root's key is the real one
خطی که علامتی ندارد نشانی درست را داد ولی امضایی برای سنجیدن نداشت (بعضی سرورها، از جمله CleanBrowsing، امضاها را میاندازند)، یا کلیدهایش نرسید.
DNSSEC فقط جواب نامهایی را ثابت میکند که صاحبشان امضایشان کرده، و بیشتر نامها امضا ندارند. zev dns verify جوابها را از راه دیگری ثابت میکند که برای هر سایتی که HTTPS دارد کار میکند: از همهٔ سرورها، از همهٔ راهها میپرسد، بعد به هر نشانیای که گرفته HTTPS باز میکند و گواهی همان نام را میخواهد. جاعل میتواند نشانی بسازد، اما نه گواهی آن سایت را.
Terminal
zev dns verify www.wikipedia.org
Text
www.wikipedia.org 37 ways asked; each address checked by opening HTTPS to it and asking for www.wikipedia.org's certificate The addresses ✓ 185.15.59.224 the site: a valid certificate for www.wikipedia.org (740 ms) ✓ 208.80.153.224 the site: a valid certificate for www.wikipedia.org (1066 ms) ✓ 198.35.26.224 the site: a valid certificate for www.wikipedia.org (1112 ms) The resolvers ✓ cloudflare UDP 185.15.59.224 ✓ quad9 UDP 185.15.59.224 ✓ dnssb UDP 198.35.26.224 · google DoH TLS handshake cut ✓ network DNS 192.168.1.1 185.15.59.224 Every address that could be checked is really www.wikipedia.org.
وقتی جوابی جعلی باشد، verify میگوید کدام، و با کد ۱ خارج میشود:
Text
The addresses ✓ 104.16.123.96 the site: a valid certificate for www.cloudflare.com (3 ms) ✓ 104.16.124.96 the site: a valid certificate for www.cloudflare.com (2 ms) ✗ 198.51.100.66 not the site: its certificate isn't for www.cloudflare.com The resolvers ✓ honest UDP 104.16.124.96 104.16.123.96 ✗ liar UDP 198.51.100.66 ← not the site ✗ network DNS 192.168.1.1 198.51.100.66 ← not the site 2 answer(s) weren't www.cloudflare.com: forged by the resolver, or on the way to it (plain DNS can be answered by anything in between). zev dns check finds the ways that answer honestly from here, and sudo zev dns on uses only those.
اثبات یک جواب با گواهی خود سایت
zev dns verify
سرورهای DNS
نشانی
www.cloudflare.com؟ (همه، از همهٔ راهها)
104.16.123.96 · 198.51.100.66
HTTPS به 104.16.123.96، برای www.cloudflare.com
گواهی معتبر برای www.cloudflare.com
HTTPS به 198.51.100.66، برای www.cloudflare.com
گواهی یک نام دیگر
سروری که 198.51.100.66 را داد درستکار نیست
هر نشانه چه معنایی دارد
✓
خود سایت
گواهی معتبری برای آن نام نشان داد، امضاشده از مرجعی که این کامپیوتر به آن اعتماد دارد
✗
خود سایت نیست
گواهی یک نام دیگر، یا نشانی خصوصی برای یک نام عمومی
?
معلوم نشد
از اینجا به HTTPS جواب نداد (مسدود، قطع، یا اصلاً سایت وب نیست). دروغ حساب نمیشود
·
جوابی نیامد
آن سرور یا راه نشانیای نداد
--json اثبات هر نشانی (site، wrong_certificate، private، unknown) و حکم هر سرور را میدهد، برای اسکریپتها و پایش.
بسیاری از نامها امضاشدهاند (DNSSEC): صاحب ناحیه هر جواب را امضا میکند، ناحیهٔ بالاتر کلید او را تأیید میکند، و همینطور تا ریشه، که کلیدش درون zev است. فیلترینگ میتواند هر نشانیای بدهد، ولی نمیتواند امضا را با آن جور کند. zev dns هر جواب را خودش از کلید ریشه به پایین بررسی میکند، پس جواب جعلی برای یک نام امضاشده از هر راهی که آمده باشد گیر میافتد: از سرور رمزنگاریشده، از DNS ساده روی پورتی دیگر، یا از DNS خود شبکه وقتی هیچ چیز دیگری جواب نداد.
چرا میشود به نشانی cloudflare.com اعتماد کرد
🔑
کلید ریشه
درون zev ساخته شده (KSK-2017 و KSK-2024 از IANA): تنها چیزی که بیدلیل پذیرفته میشود
امضا میکند
📜
رکورد DS دامنهٔ .com
ریشه میگوید .com کدام کلید را به کار میبرد
جور است با
🔐
کلیدهای .com
همهچیز را در .com امضا میکنند
امضا میکند
📜
رکورد DS دامنهٔ cloudflare.com
.com میگوید cloudflare.com کدام کلید را به کار میبرد
جور است با
🔐
کلیدهای cloudflare.com
جوابهای cloudflare.com را امضا میکنند
امضا میکند
✅
نشانی
104.16.132.229، با امضایش: ثابتشده
هر جواب یکی از این چهار حالت میشود:
zev dns از یک جواب چه میفهمد
✅
ثابتشده
امضاشده، و همهٔ امضاها از کلید ریشه به پایین درستاند. جواب داده میشود، با بیت AD برای برنامههایی که آن را میخواهند
📭
امضانشده
ثابت شده که امضا ندارد: یکی از ناحیههای سر راه کلیدی بالای خود ندارد (بیشتر نامها، از جمله twitter.com). مثل قبل جواب داده میشود
❔
نشد بررسی کرد
کلیدها نرسیدند (برای UDP بزرگاند و TCP بسته است، یا سروری امضاها را میاندازد)، یا ساعت رایانه درست نیست. مثل قبل جواب داده میشود: هرگز بدتر از بدون DNSSEC نیست
⛔
جعلی
با امضاها جور نیست. دور ریخته میشود و راه بعدی پرسیده میشود، تا سه راه؛ اگر جواب همه جعلی باشد، برنامه SERVFAIL میگیرد همراه با دلیلش (خطای DNS گسترده، کد ۶)
در عمل یعنی:
«جعلی» فقط وقتی چیزی هست و غلط است. جوابی که امضایش جور نیست، یا جوابی بیامضا برای ناحیهای که ثابت شده امضاشده است، از سروری که DNSSEC بلد است. هر چیزی که فقط نرسیده (کلیدهایی که نمیآیند، سروری که امضاها را جلو نمیفرستد) «نشد بررسی کرد» است و نام مثل قبل جواب داده میشود. zev dns هیچ نامی را فقط به این دلیل که DNSSEC بررسی نشد از کار نمیاندازد.
کلیدها از بهترین راهها میآیند، از راه حافظهٔ موقت، و برایشان فقط جوابهایی حساب میشوند که امضا دارند. کلیدها تا وقتی TTL آنها میگوید (معمولاً یکی دو روز) در حافظه میمانند، پس بررسی فقط بار اولی که یک ناحیه دیده میشود چند رفتوبرگشت اضافه میکند و بعد هیچ. پرسش کلیدی که شکست بخورد تا ۵ دقیقه دوباره پرسیده نمیشود.
کلیدها از پیش. zev dns درست پس از اندازهگیری یک شبکه، کلیدهای ریشه و پرکاربردترین نامهای سطحبالا (.com، .net، .org، .io، .dev و چند تای دیگر) را میگیرد، تا نخستین نام امضاشده منتظرشان نماند. zev dns status زیر lately همین را میگوید: dnssec keys ready: the root's, and 17 of 17 top-level names'.
برنامههایی که خودشان بررسی میکنند (بیت CD را میگذارند) جواب را همانطور که آمده، بررسینشده میگیرند. برنامههایی که با DO میپرسند امضاها را هم میگیرند؛ بقیه جواب را بدون آنها.
نامهای اداری و خانگی بررسی نمیشوند: نامهای زیر .lan، .home.arpa، .local، .internal، .corp، نامهای معکوس بازههای نشانی خصوصی، و هر نامی زیر یک نام سطح بالا که در DNS عمومی وجود ندارد. قاعدههایی که نامها را به system میفرستند هم بررسی نمیشوند.
ساعت: امضاها بین دو تاریخ معتبرند. اگر ساعت رایانه خیلی غلط باشد، نامهای امضاشده «نشد بررسی کرد» میشوند (نه جعلی)، با یک ساعت فرصت.
روی یک شبکهٔ فیلترشدهٔ واقعی (۲۶ اکتبر ۲۰۲۶) جواب هر سرور درستکار برای cloudflare.com، ed25519.nl، nlnetlabs.nl و nic.cz ثابت شد، با ECDSA، Ed25519، RSA، NSEC و NSEC3. جوابی که فیلترینگ برای torproject.org (امضاشده) تزریق میکند امضایی ندارد. کلیدهای .org برای UDP بزرگاند و TCP بسته بود، پس نامهای .org از راه همهٔ سرورها «نشد بررسی کرد» شدند، جز AdGuard روی پورت 5353 که روی TCP جواب میدهد. حالا zev dns راهی مثل این را برای جوابهای بزرگتر از UDP نگه میدارد و چنین کلیدهایی را از آن میگیرد (ببینید نامها هیچوقت از کار نمیافتند).
zev dns status هر دو را میشمارد:
Text
dnssec 412 answers proven by their signatures, 3 forged ones thrown away
و هر جواب جعلی را با راهی که از آن آمد زیر lately فهرست میکند.
راههایی را هم که از آنها میپرسد فهرست میکند، با راههایی که برای جوابهای بزرگ نگه داشته:
Text
asking ● quad9 UDP :9953 41 ms ±6, 1290 answered, 2 failed ● cloudflare UDP 48 ms ±9, 980 answered, 0 failed ◇ adguard TCP :5353 (for answers too big for UDP; 37 so far) ○ network DNS 192.168.1.1 (the network's DNS, behind them)
وقتی zev dns on روشن است، هر نامی که جواب میدهد در فهرستی کوتاه میرود: زمان، نام، اینکه چطور جواب گرفت، کدام راه جواب داد، چقدر طول کشید، و کدام دستگاه پرسید. در حافظه و در /run نگه داشته میشود (فقط root، با ریاستارت پاک میشود) و ۲٬۰۰۰ نام آخر را دارد.
Terminal
sudo zev dns log # ۳۰ تای آخر، تازهترین در آخرsudo zev dns log -f # همانطور که میآیند، مثل tail -fsudo zev dns log github # فقط نامهایی که github در آنهاستsudo zev dns log -n 200 --json
Text
Names this computer asked newest last 10:05:32 www.wikipedia.org A asked 4 ms quad9 TCP 10:05:33 github.com A asked 5 ms quad9 TCP 10:05:33 www.wikipedia.org A cache 0 ms 10:05:33 api.github.com A asked 4 ms quad9 TCP 10:05:38 github.com A cache 0 ms from 192.168.1.20
یک نام چطور جواب گرفت
asked
پرسیده شد
از راهی که کنارش نوشته شده
cache
از حافظهٔ موقت
هیچ پرسشی بیرون نرفت: نه زمانی گرفت، نه کسی چیزی دید
kept copy
نسخهٔ منقضی
هیچ چیز جواب نداد، پس جوابی تازه نام را سرپا نگه داشت
blocked
مسدود
با یکی از قاعدههای شما، یا کاربردی که انتخاب کردید (family، adblock)
forged / failed
دورریخته / بیجواب
جواب DNSSEC جعلی، یا اصلاً هیچ جوابی
zev dns top جمعشان میکند: نامها چطور جواب گرفتند (و حافظهٔ موقت چقدر صرفهجویی کرد)، پرتکرارترین سایتها، کدام راه چند تا و با چه سرعتی جواب داد، چه چیزی مسدود، جعلی یا بیجواب ماند، و کدام دستگاهها پرسیدند.
Terminal
sudo zev dns top
Text
The last 6 names (over 1 min) how they were answered asked 4 66% cache 2 33% a name asked out took 3 ms on average; one from the cache takes none most asked github.com 3 wikipedia.org 2 answered by quad9 TCP 4 3 ms average asked from 127.0.0.1 5 (this computer) 192.168.1.20 1
نمیخواهید هیچ فهرستی نگه داشته شود؟ sudo zev dns set log=off، و فایل پاک میشود.
گوشیها، تلویزیونها و کنسولها نمیتوانند zev را اجرا کنند، و همان DNS دروغگو یا خراب گریبانشان را میگیرد. sudo zev dns share on اجازه میدهد از zev dns این کامپیوتر استفاده کنند: سرورهای درستکار، حافظهٔ موقت، جایگزین، قاعدههای شما و بررسی DNSSEC، برای همهٔ دستگاههای شبکه.
Terminal
sudo zev dns share on
Text
● zev dns answers the local network too, on 192.168.1.34 On a phone, TV or console: in its network settings, set DNS to 192.168.1.34 (manual). For every device at once: put 192.168.1.34 as the DNS server in the router's DHCP settings. Only private addresses (192.168.x, 10.x, 172.16–31.x) are answered, so it's never open to the internet. sudo zev dns share off stops it; zev dns top shows which devices asked.
روی همهٔ نشانیهای شبکهٔ محلی این کامپیوتر (وایفای، کابل) گوش میدهد، نه روی نشانیهای Docker یا VPN، و دنبالشان میرود: به وایفای دیگری وصل شوید و آن هم جابهجا میشود. پرسشهایی که از نشانیای غیر خصوصی بیایند اصلاً جوابی نمیگیرند، پس از اینترنت نمیشود از آن بهعنوان سرور باز استفاده کرد. zev dns share میگوید کجا گوش میدهد؛ sudo zev dns share off خاموشش میکند. اگر اینجا فایروال دارید، پورت ۵۳ را برای شبکهٔ محلی باز کنید.
sudo zev dns rule add corp.example system # دامنهٔ کاری از راه DNS شبکهsudo zev dns rule add ads.example block # 0.0.0.0 برای آن و همهٔ نامهای زیرشsudo zev dns rule add example.org quad9 # یک نام از راه یک سرورsudo zev dns rule country de # سایتهای یک کشور (.de) از راه DNS شبکهzev dns rule lssudo zev dns rule rm corp.example
هر قاعده خود نام و همهٔ زیرمجموعههایش را میگیرد؛ بلندترین قاعدهٔ منطبق برنده است. فرستادن نام سطحبالای یک کشور به system سایتهایش را به DNS خود شبکه میفرستد: در همان کشور از داخل سریعتر جواب میدهند، و بعضی فقط از داخل جواب میدهند.
بعضی سرویسها کاربران بعضی کشورها را راه نمیدهند (Docker Hub، بخشهایی از سایتهای توسعهدهندهٔ گوگل، JetBrains، HashiCorp…). در آن کشورها، سرورهای DNS محلی این نامها را با نشانی رلهٔ خودشان جواب میدهند که شما را رد میکند.
Terminal
sudo zev dns sanctions on
فقط نام همین سرویسها را به بهترینشان میفرستد؛ بقیه روی بهترین راهها میمانند. بدانید یعنی چه: رله میبیند از کدامیک از این سرویسها استفاده میکنید، و این سرورها داخل همان کشورند، پس دروغهای فیلترینگ آنجا روی آنها هم هست (zev dns why نشانش میدهد). تا خودتان روشنش نکنید خاموش است.
zev dns set # دیدنشانsudo zev dns set strict=on # هرگز DNS شبکه: بیجواب، به جای جواب رمزنگارینشدهsudo zev dns set proxy=off # zev proxy share را برای DNS به کار نبرsudo zev dns set rebinding=on # نشانی خصوصی برای نامهای عمومی مجاز باشدsudo zev dns set dnssec=off # امضاها را اینجا بررسی نکنsudo zev dns set log=off # فهرستی از نامهای پرسیدهشده نگه ندارsudo zev dns set share=on # همان sudo zev dns share onsudo zev dns set listen=127.0.0.153:53
strict: برای حریم خصوصی. با آن، وقتی بهترین راهها خراباند، نام به جای رفتن به DNS شبکه بیجواب میماند. پیشفرض خاموش است، چون از کار افتادن نامها برای بیشتر مردم بدتر است.
dnssec (پیشفرض روشن): امضاها همینجا بررسی میشوند و جوابهای جعلی برای نامهای امضاشده دور ریخته میشوند. نامهای امضاشده را ببینید.
محافظت در برابر rebinding (پیشفرض روشن): جوابی با نشانی خصوصی (192.168.x، 10.x…) برای یک نام عمومی دور ریخته میشود. این یا دروغ است یا حمله به دستگاههای خانهٔ شما (DNS rebinding). قاعدههایی که به system میروند اثر نمیپذیرند، پس نامهای اداری کار میکنند.
log (بهطور پیشفرض روشن): ۲٬۰۰۰ نام آخری که پرسیده شد، در حافظه و در /run/zev-dns/queries.jsonl، که فقط root میتواند بخواند و با ریاستارت پاک میشود. خاموش که باشد چیزی نگه داشته نمیشود و فایل پاک میشود.
وقتی zev proxy share روشن است، zev dns DNS روی HTTPS را از راه پروکسی شما هم امتحان میکند: وقتی هیچ راه مستقیمی درست کار نمیکند، این یکی همچنان کار میکند.
وقتی sudo zev vpn on روشن است، DNS خود ویپیان از تونل میگذرد؛ zev dns به لینک ویپیان دست نمیزند و هر دو درست جواب میدهند.
sudo zev dns off # خاموشش کن و دقیقاً آنچه تغییر داده را برگردانsudo zev dns restore # فقط تنظیمات DNS سیستم را برگردان (همان که systemd اجرا میکند اگر zev dns از کار بیفتد)zev dns serve --listen 127.0.0.1:5353 # همان سرور در این ترمینال، روی هر پورتی، بی تغییر دادن چیز دیگرdig @127.0.0.1 -p 5353 example.com # از آن بپرس
سرویس را متوقف میکند و دقیقاً همان چیزهایی را که عوض کرده برمیگرداند: تنظیم resolved، لینکهایی که عوض کرد (و فقط همانها) یا /etc/resolv.conf قبلی.
طوری ساخته شده که یک خرابی نتواند رایانه را بی DNS بگذارد:
اگر zev dns به هر دلیلی متوقف شود، حتی اگر کشته شود، systemd فوراً DNS سیستم را برمیگرداند (zev dns restore) و دوباره راهش میاندازد.
تنظیم resolved در /run است: ریاستارت همیشه پاکش میکند و zev dns هنگام شروع دوباره میگذاردش.
sudo zev dns on بررسی میکند که سیستم واقعاً نامها را از آن میگیرد، و اگر نه همهچیز را برمیگرداند.
DNS روی HTTPS / TLS: شبکه فقط میبیند با یک سرور DNS حرف میزنید، نه چه نامهایی. zev پرسشها را تا ۱۲۸ بایت پر میکند (RFC 8467) تا طولشان نام را لو ندهد.
DNS ساده، هر پورتی، UDP یا TCP: شبکه میتواند همهٔ نامها را ببیند. درست است (zev بررسی میکند)، نه خصوصی.
خود سرور DNS در هر حال نامهای شما را میبیند؛ کاربرد private سرورهایی را برمیگزیند که لاگ نگه نمیدارند و نشانی شما را جلو نمیفرستند.
sudo zev dns on فعلاً برای لینوکس است. روی macOS، sudo zev dns serve --listen 127.0.0.1:53 را اجرا کنید و DNS سیستم را 127.0.0.1 بگذارید. check، bench و why روی لینوکس و macOS کار میکنند.
سرورها از راه IPv4 پرسیده میشوند؛ نامهایی با نشانی IPv6 (AAAA) به طور عادی جواب داده میشوند.
DNSSEC برای الگوریتمهایی که امروز به کار میروند بررسی میشود (RSA/SHA-1، RSA/SHA-256، RSA/SHA-512، ECDSA P-256 و P-384، Ed25519)؛ ناحیهای که فقط با الگوریتمهای دیگر امضا شده (Ed448، DSA و GOST قدیمی) امضانشده حساب میشود. NSEC3 با بیش از ۱۵۰ تکرار هم امضانشده حساب میشود (RFC 9276).
DNS ساده روی TCP برای هر پرسش یک اتصال باز میکند، پس راههای TCP پایینتر از بقیه قرار میگیرند.