<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Netbird on OHTLY Blog</title>
    <link>https://blog.ohtly.com/tags/netbird/</link>
    <description>Recent content in Netbird on OHTLY Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 26 Jun 2026 19:26:04 +0800</lastBuildDate>
    <atom:link href="https://blog.ohtly.com/tags/netbird/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>iPhone 远程访问内网：NetBird 受阻，回归 WireGuard</title>
      <link>https://blog.ohtly.com/posts/2026-06-26-iphone-vpn-netbird-wireguard/</link>
      <pubDate>Fri, 26 Jun 2026 19:07:25 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-26-iphone-vpn-netbird-wireguard/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;&#xA;  背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;已有 NetBird 自建网络覆盖办公室、家里、云服务器等多个节点，日常用 macOS/Linux 客户端体验很好。现在想让 iPhone 也能访问办公室内网资源（如内部服务、开发环境）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;第一选择netbird&#34;&gt;&#xA;  第一选择：NetBird&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%ac%ac%e4%b8%80%e9%80%89%e6%8b%a9netbird&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 有官方 iOS App，支持自建服务器（Private Setup），配置很简单：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;在管理面板生成 Setup Key&lt;/li&gt;&#xA;&lt;li&gt;iPhone App 输入服务器 URL 和 Key&lt;/li&gt;&#xA;&lt;li&gt;授权 VPN 权限即可&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;遇到的问题&#34;&gt;&#xA;  遇到的问题&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%81%87%e5%88%b0%e7%9a%84%e9%97%ae%e9%a2%98&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;问题一：iOS DNS 限制&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;办公室内网域名走 &lt;code&gt;*.lan&lt;/code&gt; 后缀，由内网 dnsmasq 解析。NetBird 的 Nameserver Group 虽然配置了 &lt;code&gt;lan&lt;/code&gt; 域指向内网 DNS，但 iOS 客户端对自定义 DNS 解析器支持有限——蜂窝网络下根本无法配置 DNS，WiFi 下手动改 DNS 为内网地址后，流量走隧道出去 DNS 查询却不一定走隧道。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;问题二：网络封锁&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在办公室集团 WiFi 下，NetBird 一开始能连通，也能通过 IP 访问内网服务。但几分钟后连接中断，反复重连都失败。切换到 5G 则一切正常。判断是企业 WiFi 的 DPI 检测到 VPN 特征后进行了限流或阻断。&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetBird 子网路由主备配置</title>
      <link>https://blog.ohtly.com/posts/2026-06-24-netbird-backup-route/</link>
      <pubDate>Wed, 24 Jun 2026 10:28:11 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-24-netbird-backup-route/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;&#xA;  背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;自建 NetBird 网络最初只有一个路由 peer（称节点 A），负责将办公子网 &lt;code&gt;192.168.*.*&lt;/code&gt; 暴露给其他 NetBird 节点。单一故障点意味着节点 A 下线后，家庭等远程节点无法访问办公内网。&lt;/p&gt;&#xA;&lt;p&gt;增加第二个路由 peer，实现主备冗余。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新增节点到-netbird&#34;&gt;&#xA;  新增节点到 NetBird&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%96%b0%e5%a2%9e%e8%8a%82%e7%82%b9%e5%88%b0-netbird&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;办公室有另一台 Mac Mini（称为节点 B），加入 NetBird 网络：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;netbird up --management-url https://netbird-api.域名 --setup-key &amp;lt;setup-key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加入后获取 NetBird IP（&lt;code&gt;100.x.x.x/16&lt;/code&gt;），所有 peer 自动连通。&lt;/p&gt;&#xA;&lt;h2 id=&#34;开启-ip-转发&#34;&gt;&#xA;  开启 IP 转发&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%bc%80%e5%90%af-ip-%e8%bd%ac%e5%8f%91&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 路由 peer 需要转发子网流量。macOS 默认关闭 IP 转发：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo sysctl -w net.inet.ip.forwarding&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net.inet.ip.forwarding=1&amp;#34;&lt;/span&gt; | sudo tee -a /etc/sysctl.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;即时生效并持久化。&lt;/p&gt;&#xA;&lt;h2 id=&#34;创建备份路由&#34;&gt;&#xA;  创建备份路由&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%88%9b%e5%bb%ba%e5%a4%87%e4%bb%bd%e8%b7%af%e7%94%b1&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;通过 NetBird Route API 添加第二条路由，关键参数是 &lt;code&gt;metric&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetBird 客户端自动重连的 systemd 实现</title>
      <link>https://blog.ohtly.com/posts/2026-06-23-netbird-watchdog/</link>
      <pubDate>Tue, 23 Jun 2026 22:29:46 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-23-netbird-watchdog/</guid>
      <description>&lt;p&gt;NetBird 客户端运行中偶遇 management server 不稳定时会断开连接，且不会自动恢复。需要手动 &lt;code&gt;netbird down &amp;amp;&amp;amp; netbird up&lt;/code&gt; 才能重连。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题特征&#34;&gt;&#xA;  问题特征&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%97%ae%e9%a2%98%e7%89%b9%e5%be%81&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;日志如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;WARN management/client/grpc.go: job stream disconnected, will retry silently.&#xA;  Reason: unexpected HTTP status code received from server: 504 (Gateway Timeout)&#xA;ERRO management/client/grpc.go: stream receive error&#xA;INFO engine.go: stopped Netbird Engine&#xA;INFO server.go: service is down&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;daemon 进程存活，但内部引擎已永久退出。只有手动重连才能恢复。&lt;/p&gt;&#xA;&lt;h2 id=&#34;原因&#34;&gt;&#xA;  原因&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%8e%9f%e5%9b%a0&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 客户端内部有一个 backoff 重试循环：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 简化示意&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;backoff&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Retry&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;connect&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ctx&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}, &lt;span style=&#34;color:#a6e22e&#34;&gt;backOff&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重试耗尽后 &lt;code&gt;giveUpChan&lt;/code&gt; 关闭，引擎永久退出。此后即使网络恢复，客户端也不会再次尝试连接。&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetBird 子网路由与 Access Policy 配置</title>
      <link>https://blog.ohtly.com/posts/2026-06-23-netbird-route-policy/</link>
      <pubDate>Tue, 23 Jun 2026 18:25:39 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-23-netbird-route-policy/</guid>
      <description>&lt;h2 id=&#34;场景&#34;&gt;&#xA;  场景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%9c%ba%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;办公室有大量 VM（host-a、host-b、host-c 等），它们无法或不适合安装 NetBird agent。家里的笔记本需要能直接通过这些机器的 LAN IP 访问（RustDesk、SSH 等），而不能逐个安装 agent。&lt;/p&gt;&#xA;&lt;h2 id=&#34;方案路由-peer&#34;&gt;&#xA;  方案：路由 peer&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%96%b9%e6%a1%88%e8%b7%af%e7%94%b1-peer&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 的 &lt;strong&gt;Network Route&lt;/strong&gt; 功能允许将整个子网通过一个路由 peer 暴露给 VPN 网络。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;家里笔记本 ── NetBird 隧道 ── gateway(路由 peer) ── 办公室 LAN 192.168.0.0/24&#xA;                                                    ├── host-a      (192.168.0.*)&#xA;                                                    ├── host-c      (192.168.0.*)&#xA;                                                    └── 其他无 agent 节点&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;路由 peer（gateway）对流量做 &lt;strong&gt;Masquerade（NAT）&lt;/strong&gt;，将来自 NetBird 的包源 IP 替换为自己的 LAN IP，这样目标机器的回包就能正确路由回来。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前置条件&#34;&gt;&#xA;  前置条件&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%89%8d%e7%bd%ae%e6%9d%a1%e4%bb%b6&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;路由 peer 需要开启 IP 转发：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net.ipv4.ip_forward=1&amp;#34;&lt;/span&gt; | sudo tee /etc/sysctl.d/99-netbird-forward.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo sysctl -p /etc/sysctl.d/99-netbird-forward.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;第一步创建-network-route&#34;&gt;&#xA;  第一步：创建 Network Route&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%ac%ac%e4%b8%80%e6%ad%a5%e5%88%9b%e5%bb%ba-network-route&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source .env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://your-management/api/routes&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Token &lt;/span&gt;$NETBIRD_PAT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;description&amp;#34;: &amp;#34;Office LAN&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;network_id&amp;#34;: &amp;#34;office-lan&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;enabled&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;peer&amp;#34;: &amp;#34;&amp;lt;gateway_peer_id&amp;gt;&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;network&amp;#34;: &amp;#34;192.168.0.0/24&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;metric&amp;#34;: 100,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;masquerade&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;groups&amp;#34;: [&amp;#34;&amp;lt;all_group_id&amp;gt;&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  }&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关键参数：&lt;/p&gt;</description>
    </item>
    <item>
      <title>怎么设置 NetBird 网络的 DNS</title>
      <link>https://blog.ohtly.com/posts/2026-06-23-netbird-dns-setup/</link>
      <pubDate>Tue, 23 Jun 2026 15:31:05 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-23-netbird-dns-setup/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;&#xA;  背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;自建 NetBird 控制平面后，节点间可以通过 &lt;code&gt;*.netbird.selfhosted&lt;/code&gt; 域名互相访问。但实际部署中发现 DNS 表现因节点环境而异，部分节点需要额外配置才能正常工作。&lt;/p&gt;&#xA;&lt;h2 id=&#34;netbird-dns-的三层结构&#34;&gt;&#xA;  NetBird DNS 的三层结构&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#netbird-dns-%e7%9a%84%e4%b8%89%e5%b1%82%e7%bb%93%e6%9e%84&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 的 DNS 由三层组成：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;应用 → 系统解析器 → NetBird magic DNS (100.121.255.254)&#xA;                         ├── peer 域名 (peer-a.netbird.selfhosted → 100.121.*)&#xA;                         ├── Nameserver Group (*.lan → 100.121.*.*:53 dnsmasq)&#xA;                         └── 普通域名 → 上游 DNS&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其中 &lt;code&gt;100.121.255.254&lt;/code&gt; 是 NetBird 的 magic DNS 地址（类似 Tailscale 的 &lt;code&gt;100.100.100.100&lt;/code&gt;），负责按域名规则路由查询。&lt;/p&gt;&#xA;&lt;h2 id=&#34;场景一macos&#34;&gt;&#xA;  场景一：macOS&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%9c%ba%e6%99%af%e4%b8%80macos&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在 macOS 上 NetBird 通过系统框架（&lt;code&gt;scutil&lt;/code&gt;）自动注册 DNS。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自定义别名查看 NetBird 所有节点信息</title>
      <link>https://blog.ohtly.com/posts/2026-06-23-netbird-nb-list/</link>
      <pubDate>Tue, 23 Jun 2026 11:46:20 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-23-netbird-nb-list/</guid>
      <description>&lt;h2 id=&#34;对比&#34;&gt;&#xA;  对比&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%af%b9%e6%af%94&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 和 Tailscale 都是 mesh VPN，但 CLI 体验有个明显差距：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;操作&lt;/th&gt;&#xA;          &lt;th&gt;Tailscale&lt;/th&gt;&#xA;          &lt;th&gt;NetBird&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;查看节点列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;tailscale status&lt;/code&gt; — 简洁表格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;netbird status&lt;/code&gt; — 只显示本机状态&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;查看详情&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;tailscale status --json&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;netbird status --detail&lt;/code&gt; — 散文体&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;code&gt;tailscale status&lt;/code&gt; 输出是这样的：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;100.121.*.*  peer-a     linux   -&#xA;100.121.*.*  server     linux   -&#xA;100.121.*.*  laptop     macOS   -&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而 &lt;code&gt;netbird status --detail&lt;/code&gt; 的节点信息散布在两处：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Peers detail 区块：每个对端分多行（FQDN、IP、Status）&lt;/li&gt;&#xA;&lt;li&gt;Summary 区块：本地节点的 FQDN 和 IP 在底部&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;解析思路&#34;&gt;&#xA;  解析思路&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%a7%a3%e6%9e%90%e6%80%9d%e8%b7%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;以 Peers detail 中的一段为例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetBird 自托管 IDP 密码重置</title>
      <link>https://blog.ohtly.com/posts/2026-06-23-netbird-idp-password-reset/</link>
      <pubDate>Tue, 23 Jun 2026 11:27:19 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-23-netbird-idp-password-reset/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;&#xA;  背景&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%83%8c%e6%99%af&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 自托管控制平面使用内置 Dex 作为 OIDC Provider。管理员账号在首次部署时通过 config.yaml 的 &lt;code&gt;owner&lt;/code&gt; 字段创建，密码以 bcrypt 哈希存储。&lt;/p&gt;&#xA;&lt;p&gt;长时间没有登录 Dashboard，密码遗忘了。Dashboard 没有提供密码重置功能，需要直接操作数据库恢复。&lt;/p&gt;&#xA;&lt;h2 id=&#34;架构&#34;&gt;&#xA;  架构&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9e%b6%e6%9e%84&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NetBird 的认证数据分两处存放：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;位置&lt;/th&gt;&#xA;          &lt;th&gt;文件&lt;/th&gt;&#xA;          &lt;th&gt;作用&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;配置&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;config.yaml&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;server 启动时读取 &lt;code&gt;owner.password&lt;/code&gt;，同步到数据库&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;数据库&lt;/td&gt;&#xA;          &lt;td&gt;Docker volume &lt;code&gt;idp.db&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Dex 运行时读写的 &lt;code&gt;password&lt;/code&gt; 表&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Dex 的 &lt;code&gt;password&lt;/code&gt; 表结构：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;email         - 登录邮箱&#xA;hash          - bcrypt(password)&#xA;username      - 用户名&#xA;user_id       - UUID&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;直接改数据库不行&#34;&gt;&#xA;  直接改数据库？不行&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e7%9b%b4%e6%8e%a5%e6%94%b9%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%8d%e8%a1%8c&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;第一个尝试是直接用 Python 更新 idp.db 的 password 表：&lt;/p&gt;</description>
    </item>
    <item>
      <title>自建 NetBird 控制平面记录</title>
      <link>https://blog.ohtly.com/posts/2026-06-18-netbird-selfhosted/</link>
      <pubDate>Thu, 18 Jun 2026 21:41:45 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-18-netbird-selfhosted/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;&#xA;  概述&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%a6%82%e8%bf%b0&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;用 NetBird 自建控制平面，替换现有的 WireGuard VPN 手动组网。控制平面部署在云服务器上，所有节点通过 P2P WireGuard 隧道互联。&lt;/p&gt;&#xA;&lt;h2 id=&#34;步骤&#34;&gt;&#xA;  步骤&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%ad%a5%e9%aa%a4&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-traefik-v2--v3-升级&#34;&gt;&#xA;  1. Traefik v2 → v3 升级&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-traefik-v2--v3-%e5%8d%87%e7%ba%a7&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;现有 Traefik 版本是 v2.10.7，先升级到 v3.7.5 为后续路由做准备。&lt;/p&gt;&#xA;&lt;p&gt;兼容性分析：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;文件配置文件（File provider）的 YAML 语法完全兼容，无需改动&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--serversTransport.insecureSkipVerify&lt;/code&gt; CLI 参数名不变&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ipwhitelist&lt;/code&gt; 中间件重命名为 &lt;code&gt;ipAllowList&lt;/code&gt;，在 v3 中需要手动迁移&lt;/li&gt;&#xA;&lt;li&gt;升级时需要加 &lt;code&gt;--core.defaultrulesyntax=v2&lt;/code&gt; 保持路由语法兼容，确认稳定后移除&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;升级步骤：只需改 Docker Compose 的 image tag，重启即可。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-netbird-控制平面部署&#34;&gt;&#xA;  2. NetBird 控制平面部署&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#2-netbird-%e6%8e%a7%e5%88%b6%e5%b9%b3%e9%9d%a2%e9%83%a8%e7%bd%b2&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;控制平面用 Docker Compose 部署，使用 NetBird v0.65+ 的&lt;strong&gt;合并容器架构&lt;/strong&gt;，不再需要分开的 management/signal/relay/coturn 四个容器。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
