Networking
-
Switching to TCP BBR on the edge
We flipped our edge servers from CUBIC to BBR and measured the actual win for our traffic, which was smaller than the marketing suggests
-
Testing routers with Linux network namespaces
A pattern I now use for testing every firewall and routing change before it touches the edge: cheap, repeatable, and on a laptop
-
BGP in a small network: worth it?
I set up BGP between two homelab routers to learn, and reached some unromantic conclusions about when it earns its keep
-
MTU, MSS, and a VPN that couldn't stream video
A perfectly-working WireGuard tunnel that failed only on video streams, and the diagnosis that made me finally understand MSS clamping
-
A TLS SAN quirk that broke mTLS
An internal service stopped accepting a client cert after a seemingly innocent renewal, and the issue hid in the SAN encoding
-
ndots:5 and the DNS tax in Kubernetes
Every non-cluster DNS lookup in our pods was paying for five failed attempts first, and lowering ndots cut tail latency significantly
-
Putting IPv6 on my home network, finally
After years of excuses I enabled IPv6 end to end at home, and most of the friction came from devices I did not expect
-
Finding TCP retransmits with bpftrace
A short bpftrace script that pinpoints which process and peer are responsible for TCP retransmits on a noisy box
-
Why I finally switched from nginx to Caddy
After a decade on nginx, two weekends of YAML and a lingering distaste for certbot cronjobs made me try Caddy for my homelab ingress
-
WireGuard vs Tailscale in my homelab after a year
After a year of running both, here's where each one earned its keep and where I'd pick differently next time
-
A TCP RST that took a week to track down
A long-lived HTTP connection got RST every 12 hours, and the answer lived in the intersection of conntrack, a load balancer, and a very patient test
-
bpftrace: which process is eating the retransmits?
A one-line bpftrace probe that ranks processes by the number of TCP retransmits they're causing.
-
nftables rule ordering surprised me
A two-hour outage caused by a harmless-looking rule insertion into the wrong chain position, and what I learned about nftables evaluation
-
http.Client tuning for a flaky upstream
A checklist of the settings I reach for when a Go service needs to talk to an upstream that's... not great
-
httptest.Server is better than you think
Most Go HTTP tests I see are mocked when they should be using httptest.Server, and it shows