前言

这几天试了好几种内网穿透方式,主要是ddns、Zerotier和wireguard,其实三者选其一即可,但于我来说这三种各有优劣,比如

DDNS

优点:不需要装额外软件,openwrt自带动态dns,家庭宽带自带公网ipv6;只需要购买一个域名,而现在域名很便宜,基本上几块钱就能买一年的;无需中转,不消耗中转流量。

缺点:如果家庭宽带只有公网ipv6没有公网ipv4,那么客户端必须支持ipv6,目前手机流量肯定是支持的,但其他人的wifi(特别是公司)不一定会开放ipv6。

Zerotier

优点:基本不需要额外花钱(如果不自建moon节点的话,可以完全免费),支持多个系统,可以设置转发,通过原本的ip地址访问各个设备,自建moon节点之后容易打洞,网速非常快,基本不消耗中转流量。

缺点:如果不自建moon节点,网速很慢;iOS不支持加入moon节点。

Wireguard

优点:比较快,我的iOS设备也能用。

缺点:需要具有公网ip的vps,配置稍微麻烦一些,会走vps转发,消耗流量。

上面三者的要求,我目前的设备和配置都能达到,最后选择三种方法并用,即:

优先使用ipv6直连(DDNS);在没有ipv6的环境下,尝试使用配置了moon节点的Zerotier进行连接(打洞,不消耗vps流量进行中转);在没有ipv6并且无法使用moon节点的情况下,用Wireguard连接vps,vps通过Zerotier连接openwrt。

我的配置

  1. iPhone 14 promax(iOS 18);
  2. 阿里云轻量服务器(2H2G,200M峰值带宽);
  3. N1盒子做旁路由(openwrt flippy 88+o);
  4. 有个阿里云解析的域名(DDNS用)

教程

DDNS

直接看这一篇教程,我也是跟着学的:OpenWrt配置阿里云动态域名服务DDNS

Zerotier(直接使用)

1. 安装客户端

  1. 访问 ZeroTier 官网 下载适合系统的客户端(Windows、macOS、Linux、iOS、Android、OpenWrt 等)。
  2. 安装完成后,启动 ZeroTier One 程序。

2. 获取并加入网络

  1. 在 ZeroTier Central(https://my.zerotier.com/)注册并登录账户。
  2. 创建一个新网络,系统会生成一个 Network ID(16位十六进制字符串)。
  3. 在客户端中输入该 Network ID 加入网络:
    • Windows/macOS:右键托盘图标 → “Join Network”。
    • Linux:命令行输入zerotier-cli join <network_id>
    • iOS/Android:打开 App → 输入 Network ID → Join。

3. 授权设备

  1. 在 ZeroTier Central 网络管理界面,找到刚刚加入的设备。
  2. 勾选 “Authorize” 授权后,该设备才会正式接入虚拟网络。

4. 配置和验证

  1. 客户端会自动分配虚拟 IP(通常是 10.x.x.x 或 192.168.x.x)。
  2. 验证方法:
    • 查看分配的 IP:
      zerotier-cli listnetworks
    • 在另一台已加入同一网络的设备上,尝试 ping 该虚拟 IP。
    • 成功则说明内网组网完成。

Zerotier(Moon节点)

详细步骤可以参考:搭建 Zerotier Moon为异地组网网络加速

安装 ZeroTier

curl -s https://install.zerotier.com | bash

生成 Moon 配置

cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json

修改 moon.json

"stableEndpoints" 中加入 VPS 公网 IP:Port(默认 UDP 9993)。

"stableEndpoints": [
  "203.0.113.5/9993"
]

生成签名文件

zerotier-idtool genmoon moon.json

会在当前目录下生成 000000xxxxxxxx.moon 文件。

部署 Moon 文件

复制 .moon 文件到 moons.d

cp 000000*.moon moons.d/
systemctl restart zerotier-one

至此,Moon 节点生效。

客户端Orbit 到 Moon

在客户端执行:

zerotier-cli orbit <moon-id> <moon-id>

验证是否生效

zerotier-cli listpeers

若能看到角色为 MOON 的节点,说明已连接成功。

Wireguard

Debian/Ubuntu VPS 为例,配置步骤简明说明:

1. 安装 WireGuard

sudo apt update
sudo apt install wireguard -y

2. 生成密钥对

umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
  • 私钥路径:/etc/wireguard/server_private.key
  • 公钥路径:/etc/wireguard/server_public.key

3. 创建配置文件 /etc/wireguard/wg0.conf

假设 WireGuard 使用网段 10.10.0.0/24,VPS 地址为 10.10.0.1

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>
# 开启转发
PostUp   = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0

# 转发规则:WireGuard 子网 → ZeroTier 子网
PostUp   = iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o zt+ -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.10.0.0/24 -o zt+ -j MASQUERADE

说明:

  • Address 是 VPS 在 WireGuard 内的 IP。
  • zt+ 表示匹配 ZeroTier 虚拟网卡(如 ztxxxxxxxx)。

4. 启动 WireGuard

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

查看状态:

sudo wg show

5. 添加客户端(示例:手机)

VPS 端配置(wg0.conf 添加 Peer 段):
[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.10.0.2/32
客户端配置(手机 WireGuard App):
[Interface]
PrivateKey = <客户端私钥>
Address = 10.10.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = <VPS 公钥>
Endpoint = <VPS公网IP>:51820
AllowedIPs = 192.168.191.0/24, 10.10.0.0/24
PersistentKeepalive = 25
  • 192.168.191.0/24 是 ZeroTier 网络(家庭内网可达)。
  • 10.10.0.0/24 是 WireGuard 子网。
6. 家庭内网设备(如 OpenWrt)

只需加入同一 ZeroTier 网络,保证能与 VPS(ZeroTier IP)互通即可,无需配置 WireGuard。

可以直接问ChatGPT或者Deepseek,最好开启推理,要不然会被坑。