Skip to content

RU DPI/TSPU blocks protocol on v1.7.12 ("None of the endpoints are available"); v1.8.1-nightly.1 works; no auto-reconnect on silent endpoint loss #184

Description

@supervisorx

Please answer the following question for yourself before submitting an issue

  • I checked to make sure that this issue has not already been filed

AdGuard VPN CLI version

1.7.12 (release) and 1.8.1-nightly.1

Environment

  • OS: Debian 12 (bookworm), kernel 6.1.0-26-amd64
  • Architecture: x86-64
  • Usage: Linux gateway/NAT box — TUN mode, config set-tun-routing-mode NONE, set-change-system-dns off, set-bound-if-override enp6s18, connect --no-fork -y -l "..." under systemd, Restart=on-failure
  • Locations: US (New York / Seattle)
  • Network path: Russia, ISP with TSPU (DPI) equipment

Issue Details

Steps to reproduce:

  1. Run v1.7.12 connected directly through a Russian ISP (TSPU present), New York location, TUN mode.
  2. During the morning of 2026-08-20 (UTC+11) the tunnel data-plane starts dying periodically (every 15–60 min); by ~12:13 local the client cannot connect at all.
  3. adguardvpn-cli connect fails with:
ERROR CLI_APP ~CliApp: Command finished with error:
    > None of the endpoints are available
  1. At the same moment, plain TCP to every known endpoint on :443 from the same host succeeds (verified with timeout 5 bash -c "echo > /dev/tcp/<endpoint>/443" for each one) — connections are established at TCP level but killed at the protocol level.
  2. Routing the client's own traffic through another VPN tunnel restores full connectivity to the same endpoints from the same host.
  3. After upgrading to v1.8.1-nightly.1 the client connects directly again and stays connected (as of ~16:20 UTC+11).

Expected Behavior

  • The transport should withstand TSPU/DPI signature-based interference (masking, endpoint rotation, or graceful fallback), so the tunnel keeps working from Russia during the day.
  • When an upstream endpoint dies silently, the client should detect the dead data-plane and reconnect to a fresh endpoint automatically, without the process just sitting on dead connections.

Actual Behavior

Two distinct problems observed on v1.7.12:

1) Signature-based DPI blocking (time-of-day dependent):

  • Night (12+ hours of uptime): perfectly stable.
  • Morning: data-plane dies every 15–60 min; the daemon process keeps running while no data flows, and there is nothing in the logs.
  • Midday: complete block — connect exits with "None of the endpoints are available", while plain TCP :443 to every endpoint still succeeds (protocol layer killed after establishment).
  • Encapsulating the client's traffic in another VPN tunnel makes the same endpoints work again from the same host — confirming DPI/TSPU as the cause.

2) No auto-recovery on silent endpoint loss:
Several times the data-plane stopped while the daemon stayed alive: TCP connections dead, no data flow, no log entries at all, status still reported connected. A manual service restart (which picks fresh endpoints) fixed it instantly every single time. With --no-fork under systemd this has to be covered by external watchdogs.

Endpoints observed during the incidents: 23.27.246.168, 103.115.19.250, 103.115.19.170, 138.124.33.46, 89.125.13.207, 104.154.125.27, 149.102.254.129, 104.143.217.188

Screenshots

Screenshot 1

Additional Information

  • v1.8.1-nightly.1 currently connects directly where 1.7.12 could not. Not sure yet whether it's better protocol masking or just fresh endpoint ranges — tomorrow's DPI window will tell. Happy to report back with results.
  • journald logs from the v1.7.12 incidents are available on request.
  • Context: we run the CLI as a policy-routing gateway for a small office; the NONE routing mode + set-bound-if-override make it an excellent fit for this use case. Thanks for the great tool!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions