Skip to content

Dokodemo-door — Xray-core

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

ورودی

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

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

منبع: infra/conf/dokodemo.go:10-17 · ثابت‌شده در v1.260327.0 (d2758a0)

مثال‌ها

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

نکات

  • مقادیر portMap که تحت‌اللفظی host:port معتبر نیستند در زمان راه‌اندازی ناموفق می‌شوند (infra/conf/dokodemo.go:26-30).
  • برای آنکه 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-17 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment