Dokodemo-door — Xray-core
Dokodemo(日语 "任意之门")是 Xray 的透明代理入站。它在一个或多个 端口上监听,把所收到的每条连接转发到固定目的地 —— 在 Linux 上则可借 助 SO_ORIGINAL_DST / IP_TRANSPARENT 转发到 NAT 前的原始目的地。
入站
"protocol": "dokodemo-door" 入站的 settings:
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
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> | 转发连接的默认策略等级。 |
源码: infra/conf/dokodemo.go:10-20 · 锚定版本 v26.6.1 (94ffd50)
示例
静态端口转发 —— 在 :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作为 别名被接受(构建时拷贝到新字段上)。下面的示例使用旧式名称,它们 仍然可用;新配置两套皆可。 - 不合法
host:port字面量的portMap值会在启动时失败 (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.6.1 (94ffd50)
