Skip to content

DNS — mihomo

بلوک dns: در mihomo بزرگ و مسطح است. ایدهٔ اصلی: یک لیست حل‌کنندهٔ اصلی (nameserver) و یک لیست جایگزین اعلان کنید، سپس از طریق fallback-filter فیلتر کنید که چه پرس‌وجوهایی به جایگزین می‌روند. بازنویسی به ازای دامنه از طریق nameserver-policy. موتور اختیاری fake-IP برای مسیریابی سازگار با اسنیف.

گزینه‌های سطح بالا

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enableboolfalsetrue | falseکلید اصلی. وقتی false باشد بقیهٔ بلوک نادیده گرفته می‌شود و حل‌کنندهٔ سیستم‌عامل استفاده می‌شود.
prefer-h3boolfalsetrue | falseترجیح DNS-over-HTTPS/3 (روی QUIC) وقتی یک URL سرور هم H2 و هم H3 را پشتیبانی می‌کند.
ipv6boolfalsetrue | falseحل رکوردهای AAAA. وقتی false باشد، فقط پرس‌وجوهای A صادر می‌شوند.
ipv6-timeoutuint100<milliseconds>حداکثر زمان انتظار برای پاسخ AAAA قبل از بازگشت به فقط IPv4. ۱۰۰ms پیش‌فرض مستندشده است.
use-hostsboolfalsetrue | falseقبل از رفتن به شبکه، نگاشت `hosts:` سطح بالا را بررسی می‌کند.
use-system-hostsboolfalsetrue | falseهمچنین فایل hosts سیستم‌عامل (`/etc/hosts`) را بررسی می‌کند.
respect-rulesboolfalsetrue | false**قواعد مسیریابی** را روی خود پرس‌وجوهای DNS اجرا می‌کند. وقتی true باشد، خروجی یک پرس‌وجو توسط لیست قواعد تصمیم‌گیری می‌شود — برای مسیریابی ترافیک DNS از طریق یک تونل خاص مفید است.
nameserver[]string[][<URL>]لیست حل‌کنندهٔ اصلی. هر ورودی یک URL است: `udp://...`, `tcp://...`, `tls://...`, `https://...`, `quic://...`, `system://`, `dhcp://<iface>`, یا `rcode://...`.
fallback[]string[][<URL>]لیست حل‌کنندهٔ جایگزین — وقتی یک پاسخ اصلی توسط `fallback-filter` فیلتر شود مراجعه می‌شود (مثلاً پاسخ IP داخلی برای یک پرس‌وجوی غیرداخلی).
fallback-filterRawFallbackFilter{geoip: true, geoip-code: "CN"}RawFallbackFilterفیلتری که تصمیم می‌گیرد چه زمانی به `fallback` مراجعه شود. حامل `geoip`, `geoip-code`, `ipcidr`, `domain`, `geosite` است.
listenstring(disabled)<host:port>اگر تنظیم شود، یک سرور DNS محلی روی این آدرس اجرا می‌کند. سرور از همان قواعد حل‌کنندهٔ داخلی تبعیت می‌کند.
enhanced-modeC.DNSModenormalnormal | redir-host | fake-ipحالت موتور DNS. `normal` پاسخ‌های واقعی برمی‌گرداند؛ `redir-host` IP را برمی‌گرداند اما اتصال را با دامنهٔ اصلی برچسب می‌زند (برای مسیریابی سازگار با اسنیف)؛ `fake-ip` IPهای مصنوعی از `fake-ip-range` برمی‌گرداند.
fake-ip-rangestring198.18.0.1/16<CIDR>بازهٔ IPv4 اختصاص‌یافته برای IPهای جعلی (فقط در حالت `fake-ip`).
fake-ip-range6string(unset)<CIDR>بازهٔ IPv6 اختیاری.
fake-ip-filter[]string[]<domain pattern>دامنه‌هایی که **نباید** IP جعلی دریافت کنند — به‌جای آن به حل‌کنندهٔ واقعی منتقل می‌شوند. wildcardها پشتیبانی می‌شوند.
fake-ip-filter-modeC.FilterModeblacklistblacklist | whitelistآیا `fake-ip-filter` لیست سیاه است (دامنه‌های فیلترشده fake-ip را رد می‌کنند) یا لیست سفید (فقط دامنه‌های فیلترشده fake-ip دریافت می‌کنند).
fake-ip-ttlint1<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-algorithmstringlrulru | arcالگوریتم تخلیه. `arc` (Adaptive Replacement Cache) گاهی برای بارهای کاری با الگوهای دسترسی انفجاری بهتر است.
cache-max-sizeint0 (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-policyboolfalsetrue | 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.5UDP/53
udp://udp://8.8.8.8:53UDP صریح، پورت اختیاری
tcp://tcp://8.8.8.8:53DNS-over-TCP
tls://tls://1.1.1.1:853DNS-over-TLS
https://https://doh.pub/dns-queryDNS-over-HTTPS (H2)
quic://quic://dns.adguard-dns.comDNS-over-QUIC
h3://h3://1.1.1.1/dns-queryDoH روی HTTP/3
system://system://حل‌کنندهٔ سیستم‌عامل
dhcp://dhcp://eth0حل‌کنندهٔ ارائه‌شده توسط DHCP برای eth0
rcode://rcode://refusedیک RCODE ثابت برمی‌گرداند

مسیرهای URL پس از میزبان می‌توانند یک پسوند #<proxy> حمل کنند تا ترافیک DNS از طریق یک پراکسی نام‌دار اجبار شود:

yaml
nameserver:
  - https://cloudflare-dns.com/dns-query#proxy

nameserver-policy

قوی‌ترین فیلد. کلیدها تطبیق‌دهنده هستند؛ مقادیر URL حل‌کننده یا لیست URL هستند:

yaml
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-query

nameserver-policy قبل از لیست اصلی nameserver بررسی می‌شود، بنابراین دامنه‌های تطبیق‌یافته به‌طور کامل حل‌کنندهٔ استاندارد را رد می‌کنند.

fallback-filter

تصمیم می‌گیرد چه زمانی یک پاسخ اصلی «مشکوک» است و یک پرس‌وجوی جایگزین را راه‌اندازی می‌کند:

yaml
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:

yaml
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 محلی برای دستگاه‌های پایین‌دستی:

yaml
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)

Core Tutorial اثر Argsment