Skip to content

[Bug/Feature Request] Expand Fingerprint selection: Allow pinning specific uTLS IDs to bypass SNI+Fingerprint filtering #5406

@dimzon

Description

@dimzon

Description

In the latest v2rayNG beta versions (utilizing updated Xray-core/uTLS), many REALITY connections have started failing in Russia due to advanced DPI (TSPU) signature matching.

Observed behavior:

  • SNI + Fingerprint Correlation: The block is often specific to the combination. For example, using a Google domain + the default chrome fingerprint results in an immediate reset, while changing the domain OR switching to a fingerprint like ios or qq restores the connection.
  • Regression in Beta: The default firefox fingerprint in the latest beta is now detectable and blocked. Rolling back to an older v2rayNG version fixes the issue because the older core used a different uTLS mapping for the generic firefox label.

Technical Analysis (Xray-core Reference)

As seen in the Xray-core source code [transport/internet/tls/tls.go (Line 180)](https://github.com/XTLS/Xray-core/blob/cb7bfeb54c79d7e81ee1f9d8c6a7e0a2125ab898/transport/internet/tls/tls.go#L180), the core supports a wide range of specific uTLS IDs categorized into:

  1. PresetFingerprints (Generic labels currently exposed in v2rayNG)
  2. ModernFingerprints (Specific versions like hellochrome_120, hellochrome_131, hellofirefox_120)
  3. OtherFingerprints (Stable older versions like hellofirefox_105, helloios_13, helloqq_11_1)

The Problem: v2rayNG's UI only allows selecting from a few generic presets. When the core's default firefox or chrome updates to a newer version that is flagged by local DPI, users have no easy way to "pin" a working, older version (like hellofirefox_105) without manual JSON editing, which is often overwritten by the GUI.

Requested Features

1. Full uTLS ID Support in UI
Expand the fingerprint selection to include all strings from ModernFingerprints and OtherFingerprints.

  • Suggestion: Add a "Show Advanced Fingerprints" toggle in App Settings to populate the spinner with specific IDs.

2. Global Fingerprint Mapping (Alias)
Add a global configuration form in "Settings" to map generic labels to specific IDs.

  • Example: Set a global rule: firefox -> hellofirefox_105.
  • This allows users to fix all their profiles at once when a specific core update breaks the default fingerprint behavior.

3. Manual String Input
Allow the fingerprint field to accept any string. The app should pass the input directly to Xray-core instead of reverting it to a predefined default.

Why this is necessary

DPI systems are now targeting specific TLS handshake signatures. The generic labels (chrome, firefox) are moving targets. Providing access to the full list of uTLS IDs is the only way for users to maintain a stable, stealthy connection in a rapidly changing censorship environment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions