DNS — sing-box
موتور DNS sing-box فهرستی از سرورهای نوعدار بهعلاوهٔ یک زنجیرهٔ قاعدهٔ ساختاریافته است. هر سرور یک type دارد که ترابرد آن را انتخاب میکند (UDP، TLS، HTTPS، فایل hosts، مخزن fake-ip، تأمینشده توسط DHCP، systemd-resolved، Tailscale تعبیهشده). قواعد از همان مجموعهفیلد تطبیق قواعد مسیریابی استفاده میکنند اما با کنشهای ویژهٔ DNS.
گزینههای سطح بالا
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
servers | []DNSServerOptions | [] | [DNSServerOptions] | فهرست سرور DNS. هر ورودی یک `type` (local، udp، tls، https، h3، dhcp، fakeip، hosts، resolved، tailscale) و مجموعهٔ گزینههای متناظر دارد. |
rules | []DNSRule | [] | [DNSRule] | قواعد مسیریابی در سطح DNS. شکل یکسانی با قواعد مسیریابی دارند اما با مجموعهٔ کنشهای ویژهٔ DNS. |
final | string | (unset) | <server tag> | سرور DNS پیشفرض وقتی هیچ قاعدهای تطبیق نمییابد. مقدار خالی به اولین سرور در `servers[]` بازگشت میکند. |
reverse_mapping | bool | false | true | false | نگهداری نگاشت معکوس (IP → دامنه) تا قواعد بتوانند پس از اینکه اتصالی مقصد را به IP حل کرد، روی دامنهٔ اصلی تطبیق دهند. |
منبع: option/dns.go:21-27 · ثابتشده در v1.13.11 (553cfa1)
به علاوهٔ DNSClientOptions تعبیهشده:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
strategy | DomainStrategy | (prefer_ipv4) | prefer_ipv4 | prefer_ipv6 | ipv4_only | ipv6_only | اولویت پیشفرض خانوادهٔ آدرس. |
disable_cache | bool | false | true | false | غیرفعالسازی کش پاسخ درونحافظه. |
disable_expire | bool | false | true | false | ورودیهای کششده را بر اساس TTL بیرون نراند — آنها را برای همیشه نگه دار. |
independent_cache | bool | false | true | false | استفاده از کش جداگانه برای هر برچسب سرور (بهجای یک کش سراسری). |
cache_capacity | uint32 | (unbounded) | <int> | حداکثر ورودیهای کششده. مقدار ۰ سقف را غیرفعال میکند. |
client_subnet | *badoption.Prefixable | (unset) | <CIDR> | ECS (EDNS Client Subnet) که در پرسوجوهای خروجی اعلان میشود. |
منبع: option/dns.go:105-112 · ثابتشده در v1.13.11 (553cfa1)
انواع سرور
هر ورودی در servers[] یک فیلد type دارد. فیلدهای تطبیق:
type: "local"
حلوفصل از طریق حلکنندهٔ سیستمعامل (در macOS/iOS که حلکنندهٔ سیستم مسیر معتبر است مفید است). برای انتخاب حلکنندهٔ گو بدون CGO، prefer_go را اضافه میکند.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
prefer_go | bool | false | true | false | استفاده از net.Resolver گو (بدون CGO) بهجای حلکنندهٔ بومی پلتفرم. در سیستمهایی که حلکنندهٔ بومی شکسته یا نرخمحدود است مفید است. |
منبع: option/dns.go:376-379 · ثابتشده در v1.13.11 (553cfa1)
type: "udp" و type: "tcp" — RemoteDNSServerOptions
{ "type": "udp", "tag": "local-udp", "server": "8.8.8.8", "server_port": 53 }| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
server | string | (required) | <host> | نام میزبان یا IP سرور. |
server_port | uint16 | 53 (udp/tcp), 853 (tls), 443 (https/h3) | <port> | پورت سرور. |
منبع: option/dns.go:332-335 · ثابتشده در v1.13.11 (553cfa1)
type: "tls" — DNS-over-TLS
همان فیلدهای udp/tcp بهعلاوهٔ بلوک استاندارد tls:.
type: "https" و type: "h3" — DNS-over-HTTPS / -H3
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
path | string | /dns-query | /<path> | مسیر نقطهانتهایی DoH. |
method | string | POST | POST | GET | روش HTTP استفادهشده برای پرسوجوهای DoH. |
headers | badoption.HTTPHeader | {} | {<header>: <value>} | هدرهای HTTP اضافی. |
منبع: option/dns.go:394-399 · ثابتشده در v1.13.11 (553cfa1)
type: "hosts" — فایل hosts محلی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
path | badoption.Listable[string] | [/etc/hosts] | [<file path>] | فهرست مسیرهای فایل hosts برای ادغام. |
predefined | *badjson.TypedMap[string, badoption.Listable[netip.Addr]] | {} | {<domain>: [<IP>]} | جدول hosts درونخطی. اولویت بالاتری نسبت به `path` دارد. |
منبع: option/dns.go:363-366 · ثابتشده در v1.13.11 (553cfa1)
type: "fakeip"
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
inet4_range | *badoption.Prefix | (required for v4) | <CIDR> | محدودهٔ CIDR IPv4 اختصاصیافته برای IPهای جعلی. |
inet6_range | *badoption.Prefix | (required for v6) | <CIDR> | محدودهٔ CIDR IPv6 اختصاصیافته برای IPهای جعلی. |
منبع: option/dns.go:401-404 · ثابتشده در v1.13.11 (553cfa1)
type: "dhcp"
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
interface | string | (auto) | <interface> | رابطی که حلکنندههای ارائهشده توسط DHCP آن استفاده میشوند. |
منبع: option/dns.go:406-409 · ثابتشده در v1.13.11 (553cfa1)
انواع دیگر
type: "resolved"— خواندن سرورهای نام per-link از systemd-resolved (فقط Linux).type: "tailscale"— استفاده از حلکنندهٔ MagicDNS دیمن Tailscale.type: "predefined"— بازگشت مجموعهٔ پاسخ کدشده.type: "rcode"— بازگشت یک RCODE ثابت (NOERROR / NXDOMAIN / SERVFAIL …).
قواعد DNS
قواعد DNS از همان شکل چندریختی _Rule قواعد مسیریابی استفاده میکنند (type: "default" یا type: "logical") و همان مجموعهٔ ۴۳ کلید تطبیق در RawDefaultDNSRule. تفاوتها در سطح کنش است:
| کنش DNS | معنا |
|---|---|
route (پیشفرض) | ارسال پرسوجو به server: "<tag>". فیلدهای اختیاری: strategy، disable_cache، rewrite_ttl، client_subnet. |
route-options | اعمال گزینههای DNS-route روی تطبیقهای بعدی قاعده. |
reject | حذف پرسوجو. با method: "default" (NXDOMAIN) یا method: "drop" (بدون پاسخ). |
predefined | بازگشت یک پاسخ کدشده (مجموعهٔ رکورد یا RCODE). |
مثالها
تقسیم دو سروری — داخلی روی DoH محلی، بقیه روی DoH Cloudflare:
{
"dns": {
"servers": [
{ "type": "https", "tag": "local",
"server": "doh.pub", "path": "/dns-query" },
{ "type": "https", "tag": "remote",
"server": "cloudflare-dns.com", "path": "/dns-query",
"detour": "proxy" },
{ "type": "fakeip", "tag": "fakeip",
"inet4_range": "198.18.0.0/15",
"inet6_range": "fc00::/18" }
],
"rules": [
{ "rule_set": ["geosite-cn"], "server": "local" },
{ "outbound": "any", "server": "remote" }
],
"final": "remote",
"strategy": "prefer_ipv4"
}
}مسدودسازی تبلیغات از طریق DNS:
{
"dns": {
"servers": [
{ "type": "https", "tag": "main",
"server": "cloudflare-dns.com" }
],
"rules": [
{
"domain_keyword": ["ads", "doubleclick", "googlesyndication"],
"action": "reject",
"method": "default"
}
],
"final": "main"
}
}نکات
- گزینهٔ سطح بالای قدیمی
fakeip: {...}منسوخشده است — بهجای آن از یک ورودی سرورtype: "fakeip"استفاده کنید. sing-box پیکربندیهای قدیمی را در زمان بارگذاری بهطور خودکار مهاجرت میدهد اما هشدار منسوخشدن صادر میکند. reverse_mapping: trueبه قواعد مسیریابی بعدی اجازه میدهد حتی پس از اینکه اسنیف، مقصد را به IP حل کرده، روی نام دامنه تطبیق دهند. هنگام استفاده از fake-ip در کنار قواعد دامنهٔ پیچیده، ضروری است.independent_cache: trueوقتی سرورهایی دارید که برای یک دامنه پاسخهای واقعاً متفاوتی برمیگردانند (حلکنندگان split-horizon) مفید است.- قواعد DNS و قواعد مسیریابی یک واژگان مشترک کلید تطبیق دارند اما در زمانهای متفاوت عمل میکنند: قواعد DNS روی پرسوجوی حلکننده اجرا میشوند؛ قواعد مسیریابی روی اتصال نهایی اجرا میشوند.
type: "resolved"از D-Bus APIsystemd-resolvedمیخواند — فقط روی سیستمهای Linux که resolved واقعاً حلکنندهٔ در حال اجرا است کار میکند.
نکات بینهستهای
- Xray-core از یک بلوک تخت
dns:باservers[]حامل رشتههای URL (یا اشیاء NameServerConfig) استفاده میکند — بدون فیلدtype، اسکیمای URL ترابرد را تعیین میکند. بنگرید به DNS — Xray-core. - mihomo یک بلوک ۲۵ فیلدی
dns:با فهرستهای جداگانهٔnameserver/fallbackو یک نگاشتnameserver-policyدارد. بنگرید به DNS — mihomo.
منبع: option/dns.go:21-409 · v1.13.11 (553cfa1)
