Blog
Development·5 min read

Een one-click VPN bouwen om de Great Firewall te overleven

Ik verhuis naar China en de Great Firewall blokkeert alles. Dus bouwde ik een desktop-app met Tauri en Rust die verkeer tunnelt via VLESS + Reality — ondetecteerbaar

Jo Vinkenroye·March 8, 2026
Een one-click VPN bouwen om de Great Firewall te overleven

Ik verhuis voor een tijdje naar China. en als je iets weet over de internetsituatie daar, weet je dat de Great Firewall zo ongeveer alles blokkeert — Google, YouTube, WhatsApp, Twitter, zelfs ChatGPT. de gebruikelijke VPN-apps worden ook vrij snel gedetecteerd en geblokkeerd

Dus bouwde ik mijn eigen oplossing

Een desktop-app die je met één klik verbindt met een proxyserver. geen configuratiebestanden, geen handmatige setup, geen terminalcommando's. gewoon klikken en je verkeer wordt versleuteld, versluierd en gerouteerd via een server die de firewall niet kan onderscheiden van normaal webverkeer

Waarom niet gewoon een normale VPN gebruiken

Commerciële VPN's zijn het eerste wat China blokkeert. ze kennen de protocollen, ze kennen de server-IP's, ze doen deep packet inspection op alles. de meeste VPN-verbindingen worden binnen seconden vertraagd of geblokkeerd

De Great Firewall is eigenlijk heel geavanceerd. het blokkeert niet alleen IP's — het analyseert verkeerspatronen, TLS-fingerprints, pakettiming. als je verbinding er niet uitziet als normaal websurfen, wordt het geflagd

Dus ik had iets nodig dat er helemaal niet uitziet als een VPN

De truc: VLESS + Reality

Hier wordt het interessant. ik gebruik het VLESS-protocol met Reality-transport — en Reality doet iets slims

Het laat je proxyverkeer eruitzien als een normale HTTPS-verbinding naar een legitieme website. in dit geval bootst de TLS-handshake een verbinding na naar www.microsoft.com op poort 443. de firewall ziet wat eruitziet als iemand die de website van Microsoft bezoekt. niets verdachts

De versleutelingsstack:

  • Reality regelt TLS-niveau versleuteling en versluiering
  • xtls-rprx-vision voor flow control
  • Chrome TLS fingerprint spoofing om echt browserverkeer na te bootsen
  • Curve25519 public key crypto voor de handshake

VLESS zelf zet encryptie op "none" omdat Reality alles al afhandelt op de transportlaag. geen dubbele versleuteling, geen overhead, geen detecteerbare VPN-signatuur

De stack

  • Tauri 2 — desktop-app framework (Rust-backend, webfrontend)
  • React 19 + TypeScript — frontend UI
  • xray-core — de proxy-engine die VLESS + Reality draait
  • 3x-ui — serverzijdig paneel voor het beheren van verbindingen

Tauri was de voor de hand liggende keuze. Electron zou werken maar een volledig Chromium verschepen voor wat in essentie een verbindingsknop is voelde overdreven. Tauri geeft me een native app met een kleine footprint en een Rust-backend die processen kan starten en systeemrouteringstabellen kan aanpassen

Hoe het werkt

Als je op verbinden klikt, gebeurt er veel in ongeveer 2 seconden

Automatische registratie

De app wordt geleverd met inloggegevens voor een 3x-ui beheerpaneel dat draait op mijn server. bij de eerste verbinding genereert het een UUID voor je apparaat en registreert het zichzelf als client. geen handmatige stap nodig

App launch → Generate UUID → Login to panel → Register device → Save identity

Elke volgende verbinding controleert alleen of de registratie nog bestaat. ik wilde nul wrijving — vooral voor familieleden die dit misschien ook nodig hebben

De proxyketen

Your browser
→ System SOCKS proxy (127.0.0.1:1080)
→ xray-core (local process)
VLESS + Reality encrypted tunnel (TCP:443)
→ Remote server (outside China)
→ Internet

xray-core draait als een kindproces. de app schrijft een JSON-configuratie, start de binary en pollt poort 1080 totdat de SOCKS5-proxy gereed is. daarna vertelt het macOS of Windows om al het verkeer door die lokale proxy te routeren

Systeemintegratie

Het lastigste deel is niet de proxy — het is het besturingssysteem laten meewerken

Op macOS voert de app networksetup uit met beheerrechten om de systeem-SOCKS-proxy in te stellen. op Windows schrijft het naar het register. beide vereisen verhoogde rechten

De app maakt een momentopname van je netwerkstatus voordat je verbindt — standaard gateway, interface, DNS-servers. als de app crasht terwijl je verbonden bent, herstelt het alles automatisch bij de volgende start

Toegang delen

Dit was belangrijk. ik ben niet de enige die dit nodig heeft

De app kan een VLESS-URI exporteren als QR-code. scan het met v2rayNG op Android of Streisand op iOS en je hebt dezelfde verbinding. de URI bevat alles — serveradres, UUID, publieke sleutel, Reality-instellingen. één scan, verbonden

Dus ik kan mijn server één keer instellen en toegang delen met iedereen die het nodig heeft. geen uitleg over hoe proxyconfiguraties werken, geen mensen door terminalcommando's loodsen via WeChat

Wat ik zou verbeteren

De paneelinloggegevens zijn hardcoded. de paneelverbinding gebruikt HTTP zonder TLS-verificatie. configuratiebestanden slaan inloggegevens op in plaintext. voor een persoonlijke tool is dit prima, maar ik weet dat ik dit moet fixen voordat ik het breder deel

De Rust-code gebruikt wat unsafe statische mutable state voor proceshandles. het werkt, maar een Arc/Mutex-aanpak zou netter zijn. soms wint verschepen het van perfectie — vooral als je een vlucht moet halen

Het resultaat

Een 15MB desktop-app die een $5/maand VPS omtovert in een persoonlijke VPN die de Great Firewall niet kan detecteren. één klik om te verbinden, één klik om te verbreken. verkeer ziet eruit als normaal websurfen voor iedereen die meekijkt

Soms is de beste tool degene waar niemand over na hoeft te denken. en als je op het punt staat toegang te verliezen tot de helft van het internet, bouw je wat je nodig hebt

Stay Updated

Get notified about new posts on automation, productivity tips, indie hacking, and web3.

No spam, ever. Unsubscribe anytime.

Comments

Related Posts