<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nginx on Heai Blog</title><link>https://blog.xheai.com/tags/nginx/</link><description>Recent content in Nginx on Heai Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 20 Sep 2026 10:01:51 +0800</lastBuildDate><atom:link href="https://blog.xheai.com/tags/nginx/index.xml" rel="self" type="application/rss+xml"/><item><title>ztnet 内网 DNS 服务搭建</title><link>https://blog.xheai.com/posts/ztnet-dns/</link><pubDate>Sun, 20 Sep 2026 10:01:51 +0800</pubDate><guid>https://blog.xheai.com/posts/ztnet-dns/</guid><description>&lt;h2 id="背景"&gt;&lt;a href="#%e8%83%8c%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;背景&#10;&lt;/h2&gt;&lt;h3 id="zerotier-网络结构"&gt;&lt;a href="#zerotier-%e7%bd%91%e7%bb%9c%e7%bb%93%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;ZeroTier 网络结构&#10;&lt;/h3&gt;&lt;p&gt;使用网段 &lt;code&gt;172.30.0.0/22&lt;/code&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;设备&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;IP&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;备注&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;家宽路由器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.1.1&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OpenWRT，动态公网 IP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;台式机&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.1.2&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;笔记本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.1.3&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;手机&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.1.4&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Android&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;云服务器1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.2.1&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Debian，固定公网 IP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;物理服务器1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.2.2&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Debian，位于路由器下子网&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;物理服务器2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.2.3&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Debian，位于路由器下子网&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;云服务器2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.3.1&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Debian，海外，固定公网 IP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;云服务器3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;172.30.3.2&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Debian，海外，固定公网 IP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;由于 ZeroTier Moon 自定义中继节点需要固定公网 IP，因此将云服务器1配置为 Moon 节点，同时在其上部署了自建控制器 ztnet&lt;/p&gt;&#10;&lt;h3 id="需求"&gt;&lt;a href="#%e9%9c%80%e6%b1%82" class="header-anchor"&gt;&lt;/a&gt;需求&#10;&lt;/h3&gt;&lt;p&gt;各服务器上的各端口部署了多种 Web 服务，如 ztnet 控制器监听 &lt;code&gt;172.30.2.1:3000&lt;/code&gt;、&lt;code&gt;172.30.2.3:3000&lt;/code&gt; 部署了 New API、&lt;code&gt;172.30.2.3:12345&lt;/code&gt; 部署了一个 HTTP 语音合成 API 服务等，各 IP、端口不便记忆，在各个设备上配置 hosts 文件也不便利&lt;/p&gt;&#10;&lt;p&gt;ZeroTier 提供了一个将特定 Search Domain 后缀的 DNS 请求转发到指定 DNS 服务器的功能，因此可集中式地管理配置一个内网 DNS 服务，再由一个集中的 Nginx 反向代理根据不同的域名转发到不同的 IP:端口&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;本人网络中主要的数据交互集中于家宽子网下的两台物理服务器，因此选择使用一个集中的 Nginx 反代服务以方便配置；对于这一绕行延迟不可接受的场景，可考虑在 dnsmasq 做域名的具体解析，并在各节点分别部署反代&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="配置"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;配置&#10;&lt;/h2&gt;&lt;h3 id="控制器"&gt;&lt;a href="#%e6%8e%a7%e5%88%b6%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;控制器&#10;&lt;/h3&gt;&lt;p&gt;使用 .internal 后缀作为内网 DNS 所用域名&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;，指定将它的 DNS 请求转发到 &lt;code&gt;172.30.1.1&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="921px" data-flex-grow="383" height="513" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.xheai.com/posts/ztnet-dns/1.png" srcset="https://blog.xheai.com/posts/ztnet-dns/1_hu_ea91253ed322e6ae.png 800w, https://blog.xheai.com/posts/ztnet-dns/1_hu_ba5252d92f71ade1.png 1600w, https://blog.xheai.com/posts/ztnet-dns/1.png 1969w" width="1969"&gt;&lt;/p&gt;&#10;&lt;h3 id="dns-服务路由器"&gt;&lt;a href="#dns-%e6%9c%8d%e5%8a%a1%e8%b7%af%e7%94%b1%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;DNS 服务（路由器）&#10;&lt;/h3&gt;&lt;p&gt;路由器本身自带 dnsmasq 服务，因此只需让来自 ZeroTier 网络的 DNS 请求能被它接收即可&lt;/p&gt;&#10;&lt;p&gt;配置防火墙，允许接受来自 vpn 接口的 ZeroTier 网络流量&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="821px" data-flex-grow="342" height="616" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.xheai.com/posts/ztnet-dns/2.png" srcset="https://blog.xheai.com/posts/ztnet-dns/2_hu_abbb2462a0652134.png 800w, https://blog.xheai.com/posts/ztnet-dns/2_hu_db5ab75de4e30f6f.png 1600w, https://blog.xheai.com/posts/ztnet-dns/2.png 2108w" width="2108"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用 dnsmasq 的泛域名解析功能，将 .internal 后缀的域名均解析到 &lt;code&gt;172.30.2.2&lt;/code&gt;（Nginx 反代服务的部署位置）&lt;/p&gt;&#10;&lt;img src="3.png" style="width: 50%; display: block; margin: 0 auto;" /&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;对于非 http 服务，不适合使用 Nginx 反代，可在路由器上直接配置 dnsmasq 的 域名-IP 解析映射&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="各设备"&gt;&lt;a href="#%e5%90%84%e8%ae%be%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;各设备&#10;&lt;/h3&gt;&lt;p&gt;ZeroTier 客户端出于安全原因默认不接受控制器下发的 DNS，需要在各设备上手动操作允许&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zerotier-cli &lt;span style="color:#89dceb"&gt;set&lt;/span&gt; &amp;lt;NetworkID&amp;gt; &lt;span style="color:#f5e0dc"&gt;allowDNS&lt;/span&gt;&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#fab387"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="nginx-反代"&gt;&lt;a href="#nginx-%e5%8f%8d%e4%bb%a3" class="header-anchor"&gt;&lt;/a&gt;Nginx 反代&#10;&lt;/h3&gt;&lt;p&gt;创建新 Nginx 配置文件 &lt;code&gt;/etc/nginx/sites-available/proxy&lt;/code&gt;，部分内容如下，&lt;code&gt;proxy_params&lt;/code&gt; 为默认反向代理参数配置文件，位于 &lt;code&gt;/etc/nginx/proxy_params&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;12&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;13&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;14&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;15&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;16&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;17&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;18&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;19&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;20&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;21&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;22&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;23&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;24&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;25&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Nginx" data-lang="Nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cba6f7"&gt;server&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;listen&lt;/span&gt; &lt;span style="color:#fab387"&gt;80&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;server_name&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;ztnet.internal&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;location&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;/&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;proxy_pass&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;http://172.30.2.1:3000&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;include&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;proxy_params&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cba6f7"&gt;server&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;listen&lt;/span&gt; &lt;span style="color:#fab387"&gt;80&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;server_name&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;llmapi.internal&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;location&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;/&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;proxy_pass&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;http://172.30.2.3:3000&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;include&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;proxy_params&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cba6f7"&gt;server&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;listen&lt;/span&gt; &lt;span style="color:#fab387"&gt;80&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;default_server&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;server_name&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;_&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#94e2d5"&gt;return&lt;/span&gt; &lt;span style="color:#fab387"&gt;444&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;将配置文件软链接到 &lt;code&gt;/etc/nginx/sites-enabled/proxy&lt;/code&gt;，并重载 Nginx 服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s /etc/nginx/sites-available/proxy /etc/nginx/sites-enabled/proxy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl reload nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="测试及问题"&gt;&lt;a href="#%e6%b5%8b%e8%af%95%e5%8f%8a%e9%97%ae%e9%a2%98" class="header-anchor"&gt;&lt;/a&gt;测试及问题&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;访问任何域名均返回 503 Service Unavailable，Nginx 日志无内容，发现为 .internal 域名默认被本地代理软件代理，需手动配置路由 internal -&amp;gt; direct&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;ztnet.internal&lt;/code&gt; 访问正常但无法登录，因其使用的 NextAuth 框架有严格的域名限制，需在其 docker-compose.yml 配置中将 NEXTAUTH_URL 字段修改为 &lt;code&gt;http://ztnet.internal&lt;/code&gt;，并重启 ztnet 容器&lt;/li&gt;&#10;&lt;li&gt;在 Linux 设备上，ZeroTier 客户端不会自动注入 DNS，需要手动配置（而本人网络中两台 Linux 物理服务器恰好位于路由器子网中，本身就使用它的 DNS，无需配置也可正常访问）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;resolvectl dns &amp;lt;ZeroTier 虚拟网卡名&amp;gt; 172.30.1.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;resolvectl domain &amp;lt;ZeroTier 虚拟网卡名&amp;gt; &lt;span style="color:#a6e3a1"&gt;&amp;#34;~internal&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="356px" data-flex-grow="148" height="1695" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.xheai.com/posts/ztnet-dns/4.png" srcset="https://blog.xheai.com/posts/ztnet-dns/4_hu_fa04d65463666314.png 800w, https://blog.xheai.com/posts/ztnet-dns/4_hu_94741a577fc3c298.png 1600w, https://blog.xheai.com/posts/ztnet-dns/4_hu_3150c818961dad69.png 2400w, https://blog.xheai.com/posts/ztnet-dns/4.png 2521w" width="2521"&gt;&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.icann.org/en/board-activities-and-meetings/materials/approved-resolutions-special-meeting-of-the-icann-board-29-07-2024-en#section2.a" target="_blank" rel="noopener"&#10; &gt;https://www.icann.org/en/board-activities-and-meetings/materials/approved-resolutions-special-meeting-of-the-icann-board-29-07-2024-en#section2.a&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>