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`. |
rewritePort | uint16 | 0 | <port> | پورت مقصد برای ترافیک ارسالی. نام متعارف برای فیلد قدیمی `port`. |
network | *NetworkList | (alias) | (alias of allowedNetwork) | نام مستعار قدیمی برای `allowedNetwork`؛ اگر تنظیم شود در زمان ساخت آن را بازنویسی میکند. |
address | *Address | (alias) | (alias of rewriteAddress) | نام مستعار قدیمی برای `rewriteAddress`؛ هنوز پذیرفته میشود و در زمان ساخت رونویسی میگردد. |
port | uint16 | (alias) | (alias of rewritePort) | نام مستعار قدیمی برای `rewritePort`. |
portMap | map[string]string | {} | {<src-port>: <host:port>} | بازنویسی مقصد به ازای هر پورت. کلیدها پورتهای شنود (بهصورت رشته) هستند؛ مقادیر تحتاللفظی `host:port` میباشند. هر مقدار در زمان ساخت پیکربندی اعتبارسنجی میشود. |
followRedirect | bool | false | true | false | خواندن مقصد اصلی از سیستمعامل (Linux iptables SO_ORIGINAL_DST / tproxy). وقتی true باشد، `address`/`port` در صورت ناتوانی در بازیابی به مقصد جایگزین تبدیل میشوند. |
userLevel | uint32 | 0 | <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)
