Skip to content

VPeeN v4.8.0 β€” Sentinel

Choose a tag to compare

@github-actions github-actions released this 05 Nov 21:27
· 8 commits to main since this release

VPeeN v4.8.0 β€” "Sentinel"

Tunnel mode, root-caused and fixed. Automatic updates with one click. A CI test gate so a broken build can never ship.

Tunnel mode β€” the real bugs, all fixed

  • The "connected but dead" blackhole β€” on the first connect the TUN layer was raised with an empty anti-loop IP list (the listeners event arrived after phase=connected), so the default route was hijacked with zero host routes for the upstream servers and every dial looped back into the tunnel. Fixed at three levels: correct event order, payload on the phase event itself, and the worker now refuses to hijack at all when the IP set is empty.
  • Hostnames are not routes β€” upstream "IPs" could be hostnames, which ip route rejects and route.exe resolves inconsistently. All addresses are now resolved to concrete IPs before any route is touched; hostname/v6 entries never reach a route command.
  • Round-robin DNS re-poisoning β€” after the hijack, re-resolving a proxy hostname through the tunnelled resolver could return an unrouted A record: instant mid-session blackhole. Proxy hostnames are now pinned pre-hijack and answered from the pin map (process resolver + DNS relay).
  • The crash-recovery sweep that never ran β€” a crash while the tunnel was up could leave the hijack routes behind (network bricked until reboot). The sweep now actually runs on every boot, and the session journal is checkpointed after every route mutation.
  • DNS order-of-operations β€” the system resolver used to be swapped to the tunnel relay before the relay had bound. Now the relay binds first; a failed bind keeps your physical resolver instead of killing DNS for the whole session.
  • --interface removed from tun2socks (pure risk on some stacks), upd race guard for credential rotations, relay-bind failure keeps the tunnel up with a leak warning instead of a blackout.

Automatic updates (new)

  • Checks GitHub on start + every 6 h, pre-downloads the update in the background (through the app's own SOCKS5 when GitHub is unreachable directly), verifies it against the release's SHA256SUMS.txt (CI now generates it β€” a release without checksums is refused), and switches you over with one button: install β†’ clean disconnect β†’ restart into the new version.
  • The swap renames the old build aside (rollback on any failure), a boot marker verifies the new version actually landed, and leftovers are swept on the next start. Source installs (git) are detected and told to git pull instead.
  • New Update sheet in the UI: current β†’ new version, download progress, release notes, one-click install. A dot on the footer version chip shows when an update is waiting.

Release discipline

  • CI now runs the full regression suite (202 checks) as a dedicated gate job β€” tunnel fixes, self-update, speed pass, fix pack, integration, Web UI β€” and the release job depends on it. Failing test anywhere = no release, period.

Verification: 31 tunnel-fix + 36 self-update + 42 speed + 59 fix-pack + 11 integration + 23 Web UI = 202/202 green.

This is the release that brings the updater β€” download it once from the assets below; every future release updates itself with one click.