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.9.9 (52a412d)

مثال‌ها ​

ارسال‌کنندهٔ پورت ایستا — پذیرش روی :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" }
      }
    }
  ]
}

نکات ​

  • 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 تنظیم کنید.
  • followRedirect همراه با sockopt.tproxy در OpenBSD نیز پشتیبانی می‌شود.
  • وقتی نه 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.9.9 (52a412d)

Core Tutorial اثر Argsment