Сегодня нашёл интересную штуку (с трудом, так как наши друзья, разрабатывающие xray-core, очень любят писать весь changelog на китайском).
Оказывается буквально несколько дней назад они добавили поддержку Finalmask - это дополнительный слой маскировки трафика поверх обычных транспортов вроде XHTTP/REALITY/TLS.
Там есть несколько вариантов работы. Самый простой это
fragment - "мягкая" фрагментация начала соединения. Он режет стартовые пакеты, например TLS ClientHello, на несколько частей с небольшими задержками. За счёт этого DPI сложнее распознать протокол по первому крупному и "красивому" пакету. Плюс fragment в том, что он почти не ломает совместимость и обычно даёт минимум побочек. Это, конечно, не волшебная таблетка, но в целом штука неплохая.
Например, можно при желании использовать это на участке между двумя вашими серверами. Для этого на промежуточном сервере просто пишется вот такое в раздел
streamSettings (для outbound)
"finalmask": {
"tcp": [
{
"type": "fragment",
"settings": {
"packets": "tlshello",
"length": "100-200",
"delay": "10-20",
"maxSplit": "3-6"
}
}
]
}На сервере-получателе ничего менять не надо. Учтите, что xray нужно обновить по крайней мере до версии
26.3.27.
Есть и более мощная штука, называется
sudoku. Она не просто дробит поток, а меняет его внешний вид по согласованному правилу/паролю между клиентом и сервером. Это сложнее, поэтому обе стороны должны поддерживать sudoku и иметь одинаковые настройки. Плюс sudoku в том, что трафик становится менее похож на стандартный Xray/REALITY/XHTTP и хуже ловится простыми сигнатурами.
Увы, похоже на участке между двумя серверами это особо работать не будет, если на сервере-получателе (сервер Б) стоит caddy и работает как reverse proxy. Зато это можно настроить между клиентом и первым сервером вот так, тоже в
streamSettings, но для inbound:
"finalmask": {
"tcp": [
{
"type": "fragment",
"settings": {
"packets": "tlshello",
"length": "100-200",
"delay": "10-20",
"maxSplit": "3-6"
}
},
{
"type": "sudoku",
"settings": {
"password": "длинный пароль",
"paddingMin": 8,
"paddingMax": 64
}
}
]
}Но на клиенте обязательно тоже нужно настроить finalmask. Так, v2rayn это уже умеет, там просто жмётся в расширенных настройках finalmask и вставляется json вот такой
{
"tcp": [
{
"type": "sudoku",
"settings": {
"password": "тот же пароль",
"paddingMin": 8,
"paddingMax": 64
}
},
{
"type": "fragment",
"settings": {
"packets": "tlshello",
"length": "100-200",
"delay": "10-20",
"maxSplit": "3-6"
}
}
]
}Далее там можно сформировать share link (она довольно большая тк кодируется json). Другие клиенты это умеют не все. Streisand - нет, happ - для винды вроде да, для мака не похоже, onexray - да, v2rayng - вроде должен, но там судя по всему только в пре-релизной версии. Но думаю в ближайшие месяцы это добавят много где