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.



