VPN Works Lab live demo vpnw.com

Does the VPN app keep traffic in the tunnel when things go wrong?

Lab runs a VPN app in a private test network, keeps a probe sending traffic every 50 ms, and breaks things on a timetable. Observers on the far side write down everything that arrives and where it came from. Below are two real runs of stand-in clients through the same fault: the VPN server falls silent for five seconds. Lab's verdict code runs in this page on the recorded packets.

Loading Lab's engine

Step 1 of 6

A laptop, a home router, the internet and a VPN server

The test network is four Linux network namespaces on one machine, joined by virtual cables. The VPN app under test runs on the laptop next to a probe. Every 50 ms the probe asks for a DNS name nobody asked for before, opens a short TCP connection and sends a UDP datagram, each tagged with a sequence number.

device

The laptop
  • the VPN app under test, on a TUN device
  • the probe: DNS, TCP and UDP every 50 ms
  • 192.168.1.10 on the home network

home

The home router
  • translates addresses to 203.0.113.2
  • runs a DNS resolver at 192.168.1.1
  • can push a route or hand out a new DNS server

internet

The observers
  • TCP and UDP observers at 198.51.100.10
  • the name server for the probe's names
  • each writes down every arrival and its source address

vpn

The VPN server
  • the tunnel's far end, at 192.0.2.10
  • sends everything on from 192.0.2.20
  • a DNS resolver inside the tunnel
Through the tunnelAn arrival from the VPN's exit address 192.0.2.20, or a query at the VPN's own resolver.
A leakAn arrival from the home network's address 203.0.113.2, or anything that reached the home router's resolver.

Lab watches from the network side. It doesn't ask the app what it did; it sees what arrived, where from, and when.

What is real here

Real, and recorded

  • The runs: the stand-in clients ran as real Linux processes on real TUN devices, with real routing tables and nftables firewalls, in network namespaces on one machine. The fault was a real firewall rule at the server.
  • The packets: every probe and every arrival in the timelines is a line of a recording made during those runs by the vpnw-lab command. The page replays them; nothing runs live.

Real, and running here

  • The verdict: Lab's own Go code, compiled to WebAssembly, reads the recordings in this page and decides them. The command line gives the same counts for the same files.
  • The numbers: every count, time and window on the steps above comes from that code.

Stand-ins

  • The VPN clients and the server were built for the bench. The tunnel carries packets in plain UDP: no encryption, no keys. No vendor's VPN app took part.
  • The addresses come from ranges set aside for documentation and private networks.
  • The table in step 6 is copied from the final run's results.

VPN Works is open source under the Apache License 2.0. Copyright VPNW.com 2026. The code is at https://github.com/VPNWorks/vpnw.