<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tunnels on homelab</title>
    <link>https://homelab.nbkelley.com/tags/tunnels/</link>
    <description>Recent content in Tunnels on homelab</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://homelab.nbkelley.com/tags/tunnels/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Proxy Management &amp; Cloudflare Tunnels</title>
      <link>https://homelab.nbkelley.com/docs/networking/proxy-management/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/networking/proxy-management/</guid>
      <description>&lt;h1 id=&#34;proxy-management--cloudflare-tunnels&#34;&gt;Proxy Management &amp;amp; Cloudflare Tunnels&lt;a class=&#34;anchor&#34; href=&#34;#proxy-management--cloudflare-tunnels&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are multiple layers of proxying available in the homelab, ranging from edge protection (Cloudflare) to local routing (OPNsense/Nginx Proxy Manager).&lt;/p&gt;&#xA;&lt;h2 id=&#34;nginx-proxy-manager-npm-troubleshooting&#34;&gt;Nginx Proxy Manager (NPM) Troubleshooting&lt;a class=&#34;anchor&#34; href=&#34;#nginx-proxy-manager-npm-troubleshooting&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Redirect Loops &amp;amp; Timeouts&lt;/strong&gt;: Often caused by misconfigured upstream servers or aggressive timeout settings in NPM&amp;rsquo;s web UI. Resolving a redirect loop may expose underlying connectivity issues that manifest as timeouts.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Docker Compose Pattern&lt;/strong&gt;: NPM is deployed with &lt;code&gt;network_mode: host&lt;/code&gt; to bind directly to host ports (80, 443, 81), bypassing Docker&amp;rsquo;s NAT for direct host network access.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Verification Steps&lt;/strong&gt;:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Check container health: &lt;code&gt;docker ps | grep nginx-proxy-manager&lt;/code&gt; (ensure &lt;code&gt;healthy&lt;/code&gt; status).&lt;/li&gt;&#xA;&lt;li&gt;Verify port bindings: &lt;code&gt;sudo netstat -tulpn | grep :80&lt;/code&gt; / &lt;code&gt;:443&lt;/code&gt; (requires &lt;code&gt;net-tools&lt;/code&gt; package).&lt;/li&gt;&#xA;&lt;li&gt;Inspect NPM Web UI: Access at &lt;code&gt;http://&amp;lt;host-ip&amp;gt;:81&lt;/code&gt; to review Proxy Host settings, specifically timeout values and upstream server addresses.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Port Conflicts&lt;/strong&gt;: Use &lt;code&gt;netstat&lt;/code&gt; to identify which container owns a specific port (e.g., &lt;code&gt;docker-proxy&lt;/code&gt; vs &lt;code&gt;nginx: master&lt;/code&gt;). In this setup, port 8000 was observed bound to &lt;code&gt;docker-proxy&lt;/code&gt;, indicating another service in the compose stack.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Co-located Services&lt;/strong&gt;: The same Docker Compose stack hosts &lt;code&gt;cloudflare-ddns&lt;/code&gt; (for dynamic IP updates) and &lt;code&gt;netbird&lt;/code&gt; (for mesh networking), requiring careful port management to avoid conflicts.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;key-decisions&#34;&gt;Key Decisions&lt;a class=&#34;anchor&#34; href=&#34;#key-decisions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use &lt;code&gt;network_mode: host&lt;/code&gt; for NPM to simplify port mapping and ensure direct access to host network interfaces.&lt;/li&gt;&#xA;&lt;li&gt;Rely on &lt;code&gt;net-tools&lt;/code&gt; (&lt;code&gt;netstat&lt;/code&gt;) for quick port binding verification in host-networked Docker containers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-configuration&#34;&gt;Current Configuration&lt;a class=&#34;anchor&#34; href=&#34;#current-configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Docker Host&lt;/strong&gt;: &lt;code&gt;iluvatar@proxy&lt;/code&gt; (192.168.1.208)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NPM Web UI&lt;/strong&gt;: &lt;code&gt;http://192.168.1.208:81&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ports&lt;/strong&gt;: 80 (HTTP), 443 (HTTPS), 81 (NPM Admin UI)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;historical-notes&#34;&gt;Historical Notes&lt;a class=&#34;anchor&#34; href=&#34;#historical-notes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Troubleshooting session from 2025-11-17 resolved a redirect loop that subsequently turned into a timeout issue.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;net-tools&lt;/code&gt; installation was required to diagnose port bindings on the host.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;open-questions&#34;&gt;Open Questions&lt;a class=&#34;anchor&#34; href=&#34;#open-questions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Specific timeout values configured in NPM for upstream services.&lt;/li&gt;&#xA;&lt;li&gt;Whether &lt;code&gt;netbird&lt;/code&gt; or &lt;code&gt;cloudflare-ddns&lt;/code&gt; requires dedicated port exposure or can share the host network.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-pages&#34;&gt;Related Pages&lt;a class=&#34;anchor&#34; href=&#34;#related-pages&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/security/cloudflare_integration/&#34;&gt;Cloudflare Integration: SSL &amp;amp; DNS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/networking/opnsense_dmz_iot_firewall/&#34;&gt;OPNsense DMZ Firewall Rules for IoT&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Docker Host Configuration&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/services/uptime-kuma/&#34;&gt;Uptime Kuma - Configuration &amp;amp; Integrations&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
