Dokodemo-door — Xray-core
Dokodemo (по-японски «дверь куда угодно») — входящее подключение Xray для прозрачного проксирования. Оно слушает один или несколько портов и пересылает каждое принятое соединение на фиксированный адрес назначения — или, в Linux, на исходный адрес соединения до NAT через SO_ORIGINAL_DST / IP_TRANSPARENT.
Входящий
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> | Уровень политики по умолчанию для пересылаемых соединений. |
Исходный код: 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/ параметры сниффинга на уровне входящего подключения. - mihomo предлагает два варианта: запись в
listeners:сtype: tunnelили блок верхнего уровняtunnels:с компактной строковой формой через запятую. См. Tunnel — mihomo.
Исходный код: infra/conf/dokodemo.go:10-20 · v26.7.28 (5ca6f4b)
