Skip to content

Dokodemo-door — Xray-core

Dokodemo (به ژاپنی به‌معنی «هر-دری») ورودی پراکسی شفاف Xray است. روی یک یا چند پورت گوش می‌دهد و هر اتصال پذیرفته‌شده را به یک مقصد ثابت — یا روی Linux، از طریق SO_ORIGINAL_DST / IP_TRANSPARENT به مقصد اصلی پیش از NAT اتصال — ارسال می‌کند.

ورودی

settings برای یک ورودی با "protocol": "dokodemo-door":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
allowedNetwork*NetworkList(any)tcp | udp | tcp,udpپروتکل‌های ترابردی که ورودی می‌پذیرد. نام متعارف برای فیلد قدیمی `network`.
rewriteAddress*Address(unset)<host>آدرس مقصدی که ترافیک ارسالی به آن بازنویسی می‌شود. وقتی `portMap` تطبیق ندارد و `followRedirect` نیز false است استفاده می‌شود. نام متعارف برای فیلد قدیمی `address`.
rewritePortuint160<port>پورت مقصد برای ترافیک ارسالی. نام متعارف برای فیلد قدیمی `port`.
network*NetworkList(alias)(alias of allowedNetwork)نام مستعار قدیمی برای `allowedNetwork`؛ اگر تنظیم شود در زمان ساخت آن را بازنویسی می‌کند.
address*Address(alias)(alias of rewriteAddress)نام مستعار قدیمی برای `rewriteAddress`؛ هنوز پذیرفته می‌شود و در زمان ساخت رونویسی می‌گردد.
portuint16(alias)(alias of rewritePort)نام مستعار قدیمی برای `rewritePort`.
portMapmap[string]string{}{<src-port>: <host:port>}بازنویسی مقصد به ازای هر پورت. کلیدها پورت‌های شنود (به‌صورت رشته) هستند؛ مقادیر تحت‌اللفظی `host:port` می‌باشند. هر مقدار در زمان ساخت پیکربندی اعتبارسنجی می‌شود.
followRedirectboolfalsetrue | falseخواندن مقصد اصلی از سیستم‌عامل (Linux iptables SO_ORIGINAL_DST / tproxy). وقتی true باشد، `address`/`port` در صورت ناتوانی در بازیابی به مقصد جایگزین تبدیل می‌شوند.
userLeveluint320<uint32>سطح policy پیش‌فرض اعمال‌شده به اتصال‌های ارسالی.

منبع: infra/conf/dokodemo.go:10-20 · ثابت‌شده در v26.7.28 (5ca6f4b)

مثال‌ها

ارسال‌کنندهٔ پورت ایستا — پذیرش روی :5353 و ارسال به 1.1.1.1:53:

json
{
  "inbounds": [
    {
      "tag": "dns-forward",
      "listen": "0.0.0.0",
      "port": 5353,
      "protocol": "dokodemo-door",
      "settings": {
        "address": "1.1.1.1",
        "port": 53,
        "network": "tcp,udp"
      }
    }
  ]
}

نگاشت به ازای پورت — پذیرش روی چندین پورت و ارسال هر یک به مقصد متفاوت:

json
{
  "inbounds": [
    {
      "tag": "multi-forward",
      "listen": "0.0.0.0",
      "port": "80,443,5353",
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "portMap": {
          "80":   "10.0.0.10:80",
          "443":  "10.0.0.10:443",
          "5353": "1.1.1.1:53"
        }
      }
    }
  ]
}

گیرندهٔ پراکسی شفاف Linux:

json
{
  "inbounds": [
    {
      "tag": "tproxy",
      "listen": "0.0.0.0",
      "port": 12345,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true
      },
      "streamSettings": {
        "sockopt": { "tproxy": "tproxy" }
      }
    }
  ]
}

نکات

  • Xray اخیراً فیلدها را تغییر نام داده است: allowedNetwork / rewriteAddress / rewritePort نام‌های متعارف هستند و فیلدهای قدیمی‌تر network / address / port به‌عنوان نام مستعار پذیرفته می‌شوند (در زمان ساخت روی فیلدهای جدید رونویسی می‌شوند). مثال‌های این صفحه از نام‌های قدیمی استفاده می‌کنند که هنوز کار می‌کنند؛ پیکربندی‌های جدید می‌توانند هر کدام را به‌کار ببرند.
  • مقادیر portMap که تحت‌اللفظی host:port معتبر نیستند در زمان راه‌اندازی ناموفق می‌شوند (infra/conf/dokodemo.go:39-43).
  • برای آنکه followRedirect: true بتواند مقصد اصلی را بازیابی کند، سوکت شنود به IP_TRANSPARENT (TPROXY) نیاز دارد یا ورودی باید هدف iptables REDIRECT باشد. این را از طریق streamSettings.sockopt.tproxy تنظیم کنید.
  • وقتی نه address/port و نه portMap تطبیق می‌کنند و followRedirect نمی‌تواند مقصدی را بازیابی کند، اتصال بسته می‌شود.
  • فیلد شنود port روی شیء والد ورودی هم یک پورت تنها و هم فهرست جداشده با کاما ("80,443") یا بازه ("5000-5010") را می‌پذیرد — نحو استاندارد فهرست پورت ورودی.

نکات بین‌هسته‌ای

  • sing-box ساختار اختصاصی dokodemo ندارد. از ورودی Direct استفاده کنید — فیلدهای override_address / override_port آن مورد هدف ایستا را پوشش می‌دهند و حالت TPROXY از طریق tcp_fast_open / گزینه‌های sniff در سطح ورودی فعال می‌شود.
  • mihomo دو طعم ارائه می‌دهد: یک مدخل زیر listeners: با type: tunnel، یا بلوک سطح بالای tunnels: با شکل رشتهٔ جداشده با کامای فشرده. به Tunnel — mihomo مراجعه کنید.

منبع: infra/conf/dokodemo.go:10-20 · v26.7.28 (5ca6f4b)

Core Tutorial اثر Argsment