<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sd-Wan on HiDa</title><link>https://www.0niu.cn/tags/sd-wan/</link><description>Recent content in Sd-Wan on HiDa</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 22 Apr 2026 10:42:28 +0800</lastBuildDate><atom:link href="https://www.0niu.cn/tags/sd-wan/index.xml" rel="self" type="application/rss+xml"/><item><title>在VyOS上运行ZeroTier实现站点间组网</title><link>https://www.0niu.cn/posts/vyos-zerotier-site-to-site/</link><pubDate>Wed, 22 Apr 2026 10:42:28 +0800</pubDate><guid>https://www.0niu.cn/posts/vyos-zerotier-site-to-site/</guid><description>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>VyOS 是一个开源的路由器操作系统，ZeroTier 则是一个易于使用的 SD-WAN 方案。将两者结合，可以用 VyOS 作为各站点的网关设备，通过 ZeroTier 组建虚拟网络，实现站点间的安全通信。&lt;/p>
&lt;p>相比传统的 IPsec VPN 或 BGP over WireGuard 方案，ZeroTier 的优势在于：无需公网 IP、无需手动配置隧道对端、通过 Central 控制台统一管理路由。适合中小规模的多站点部署。&lt;/p></description><content>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>VyOS 是一个开源的路由器操作系统，ZeroTier 则是一个易于使用的 SD-WAN 方案。将两者结合，可以用 VyOS 作为各站点的网关设备，通过 ZeroTier 组建虚拟网络，实现站点间的安全通信。&lt;/p>
&lt;p>相比传统的 IPsec VPN 或 BGP over WireGuard 方案，ZeroTier 的优势在于：无需公网 IP、无需手动配置隧道对端、通过 Central 控制台统一管理路由。适合中小规模的多站点部署。&lt;/p>
&lt;p>本文基于 VyOS 1.4（Rolling Release）和 ZeroTier 官方 Docker 镜像，演示从容器部署到路由配置的完整流程。&lt;/p>
&lt;h2 id="网络拓扑">网络拓扑&lt;/h2>
&lt;p>假设有 3 个站点，每个站点一台 VyOS 路由器，通过 ZeroTier 组网：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Site 1&lt;/strong>：RTR1，本地子网 10.1.0.0/24&lt;/li>
&lt;li>&lt;strong>Site 2&lt;/strong>：RTR2，本地子网 10.2.0.0/24&lt;/li>
&lt;li>&lt;strong>Site 3&lt;/strong>：RTR3，本地子网 10.3.0.0/24&lt;/li>
&lt;/ul>
&lt;p>ZeroTier 虚拟网络分配 10.13.0.0/16，每个节点通过 ZeroTier 自动分配一个 IP。&lt;/p>
&lt;h2 id="基础网络配置">基础网络配置&lt;/h2>
&lt;p>确保每台 VyOS 有互联网连接和 DNS 解析：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>configure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set interfaces ethernet eth0 address dhcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set system name-server 223.5.5.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>commit
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>save
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>验证连通性：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>ping 223.5.5.5 count 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="部署-zerotier-容器">部署 ZeroTier 容器&lt;/h2>
&lt;p>VyOS 1.4 原生支持容器管理，我们使用 ZeroTier 官方 Docker 镜像。&lt;/p>
&lt;h3 id="1-拉取镜像">1. 拉取镜像&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>add container image zerotier/zerotier:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>VyOS 1.4 下载镜像时没有进度条，静默等待即可。用以下命令确认：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>show container image
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-创建持久化目录">2. 创建持久化目录&lt;/h3>
&lt;p>将 ZeroTier 数据目录映射到 /config/ 下，确保重启后配置不丢失：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>sudo mkdir -p /config/containers/zt1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-配置容器">3. 配置容器&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>configure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 allow&lt;span style="color:#f92672">-&lt;/span>host&lt;span style="color:#f92672">-&lt;/span>networks
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 cap&lt;span style="color:#f92672">-&lt;/span>add net&lt;span style="color:#f92672">-&lt;/span>admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 device tun destination &lt;span style="color:#f92672">/&lt;/span>dev&lt;span style="color:#f92672">/&lt;/span>net&lt;span style="color:#f92672">/&lt;/span>tun
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 device tun source &lt;span style="color:#f92672">/&lt;/span>dev&lt;span style="color:#f92672">/&lt;/span>net&lt;span style="color:#f92672">/&lt;/span>tun
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 image zerotier&lt;span style="color:#f92672">/&lt;/span>zerotier:latest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 volume ZT_Path destination &lt;span style="color:#f92672">/&lt;/span>&lt;span style="color:#66d9ef">var&lt;/span>&lt;span style="color:#f92672">/&lt;/span>lib&lt;span style="color:#f92672">/&lt;/span>zerotier&lt;span style="color:#f92672">-&lt;/span>one
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set container name zt1 volume ZT_Path source &lt;span style="color:#f92672">/&lt;/span>config&lt;span style="color:#f92672">/&lt;/span>containers&lt;span style="color:#f92672">/&lt;/span>zt1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>commit
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>save
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>关键参数说明：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>allow-host-networks&lt;/strong>：容器共享宿主网络栈，ZeroTier 创建的接口直接出现在 VyOS 上&lt;/li>
&lt;li>&lt;strong>cap-add net-admin&lt;/strong>：授予容器网络管理权限，允许创建虚拟网卡&lt;/li>
&lt;li>&lt;strong>device tun&lt;/strong>：将宿主的 TUN 设备映射进容器&lt;/li>
&lt;li>&lt;strong>volume ZT_Path&lt;/strong>：持久化 ZeroTier 的身份文件和配置&lt;/li>
&lt;/ul>
&lt;p>验证容器状态：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>show container
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="映射-zerotier-接口">映射 ZeroTier 接口&lt;/h2>
&lt;p>通过 devicemap 文件将 ZeroTier 网络映射为指定的以太网接口（如 zt0），便于后续配置防火墙策略：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>sudo su
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd /config/containers/zt1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cat &amp;gt; devicemap &amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;NetworkID&amp;gt;=zt0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>EOF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exit
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>将 &lt;code>&amp;lt;NetworkID&amp;gt;&lt;/code> 替换为你在 ZeroTier Central 创建的网络 ID。然后重启容器使映射生效：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>restart container zt1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="加入-zerotier-网络">加入 ZeroTier 网络&lt;/h2>
&lt;p>进入容器，执行 join 命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>connect container zt1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>zerotier-cli join &amp;lt;NetworkID&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exit
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>返回 &lt;code>200 join OK&lt;/code> 表示加入成功。记录下 &lt;code>zerotier-cli info&lt;/code> 输出的 Node ID。&lt;/p>
&lt;h2 id="在-central-中授权节点">在 Central 中授权节点&lt;/h2>
&lt;p>登录 ZeroTier Central，在对应网络中：&lt;/p>
&lt;ol>
&lt;li>找到新加入的节点，将 Node ID 与各路由器对上&lt;/li>
&lt;li>勾选 Auth 列的复选框授权&lt;/li>
&lt;li>可选：为每个节点设置名称便于识别&lt;/li>
&lt;/ol>
&lt;p>授权后，在 VyOS 上确认接口已获取 IP：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>show interfaces ethernet zt0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>应能看到 ZeroTier 分配的 IP（如 10.13.x.x/16）。&lt;/p>
&lt;h2 id="配置路由">配置路由&lt;/h2>
&lt;h3 id="方法一通过-zerotier-central-推送路由推荐">方法一：通过 ZeroTier Central 推送路由（推荐）&lt;/h3>
&lt;p>在 ZeroTier Central 的 &lt;strong>Managed Routes&lt;/strong> 中添加各站点路由：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>目标网段&lt;/th>
&lt;th>Via（节点 IP）&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>10.1.0.0/24&lt;/td>
&lt;td>10.13.x.1（RTR1）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10.2.0.0/24&lt;/td>
&lt;td>10.13.x.2（RTR2）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10.3.0.0/24&lt;/td>
&lt;td>10.13.x.3（RTR3）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>路由会自动下发到所有节点。ZeroTier 将路由 metric 设为 5000，不会覆盖本地更优先的路由。&lt;/p>
&lt;h3 id="方法二在-vyos-上配置静态路由">方法二：在 VyOS 上配置静态路由&lt;/h3>
&lt;p>如果不想依赖 Central 推送，也可以手动在 VyOS 上配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>configure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># RTR1 上
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set protocols static route 10.2.0.0/24 next-hop 10.13.x.2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>set protocols static route 10.3.0.0/24 next-hop 10.13.x.3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>commit
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>save
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="验证连通性">验证连通性&lt;/h2>
&lt;p>查看路由表确认路由已下发：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>show ip route
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>从 RTR1 ping 其他站点：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>ping 10.2.0.1 source-address 10.1.0.1 count 2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ping 10.3.0.1 source-address 10.1.0.1 count 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="注意事项">注意事项&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Managed Routes 上限&lt;/strong>：ZeroTier Central 限制每个网络最多 128 条托管路由&lt;/li>
&lt;li>&lt;strong>路由优先级&lt;/strong>：ZeroTier 推送的路由 metric 为 5000，本地静态路由默认 metric 20，后者优先&lt;/li>
&lt;li>&lt;strong>MTU&lt;/strong>：ZeroTier 虚拟接口 MTU 通常为 2800（内部会自动分片），一般无需调整&lt;/li>
&lt;li>&lt;strong>持久化&lt;/strong>：/config/ 下的文件在 save 和重启后会保留，容器数据和 devicemap 都在其中&lt;/li>
&lt;li>&lt;strong>容器自动启动&lt;/strong>：配置 set container name zt1 后，VyOS 重启会自动启动容器&lt;/li>
&lt;/ul>
&lt;h2 id="扩展大规模部署">扩展：大规模部署&lt;/h2>
&lt;p>如果站点数量超过 127 个（128 条路由减去默认路由），或者需要多租户隔离，可以考虑：&lt;/p>
&lt;ul>
&lt;li>使用 BGP over ZeroTier 替代托管路由，实现更灵活的路由策略&lt;/li>
&lt;li>结合 MPLS 实现多租户场景&lt;/li>
&lt;li>自建 ZeroTier Planet/Moon 控制器，脱离 Central 的托管路由限制&lt;/li>
&lt;/ul>
&lt;h2 id="总结">总结&lt;/h2>
&lt;p>在 VyOS 上通过容器运行 ZeroTier 是一种轻量且易维护的组网方式。核心步骤只有：拉镜像、配容器、join 网络、授权、配路由。对于没有公网 IP 的站点，ZeroTier 可以通过 NAT 穿透建立 P2P 连接，无需额外的 VPN 网关或 DDNS 配置。&lt;/p>
&lt;p>原文：&lt;a href="https://lev-0.com/2024/06/27/using-zerotier-for-site-to-site-routing-on-vyos/">Using ZeroTier for Site-to-Site Routing on VyOS&lt;/a>&lt;/p></content></item></channel></rss>