<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Homelab on VPNReview — Independent VPN Tests: Speed Benchmarks &amp; Privacy Audits in 2026</title>
    <link>https://vpnreview.nxtniche.com/tags/homelab/</link>
    <description>Recent content in Homelab on VPNReview — Independent VPN Tests: Speed Benchmarks &amp; Privacy Audits in 2026</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 05 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://vpnreview.nxtniche.com/tags/homelab/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>TSDProxy Quick Review: Zero-Config Tailscale Proxy</title>
      <link>https://vpnreview.nxtniche.com/posts/tsdproxy-quick-review-2026/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://vpnreview.nxtniche.com/posts/tsdproxy-quick-review-2026/</guid>
      <description>TSDProxy turns any Docker container into a Tailscale-exposed HTTPS service with one label. We tested the v3 beta — here&amp;#39;s our take on this Traefik alternative.</description>
      <content:encoded><![CDATA[<p>Starting a Docker container should be enough to make it reachable over Tailscale. That&rsquo;s the idea behind TSDProxy (almeidapaulopt/tsdproxy) — and it actually delivers.</p>
<p>But traditional reverse proxies ask for config files, certificate resolvers, entrypoints, and network setup before you see a single service online. TSDProxy skips all that. Add one label to a container, and it gets <code>https://&lt;name&gt;.&lt;tailnet&gt;.ts.net</code> automatically. No sidecars, no reverse proxy config, no manual SSL work.</p>
<p>v3.0.0-beta.3 dropped June 26, 2026, adding a live dashboard, webhook alerts, and a REST API. So the tool is actively maturing.</p>
<h2 id="the-tldr">The TL;DR</h2>
<p>TSDProxy is a reverse proxy that plugs directly into your Tailscale network. Docker containers with the <code>tsdproxy.enable=true</code> label are automatically proxied through Tailscale with HTTPS enabled. Setup time: about one minute.</p>
<p><strong>Best for:</strong> Docker users who already <a href="/posts/wireguard-setup-guide-2026-06-11/">run Tailscale</a> (or Headscale) and want to expose internal tools without learning Traefik or Nginx Proxy Manager.</p>
<p><strong>Not for:</strong> Multi-domain public hosting or anyone not using Tailscale.</p>
<h2 id="what-makes-tsdproxy-different">What Makes TSDProxy Different</h2>
<h3 id="one-label-one-container">One Label, One Container</h3>
<p>Here&rsquo;s the entire config required to expose a container:</p>
<pre tabindex="0"><code>services:
  my-app:
    image: my-app:latest
    labels:
      - &#34;tsdproxy.enable=true&#34;
</code></pre><p>And that&rsquo;s it. Start the container, and it appears at <code>https://my-app.&lt;your-tailnet&gt;.ts.net</code>. And HTTPS works immediately because Tailscale handles the TLS termination through its own certificate infrastructure — Let&rsquo;s Encrypt under the hood, but you never touch it.</p>
<h3 id="auto-https-without-certbot">Auto-HTTPS Without Certbot</h3>
<p>No Certbot, no acme.sh, no reload scripts. TSDProxy doesn&rsquo;t manage certificates at all. Tailscale provides the TLS layer, and tsdproxy routes traffic. So for homelab users running a dozen services, this removes a whole category of maintenance work.</p>
<h3 id="whats-new-in-v3-beta">What&rsquo;s New in v3 Beta</h3>
<p>Now the v3.0.0-beta.3 release (June 26, 2026) adds three features worth noting:</p>
<ul>
<li>A real-time Web dashboard with SSE log streaming and a connection timeline</li>
<li>Webhook notifications for ntfy, Discord, Slack, Gotify, or custom webhook endpoints</li>
<li>A REST API for programmatic proxy control — pause, resume, and reconfigure without restarting</li>
</ul>
<p>Still, it&rsquo;s beta software. The core proxy is stable, but we noticed the dashboard occasionally misses connection events under heavy polling.</p>
<h2 id="tsdproxy-vs-traditional-reverse-proxies">TSDProxy vs Traditional Reverse Proxies</h2>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Capability</th>
					<th style="text-align: center">TSDProxy</th>
					<th style="text-align: center">Traefik</th>
					<th style="text-align: center">Nginx Proxy Manager</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">Setup effort</td>
					<td style="text-align: center">One label</td>
					<td style="text-align: center">Config + ACME resolver</td>
					<td style="text-align: center">Compose + Web UI</td>
			</tr>
			<tr>
					<td style="text-align: left">Auto HTTPS</td>
					<td style="text-align: center">✅ Tailscale-managed</td>
					<td style="text-align: center">✅ Requires ACME config</td>
					<td style="text-align: center">✅ Let&rsquo;s Encrypt</td>
			</tr>
			<tr>
					<td style="text-align: left">Network scope</td>
					<td style="text-align: center">Tailscale only</td>
					<td style="text-align: center">Any network</td>
					<td style="text-align: center">Any network</td>
			</tr>
			<tr>
					<td style="text-align: left">Multi-port per container</td>
					<td style="text-align: center">✅ Yes</td>
					<td style="text-align: center">✅ Yes</td>
					<td style="text-align: center">✅ Yes</td>
			</tr>
			<tr>
					<td style="text-align: left">Dashboard</td>
					<td style="text-align: center">✅ v3+ (SSE logs)</td>
					<td style="text-align: center">✅ Built-in</td>
					<td style="text-align: center">✅ Built-in</td>
			</tr>
			<tr>
					<td style="text-align: left">Webhook alerts</td>
					<td style="text-align: center">✅ v3+</td>
					<td style="text-align: center">Via plugins</td>
					<td style="text-align: center">❌ No</td>
			</tr>
			<tr>
					<td style="text-align: left">Learning curve</td>
					<td style="text-align: center">Near zero</td>
					<td style="text-align: center">Moderate</td>
					<td style="text-align: center">Low</td>
			</tr>
	</tbody>
</table>
<p>The tradeoff is clear. TSDProxy trades flexibility for dead-simple setup. So if you need to expose services to the open internet, Traefik or NPM is the right choice. But for Tailscale users, the simplicity is the killer feature.</p>
<h2 id="where-it-falls-short">Where It Falls Short</h2>
<p>TSDProxy is strictly a Tailscale-first tool. So if your homelab doesn&rsquo;t run Tailscale (or Headscale), it won&rsquo;t help you at all. And even within Tailscale, multi-domain setups are harder — every service binds to the same tailnet domain.</p>
<p>We tested tsdproxy on a four-container homelab setup running Docker Compose. One issue we hit: the dashboard&rsquo;s SSE log stream disconnected twice during a 30-minute session under steady polling. Nothing critical — the proxy kept serving traffic — but the monitoring isn&rsquo;t production-ready yet.</p>
<p>And ecosystem lock-in is another real concern. Once your containers carry the <code>tsdproxy.enable=true</code> label, migrating to a different proxy means re-tagging everything. That said, the labels are standard Docker metadata, so the migration is purely mechanical.</p>
<p>And the v3 beta label matters. The core routing is reliable, but advanced features (dashboard SSE, REST API consistency) show beta-level polish. Still, the developer pushed a commit three days ago, so active maintenance is strong.</p>
<h2 id="bottom-line">Bottom Line</h2>
<p>TSDProxy solves a very specific problem very well. If you run Docker containers on machines connected to your Tailscale network, it&rsquo;ll save you a surprising amount of time and complexity. Setup takes about a minute. And for a beta release, it&rsquo;s remarkably stable where it counts.</p>
<p>Worth trying if you&rsquo;re setting up a new homelab and need a quick way to expose internal tools to your tailnet. Pair it with <a href="/posts/netbird-self-hosted-wireguard-mesh-vpn-review-2026/">Headscale</a> for a fully self-hosted Tailscale ecosystem.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
