گروه DNS
گروه DNS یک پرسش را از چند سرور DNS میپرسد و بهترین پاسخ را برمیگرداند. میتواند پاسخهایی را
که به محدودههای مسدود اشاره میکنند کنار بگذارد، تا پاسخ مسموم یک resolver فیلترشده برنده نشود.
این یک سرور DNS است: "type": "group" در فهرست dns.servers. نوع group در sing-box اصلی هست؛
هیدیفای mode، ignore_ranges، error_ttl، win_ttl و member_timeout را اضافه میکند و نوع قدیمیتر multi را
هم بهعنوان نام دیگر آن نگه میدارد.
چرا از آن استفاده کنیم
- resolverهای شما ناپایدار یا کند هستند و میخواهید از هر کدام که کار میکند پاسخ بگیرید.
- resolverهای شبکه برای بعضی نامها نشانی جعلی برمیگردانند (مثلاً صفحهٔ مسدودسازی) و میخواهید آن پاسخها دور ریخته شوند.
- میخواهید بیشتر وقتها از یک سرور استفاده شود و بقیه فقط وقتی آن سرور شکست خورد جایش را بگیرند.
چطور از فیلترینگ عبور میکند
فیلترینگ DNS معمولاً به نام مسدود با یک نشانی ثابت پاسخ میدهد، مثل صفحهٔ مسدودسازی در یک محدودهٔ
خصوصی. ignore_ranges رکوردهای A و AAAA را که در این محدودهها هستند حذف میکند. پاسخی که دیگر
نشانیای در آن نمانده پاسخ حساب نمیشود، پس گروه منتظر سرور دیگری میماند، مثلاً یک سرور رمزنگاریشده
که از پراکسی عبور میکند. وقتی فیلتر پرسش را دور میریزد یا با نشانیای پاسخ میدهد که شما در فهرست
نیاوردهاید، کمکی نمیکند.
چطور کار میکند
گروه چهار حالت دارد:
| حالت | کارش |
|---|---|
parallel (پیشفرض) |
از همهٔ سرورها همزمان میپرسد و اولین پاسخ خوب را برمیگرداند. |
sequential |
از سرورها یکییکی و به ترتیب میپرسد تا یکی پاسخ خوب بدهد. سروری که شکست خورده تا error_ttl بعد از بقیه پرسیده میشود و هر سرور سهم محدودی از زمان پرسش دارد. |
stable |
فقط از سرور فعلیاش میپرسد. وقتی آن سرور شکست بخورد، از بقیه همزمان میپرسد و اولین سروری که پاسخ دهد سرور فعلی میشود. |
fastest |
مثل stable، ولی سرور فعلی را فقط به مدت win_ttl نگه میدارد. بعد دوباره از همهٔ سرورها همزمان میپرسد و سریعترین، سرور فعلی میشود. |
در همهٔ حالتها:
- پاسخ خوب پاسخی است که پس از
ignore_rangesهنوز رکورد دارد. پرسش A یا AAAA به نشانی نیاز دارد: CNAMEی که پس از حذف تنها مانده کافی نیست. - SERVFAIL و REFUSED شکست حساب میشوند.
- پاسخ بدون جواب، مثل NXDOMAIN، نگه داشته میشود و فقط وقتی برگردانده میشود که هیچ سروری پاسخ خوب ندهد.
در حالت sequential:
- سروری که شکست بخورد، یا پاسخش با
ignore_rangesخالی شود، تاerror_ttlبعد از بقیه پرسیده میشود؛ وقتی همه شکست بخورند باز هم پرسیده میشود. پس سرور اولِ مرده دیگر هر پرسش را شروع نمیکند. وقتی شبکه عوض شود، گروه شکستهایش را فراموش میکند. - برای هر سرور حداکثر
member_timeoutصبر میشود، یا اگر تنظیم نشده باشد، زمان باقیماندهٔ پرسش میان سرورهایی که هنوز پرسیده نشدهاند تقسیم میشود، دستکم ۲ ثانیه برای هر یک. سروری که معلق بماند، مثل سرور TCP یا TLS پشت پورتی که بستهها را میاندازد، دیگر کل پرسش را به تنهایی مصرف نمیکند و سرورهای بعد از خودش بیپرسش نمیمانند.
در حالتهای stable و fastest:
- سرور فعلی نیمی از زمان باقیماندهٔ پرسش را میگیرد، تا اگر پاسخ نداد بقیه هنوز فرصت پاسخ داشته باشند.
- سروری که شکست بخورد، یا پاسخش با
ignore_rangesخالی شود، به مدتerror_ttlکنار گذاشته میشود. وقتی همهٔ سرورها اخیراً شکست خورده باشند، از همه پرسیده میشود. - وقتی شبکه عوض میشود، گروه شکستها و سرور فعلیاش را فراموش میکند.
پیکربندی
{
"dns": {
"servers": [
{ "type": "udp", "tag": "local", "server": "192.168.1.1" },
{ "type": "https", "tag": "remote", "server": "1.1.1.1", "detour": "proxy" },
{
"type": "group",
"tag": "dns-group",
"servers": ["local", "remote"],
"mode": "stable",
"ignore_ranges": ["10.10.34.0/24"],
"error_ttl": "1m",
"win_ttl": "10m"
}
]
}
}
| فیلد | نوع | پیشفرض | معنی |
|---|---|---|---|
servers |
list of strings | الزامی | tag سرورهای DNS گروه، به ترتیب. گروه نمیتواند گروه دیگر یا سرور fakeip داشته باشد. |
mode |
string | parallel |
parallel، sequential، stable یا fastest. |
ignore_ranges |
list of IP prefixes | رکوردهای A و AAAA در این محدودهها از پاسخها حذف میشوند. | |
error_ttl |
duration | 1m |
در sequential: مدتی که سرور شکستخورده آخر پرسیده میشود؛ در stable و fastest: مدتی که کنار گذاشته میشود. |
member_timeout |
duration | در sequential: بیشترین زمان انتظار برای یک سرور. تنظیمنشده یعنی زمان باقیماندهٔ پرسش میان سرورهای پرسیدهنشده تقسیم شود، دستکم ۲ ثانیه برای هر یک. |
|
win_ttl |
duration | 10m |
در fastest: مدتی که سریعترین سرور، سرور فعلی میماند. |
نوع منسوخ "type": "multi" همچنان بارگذاری میشود: "parallel": true یعنی "mode": "parallel" و
در غیر این صورت "mode": "sequential".
حالتهای stable و fastest از sing-box-lx گرفته شدهاند.