Пост-квантовый REALITY, быстрый XHTTP через CDN и чистка протоколов
Всё ниже уже влито в ветку dev, но ещё не вышло ни в релиз, ни в пререлиз. dev больше не собирается в Prerelease-dev: попробовать изменения сейчас можно, только собрав ядро из исходников ветки dev.
Пост-квантовый REALITY (#8, #10)
Начиная с Xray 26.9.8 сервер REALITY молча отбрасывает ClientHello без key share X25519MLKEM768 перед X25519. Поэтому прежний Citrus не мог подключиться к актуальным серверам Xray.
Клиент (reality-opts)
- X25519MLKEM768 включён по умолчанию.
support-x25519mlkem768: falseвозвращает классический hello для старых серверов. Отпечаткам без ML-KEM (ios, edge, randomized и другим) key share добавляется автоматически. client-version: версия Xray, которую клиент сообщает серверу. По умолчанию26.10.10, раньше было зашито1.8.2. Это нужно для серверов сminClientVer.mldsa65-verify: проверка подписи ML-DSA-65 во временном сертификате, аналогmldsa65Verifyв Xray (параметрpqvв ссылках).client-fingerprint: firefoxиsafariтеперь отдают настоящие hello Firefox 148 и Safari 26.3 из нашего форка getmikan/utls. Принимаются и имена Xray:hellofirefox_148,hellosafari_26_3,hellochrome_131.
proxies: - name: vless-reality-vision type: vless server: server port: 443 uuid: uuid network: tcp tls: true flow: xtls-rprx-vision servername: www.microsoft.com client-fingerprint: chrome reality-opts: public-key: xxx short-id: xxx # support-x25519mlkem768: true # по умолчанию; false только для старых серверов # client-version: 26.10.10 # по умолчанию # mldsa65-verify: xxx # публичный ключ ML-DSA-65 (pqv)Сервер (reality-config у входящих)
mldsa65-seed: подпись временного сертификата ML-DSA-65, аналогmldsa65Seedв Xray. Цепочка сертификатовdestдолжна быть не короче примерно 3,5 КБ, иначе подпись не помещается и рукопожатие не проходит. У Xray то же ограничение.require-x25519mlkem768: принимать только клиентов с X25519MLKEM768, остальные уходят наdest.min-client-verиmax-client-ver: допустимый диапазон версий клиента.
listeners: - name: vless-in type: vless port: 443 users: - username: 1 uuid: uuid flow: xtls-rprx-vision reality-config: dest: test.com:443 private-key: xxx # citrus generate reality-keypair short-id: - 0123456789abcdef server-names: - test.com # max-time-difference: 60000 # миллисекунды # mldsa65-seed: xxx # xray mldsa65 # require-x25519mlkem768: true # min-client-ver: 26.9.8 # max-client-ver: 26.10.10Проверено вживую против Xray 26.10.10 (VLESS + Vision + REALITY) в обе стороны: клиент Citrus к серверу Xray и клиент Xray к серверу Citrus, с подписью ML-DSA-65 и без неё. Неверный ключ отклоняется.
Изменение поведения. max-time-difference теперь в миллисекундах, как maxTimeDiff в Xray. Раньше значение читалось в микросекундах, и число, скопированное из конфига Xray, допускало расхождение часов в 1000 раз меньше. Если вы подбирали значение под старые единицы, разделите его на 1000.
Все ключи описаны в справочнике конфига.
XHTTP через CDN (#9)
- В режиме
packet-upследующий POST больше не ждёт ответа на предыдущий, как и в Xray. Через CDN каждый POST раньше стоил полный круг клиент → CDN → сервер, и отдача упиралась в задержку. В живом тесте против Xray 26.10.10 запрос через packet-up занял 0,4 с вместо 5,4 с. Через HTTP/1.1 ответы по-прежнему ждутся. x-padding-bytes: "0-0"теперь значит паддинг по умолчанию Xray (100–1000 байт), а не его отсутствие.pathс запросом, например/xh?ed=2048, отправляется как путь и query, как в Xray, а не как экранированный%3Fвнутри пути.
Удалены устаревшие протоколы (#7)
Удалены ShadowsocksR, Hysteria v1, TUIC v4, потоковые шифры Shadowsocks (rc4-md5, aes-ctr/cfb, chacha20 и другие) и v2ray-plugin. Shadowsocks принимает только none, AEAD и 2022-blake3-*. VMess пока остаётся.
- В провайдерах прокси такой узел пропускается с предупреждением, остальная подписка загружается.
- В основном конфиге это ошибка с понятным текстом, например «TUIC v4 is no longer supported, use uuid/password (v5)».
Журнал отклонённой авторизации (#5)
Пакет component/authevent сообщает о неудачных попытках входа на входящих TrustTunnel, REALITY, AnyTLS, VLESS, Trojan, TUIC v5, Hysteria2 и Sudoku: протокол, адреса и причину, без учётных данных. Это основа для журнала отклонённых запросов в панели. События идут через очередь и не замедляют рукопожатие.
Гонки данных в Vision и AnyTLS (#11)
Исправлены гонки данных в фильтре и чтении XTLS Vision и в потоке AnyTLS, которые находил go test -race. Горячий путь Vision после первых пакетов стоит одну атомарную загрузку.
