DNS — mihomo
بلوک dns: در mihomo بزرگ و مسطح است. ایدهٔ اصلی: یک لیست حلکنندهٔ اصلی (nameserver) و یک لیست جایگزین اعلان کنید، سپس از طریق fallback-filter فیلتر کنید که چه پرسوجوهایی به جایگزین میروند. بازنویسی به ازای دامنه از طریق nameserver-policy. موتور اختیاری fake-IP برای مسیریابی سازگار با اسنیف.
گزینههای سطح بالا
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enable | bool | false | true | false | کلید اصلی. وقتی false باشد بقیهٔ بلوک نادیده گرفته میشود و حلکنندهٔ سیستمعامل استفاده میشود. |
prefer-h3 | bool | false | true | false | ترجیح DNS-over-HTTPS/3 (روی QUIC) وقتی یک URL سرور هم H2 و هم H3 را پشتیبانی میکند. |
ipv6 | bool | false | true | false | حل رکوردهای AAAA. وقتی false باشد، فقط پرسوجوهای A صادر میشوند. |
ipv6-timeout | uint | 100 | <milliseconds> | حداکثر زمان انتظار برای پاسخ AAAA قبل از بازگشت به فقط IPv4. ۱۰۰ms پیشفرض مستندشده است. |
use-hosts | bool | false | true | false | قبل از رفتن به شبکه، نگاشت `hosts:` سطح بالا را بررسی میکند. |
use-system-hosts | bool | false | true | false | همچنین فایل hosts سیستمعامل (`/etc/hosts`) را بررسی میکند. |
respect-rules | bool | false | true | false | **قواعد مسیریابی** را روی خود پرسوجوهای DNS اجرا میکند. وقتی true باشد، خروجی یک پرسوجو توسط لیست قواعد تصمیمگیری میشود — برای مسیریابی ترافیک DNS از طریق یک تونل خاص مفید است. |
nameserver | []string | [] | [<URL>] | لیست حلکنندهٔ اصلی. هر ورودی یک URL است: `udp://...`, `tcp://...`, `tls://...`, `https://...`, `quic://...`, `system://`, `dhcp://<iface>`, یا `rcode://...`. |
fallback | []string | [] | [<URL>] | لیست حلکنندهٔ جایگزین — وقتی یک پاسخ اصلی توسط `fallback-filter` فیلتر شود مراجعه میشود (مثلاً پاسخ IP داخلی برای یک پرسوجوی غیرداخلی). |
fallback-filter | RawFallbackFilter | {geoip: true, geoip-code: "CN"} | RawFallbackFilter | فیلتری که تصمیم میگیرد چه زمانی به `fallback` مراجعه شود. حامل `geoip`, `geoip-code`, `ipcidr`, `domain`, `geosite` است. |
listen | string | (disabled) | <host:port> | اگر تنظیم شود، یک سرور DNS محلی روی این آدرس اجرا میکند. سرور از همان قواعد حلکنندهٔ داخلی تبعیت میکند. |
enhanced-mode | C.DNSMode | normal | normal | redir-host | fake-ip | حالت موتور DNS. `normal` پاسخهای واقعی برمیگرداند؛ `redir-host` IP را برمیگرداند اما اتصال را با دامنهٔ اصلی برچسب میزند (برای مسیریابی سازگار با اسنیف)؛ `fake-ip` IPهای مصنوعی از `fake-ip-range` برمیگرداند. |
fake-ip-range | string | 198.18.0.1/16 | <CIDR> | بازهٔ IPv4 اختصاصیافته برای IPهای جعلی (فقط در حالت `fake-ip`). |
fake-ip-range6 | string | (unset) | <CIDR> | بازهٔ IPv6 اختیاری. |
fake-ip-filter | []string | [] | <domain pattern> | دامنههایی که **نباید** IP جعلی دریافت کنند — بهجای آن به حلکنندهٔ واقعی منتقل میشوند. wildcardها پشتیبانی میشوند. |
fake-ip-filter-mode | C.FilterMode | blacklist | blacklist | whitelist | آیا `fake-ip-filter` لیست سیاه است (دامنههای فیلترشده fake-ip را رد میکنند) یا لیست سفید (فقط دامنههای فیلترشده fake-ip دریافت میکنند). |
fake-ip-ttl | int | 1 | <seconds> | TTL بر حسب ثانیه برای پاسخهای fake-IP. مقادیر کم، کلاینتها را وادار به حل دوبارهٔ مکرر میکند، که نگاشت fake-ip را تازه نگه میدارد. |
default-nameserver | []string | [114.114.114.114, 223.5.5.5, 8.8.8.8, 1.0.0.1] | [<URL>] | حلکنندههای راهانداز که برای حل خود نامهای میزبان ورودیهای `nameserver`/`fallback` استفاده میشوند. **باید** IPهای ساده باشند — هیچ حل بیشتری مجاز نیست. |
cache-algorithm | string | lru | lru | arc | الگوریتم تخلیه. `arc` (Adaptive Replacement Cache) گاهی برای بارهای کاری با الگوهای دسترسی انفجاری بهتر است. |
cache-max-size | int | 0 (unbounded) | <int> | حداکثر ورودیهای ذخیرهشده در cache. |
nameserver-policy | *orderedmap.OrderedMap[string, any] | {} | {<domain or rule>: <URL or [URL]>} | مسیریابی به ازای الگوی دامنه. کلیدها الگوهای دامنه یا نمادگذاریهای `geosite:`/`rule-set:`/`+./` هستند؛ مقادیر URLهای حلکننده هستند. اولویت بالاتری از `nameserver` دارد. |
proxy-server-nameserver | []string | [] | [<URL>] | حلکنندههایی که **بهطور خاص** برای حل نامهای میزبان سرور پراکسی استفاده میشوند. از مشکل مرغ-و-تخممرغی مسیریابی نام میزبان پراکسی از طریق همان پراکسی جلوگیری میکند. |
proxy-server-nameserver-policy | *orderedmap.OrderedMap[string, any] | {} | {<pattern>: <URL>} | بازنویسی به ازای دامنه برای `proxy-server-nameserver`. |
direct-nameserver | []string | [] | [<URL>] | حلکنندههای مورد استفاده برای مقصدهای مسیریابیشده با DIRECT. از نشت جستوجوهای DNS داخلی از طریق پراکسی جلوگیری میکند. |
direct-nameserver-follow-policy | bool | false | true | false | `nameserver-policy` را برای پرسوجوهای `direct-nameserver` نیز اعمال میکند. |
منبع: config/config.go:217-243 · ثابتشده در v1.19.24 (a847246)
طرحهای URL سرور نام
لیستهای nameserver, fallback, default-nameserver, proxy-server-nameserver و direct-nameserver همگی همان دستور زبان URL را میپذیرند:
| طرح | مثال | نکات |
|---|---|---|
| (IP خام) | 223.5.5.5 | UDP/53 |
udp:// | udp://8.8.8.8:53 | UDP صریح، پورت اختیاری |
tcp:// | tcp://8.8.8.8:53 | DNS-over-TCP |
tls:// | tls://1.1.1.1:853 | DNS-over-TLS |
https:// | https://doh.pub/dns-query | DNS-over-HTTPS (H2) |
quic:// | quic://dns.adguard-dns.com | DNS-over-QUIC |
h3:// | h3://1.1.1.1/dns-query | DoH روی HTTP/3 |
system:// | system:// | حلکنندهٔ سیستمعامل |
dhcp:// | dhcp://eth0 | حلکنندهٔ ارائهشده توسط DHCP برای eth0 |
rcode:// | rcode://refused | یک RCODE ثابت برمیگرداند |
مسیرهای URL پس از میزبان میتوانند یک پسوند #<proxy> حمل کنند تا ترافیک DNS از طریق یک پراکسی نامدار اجبار شود:
nameserver:
- https://cloudflare-dns.com/dns-query#proxynameserver-policy
قویترین فیلد. کلیدها تطبیقدهنده هستند؛ مقادیر URL حلکننده یا لیست URL هستند:
nameserver-policy:
"geosite:cn,private": # GeoSite category match
- 223.5.5.5
- 114.114.114.114
"+.cn": # Suffix match — note the +. prefix
- https://doh.pub/dns-query
"rule-set:cn": # Rule-set reference
- 223.5.5.5
"www.example.com": # Exact domain
- https://example-dns.com/dns-querynameserver-policy قبل از لیست اصلی nameserver بررسی میشود، بنابراین دامنههای تطبیقیافته بهطور کامل حلکنندهٔ استاندارد را رد میکنند.
fallback-filter
تصمیم میگیرد چه زمانی یک پاسخ اصلی «مشکوک» است و یک پرسوجوی جایگزین را راهاندازی میکند:
fallback-filter:
geoip: true # Apply GeoIP filtering
geoip-code: CN # Treat answers in this country as suspicious-foreign-domain
ipcidr:
- 240.0.0.0/4 # Specific CIDR triggers
geosite:
- gfw # GeoSite categories that must always go to fallback
domain:
- +.google.com # Domain patterns that must always go to fallbackوقتی یک پاسخ اصلی با geoip-code/ipcidr تطبیق دارد و دامنهٔ پرسوجو با geosite/domain تطبیق ندارد، نتیجه رد میشود و لیست fallback پرسوجو میشود.
مثالها
DNS کلاسیک با عبور از CN:
dns:
enable: true
prefer-h3: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '+.lan'
- '+.local'
- 'localhost.ptlogin2.qq.com'
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
fallback:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query
- tls://8.8.4.4:853
fallback-filter:
geoip: true
geoip-code: CN
geosite:
- gfw
nameserver-policy:
'geosite:cn,private':
- https://doh.pub/dns-query
'geosite:gfw,geolocation-!cn':
- https://1.1.1.1/dns-query
- https://dns.google/dns-query
proxy-server-nameserver:
- https://doh.pub/dns-query
direct-nameserver:
- https://doh.pub/dns-queryسرور DNS محلی برای دستگاههای پاییندستی:
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: redir-host
nameserver:
- https://1.1.1.1/dns-queryنکات
enhanced-mode: fake-ipحالت استاندارد برای پیکربندیهای پراکسی شفاف است. حل IP واقعی در سمت پراکسی اتفاق میافتد، نه سمت کلاینت — به این معنا که قواعد مسیریابی آگاه از اسنیف میتوانند دامنهٔ اصلی را ببینند.default-nameserverباید فقط شامل آدرسهای IP ساده باشد. آنها برای حل خود نامهای میزبانnameserver/fallbackاستفاده میشوند؛ اجازه دادن به نامهای میزبان در اینجا یک چرخهٔ راهانداز خواهد بود.fake-ip-filterهمان نحو الگوی دامنهای را که قواعد مسیریابی میپذیرند پشتیبانی میکند (+.example.comبرای پسوند،geosite:appleبرای دسته).proxy-server-nameserverبرای پیکربندیهایی حیاتی است که در آنها نام میزبان سرور پراکسی نیز دامنهای در قواعد مسیریابی شماست. بدون آن، حل نام میزبان پراکسی میتواند بهصورت بازگشتی سعی کند از طریق خودش مسیریابی شود.direct-nameserverاز نشت پرسوجوهای متصل-مستقیم به حلکنندهٔ جایگزین (خارج از کشور) جلوگیری میکند. وقتیfallbackتنها مسیر بدون سانسور شما است مفید است.
نکات بینهستهای
- Xray-core از بلوک مسطحی با سرورهای رشتهای-یا-شیء URL و
domains/expectedIPs/unexpectedIPsدر هر سرور استفاده میکند. به DNS — Xray-core مراجعه کنید. - sing-box از سرورهای نوعدار (
type: "https",type: "fakeip", …) و یک زنجیرهٔ قاعدهٔ DNS ساختاریافته با اعمال صریح استفاده میکند. به DNS — sing-box مراجعه کنید.
منبع: config/config.go:217-243 · v1.19.24 (a847246)
