Перейти к содержимому

mKCP и xdns: kcp-хост

Prizrak-Core передаёт VLESS поверх mKCP 👻 так, как его ждёт kcp-инбаунд Xray-core после finalmask, с UDP-масками вроде xdns под mKCP. Типичный случай — DNS-туннель: пакеты mKCP идут как DNS-запросы к зоне сервера через публичные резолверы и проходят там, где закрыто всё, кроме DNS.

Маппер собирает весь прокси из настроек самого хоста: сеть, mkcp-opts и клиентскую маску из поля Final Mask хоста.

{
"xrayJson": [],
"mihomo": [
{ "op": "set", "to": "network", "value": "mkcp" },
{ "op": "copy", "from": "$host.transportOptions.clientMtu", "to": "mkcp-opts.mtu" },
{ "op": "copy", "from": "$host.transportOptions.clientTti", "to": "mkcp-opts.tti" },
{ "op": "copy", "from": "$host.transportOptions.congestion", "to": "mkcp-opts.congestion" },
{ "op": "copy", "from": "$host.streamOverrides.finalMask", "to": "finalmask" },
{ "op": "unset", "to": "client-fingerprint" }
],
"base64": []
}
  • Четыре copy обязательны. Без маски клиент пойдёт к серверу напрямую, и туннель не заработает.
  • set network и unset client-fingerprint — для аккуратности: Prizrak-Core принимает и network: kcp, а лишний client-fingerprint у прокси без TLS игнорирует.
  • В Final Mask хоста — клиентская маска в формате Xray, Prizrak-Core читает её как есть. Пример с компактной записью первого xdns:
{"udp":[{"type":"xdns","settings":{"resolvers":["t.example.com:aaaa+udp://77.88.8.8:53","t.example.com:aaaa+udp://8.8.8.8:53"]}}]}

Во входящем kcp на сервере должна стоять серверная часть того же finalmask (xdns с вашей зоной).

С компактной записью первого xdns (серверы Xray v26.1.31–v26.9.9):

proxies:
- name: 🇷🇺 DNS-туннель
type: vless
server: 77.88.8.8
port: 53
uuid: <uuid>
udp: true
packet-encoding: xudp
network: mkcp
mkcp-opts:
mtu: 77
tti: 100
congestion: false
finalmask:
udp:
- type: xdns
settings:
resolvers:
- "t.example.com:aaaa+udp://77.88.8.8:53"
- "t.example.com:aaaa+udp://8.8.8.8:53"

С полной записью (серверы новее v26.9.9), здесь ещё и с VLESS Encryption на том же хосте — encryption генератор добавляет сам:

proxies:
- name: 🇦🇶 Резерв (только текст)
type: vless
server: <IP сервера>
port: 53
uuid: <uuid>
encryption: mlkem768x25519plus.native.0rtt.<ключ>
udp: true
packet-encoding: xudp
network: mkcp
mkcp-opts:
mtu: 77
tti: 100
congestion: false
finalmask:
udp:
- type: xdns
settings:
domains:
- names: ["<зона xdns>"]
types: [28] # AAAA
edns0: 1232
resolvers:
- addrs:
- udp://77.88.8.8:53
- udp://77.88.8.1:53
# ... остальные резолверы

Обе формы проверены на Prizrak-Core v1.19.33-r10: в виде Xray JSON, ссылкой vless://…?type=kcp&mtu=77&tti=100&fm=… и YAML, который собирает маппер. Страницы открываются примерно за секунду, скорость — десятки КБ/с, этого хватает мессенджерам в текстовом режиме. Пока идут данные, у ядра открыты только UDP-сокеты к резолверам, напрямую к серверу ничего не идёт.