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