Nicholas Clooney

Tagged "networking"

12 entries

blog: GL.iNet Slate 7, Tailscale, and split-routing around the Great Firewall

I published GL.iNet Slate 7, Tailscale, and Split-Routing Around the Great Firewall, a full technical writeup of the router-level setup I run in China: a Slate 7 carrying Tailscale as the default route to a Debian VPS exit node, with PBR sending Chinese CIDRs direct out the physical uplink and a dnsmasq split so CN domains resolve via AliDNS and everything else rides stubby DoT to Cloudflare. The post spends most of its time on the two war stories that took the longest to unstick: getting PBR's fwmark rules to win over Tailscale's exit-node rule, and hunting down GL.iNet's vpn_table stamping every LAN packet with 0x8000 and quietly breaking Google and YouTube. All the shell, nftables, and dnsmasq snippets embed live from a public gist, pinned to a revision so the post never drifts underneath its own code.

GL.iNet Slate 7, Tailscale, and Split-Routing Around the Great Firewall

A full technical walkthrough of the router-level setup I run in China: a GL.iNet Slate 7 running Tailscale as the default route to a Debian VPS exit node, with policy-based routing sending CN traffic direct and a DNS split that keeps Chinese and foreign services both fast. Includes the three gotchas that took the longest to unstick: LAN forwarding and MASQUERADE on `tailscale0`, PBR-vs-Tailscale precedence, and the GL.iNet 0x8000 mark leak.

A Private Ingress Engine That’s Everywhere-Accessible but Publicly Invisible

Most personal projects and homelab services don’t need to be public, but they do need to be reachable. I want to access my dev tools, internal dashboards, and side projects from anywhere, on any of my own devices, without opening ports, exposing IPs, or worrying about who might stumble across them on the internet.

This post walks through how I built an everywhere-accessible but publicly invisible ingress engine using Tailscale, Docker, Caddy, and DNS rewrites. The result is a private, domain-based setup that behaves like a small cloud. It has HTTPS, clean hostnames, and reverse proxying, but is only accessible to me, lives on my own machine, and never touches the public internet.

Wrestling Safari and Cloudflare: Debugging Umami Analytics

I spent the better half of today getting Umami analytics to cooperate with a static blog served through Cloudflare and an Nginx proxy. The tracking script was having issue in Safari (CORS) and Firefox (nothing showed up in the Developer Tools' Network tab).

This is the story of following the trail from mysterious redirects to CORS ghosts and finally to Firefox’s stealthy sendBeacon API.

A Not So Short Guide to Tailscale: Secure Networking Made Simple

Over the past few weeks, I’ve spent quite a bit of time experimenting with Tailscale, and it has quickly become one of my favorite tools.

If you haven’t heard of it, Tailscale is a secure, easy-to-use mesh VPN built on WireGuard. It lets your devices talk to each other as if they were on the same local network, no matter where in the world they are.

Debugging Tailscale on UK Mobile Networks: A Journey into NAT, DERP, and IPv6

What started as a simple question — "Why can’t I reach my MacBook over Tailscale from my iPhone on mobile data?" — turned into a deep dive into NAT types, relay servers, and the hidden power of IPv6. This post documents the technical journey, the dead ends, and the final conclusion.

So the mystery: why do VPS connections work, but Mac connections fail?