Skip to content

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` 字段的规范名。
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>转发连接的默认策略等级。

源码: 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 / portportMap 都不匹配,且 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)

由 Argsment 出品的 Core Tutorial