首页 > 计算机技术 > 网络技术 > 组网技术

自己创建zerotier私有根服务器,实现SD-WAN内网穿透,远程组网

原创 lihf8515 2025年06月27日 16:36
来源:本站 阅读:600

SD-WAN内网穿透是通过软件定义广域网技术构建虚拟局域网,实现跨网络环境的安全高效远程访问,其核心优势在于智能路由、无需公网IP及多链路整合能力‌。

SD-WAN非常适合不同局域网的远程组网,使之成为一个虚拟的局域网,实现设备间如同一个局域网一样随意访问。并且,两个设备之间是相互直连通讯的,直接穿透局域网的路由器,不经过中转服务器,带宽可跑满,该技术可替代传统内网穿透工具,尤其适用于企业级远程办公、物联网设备接入等场景。‌‌

‌SD-WAN内网穿透的技术特性‌

‌虚拟化组网‌:

将分散在不同物理位置的设备整合到同一虚拟局域网,突破NAT限制,无需公网IP即可实现设备互访。‌‌‌‌

典型应用场景包括远程访问企业ERP/OA系统、私有NAS文件共享等。‌‌

‌性能优化机制‌:

智能流量调度:基于网络质量实时选择最优传输路径,降低延迟30%-50%。‌‌

多链路聚合:支持整合MPLS、4G/5G等多种网络线路,保障传输稳定性。‌‌

主流SD-WAN方案对比‌

方案 优势 局限性 适用场景
Zerotier 开源免费、私有化部署灵活 跨运营商延迟较高 小型团队/个人开发者
Tailscale WireGuard协议加密、跨平台兼容 免费版节点数量受限 技术型用户私有化部署
蒲公英 国内网络优化、访问速度快 免费版仅支持3设备 中小企业商业应用
贝锐花生壳 合规资质完善、服务稳定性强 需付费解锁高阶功能 政企等强合规需求场景

我们这里选择zerotier,我们需要在自己的服务器上安装配置。实际使用时,两个需要通信的客户端只要安装客户端软件即可。一但两个客户端通过服务器取得联系,之后的流量都不经过服务器,而是客户端之间直接通信的。

一、安装zerotier-one

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

二、下载ztncui安装包并安装

curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb
sudo apt install ./ztncui_0.8.14_amd64.deb

三、生成ztncui的配置文件

sudo sh -c "echo ZT_TOKEN=`sudo cat /var/lib/zerotier-one/authtoken.secret` > /opt/key-networks/ztncui/.env"

sudo sh -c "echo ZT_ADDR=127.0.0.1:9993 >> /opt/key-networks/ztncui/.env"

sudo sh -c "echo HTTPS_PORT=3443 >> /opt/key-networks/ztncui/.env"

sudo sh -c "echo NODE_ENV=production >> /opt/key-networks/ztncui/.env"

四、给权限

sudo chmod 400 /opt/key-networks/ztncui/.env

sudo chown ztncui.ztncui /opt/key-networks/ztncui/.env

sudo systemctl restart ztncui

五、放行相关端口

阿里云或腾讯云服务器的web控制台防火墙和服务器自身的ufw防火墙都要放行3443/tcp,9993/udp,9993/tcp

然后浏览器使用 https://你的服务器公网ip:3443 即可访问,登录用户名 admin, 密码 password,登录后会要求修改密码。

六、反向代理

如果您想您的zerotier服务器更安全,则需要做如下nginx反向代理的配置。

首先,阿里云或腾讯云服务器的web控制台防火墙和服务器自身的ufw防火墙不要放行3443/tcp,只放行9993/udp和9993/tcp。然后,nginx配置文件写入如下配置代码:

# zerotier系统配置信息

# 注意your_domain.com是您自己的域名。比如:baidu.com

server {

listen 80;

server_name zerotier.your_domain.com;

return 301 https://$server_name/$request_uri;

}

server {

listen 443 ssl;

server_name zerotier.your_domain.com;

# SSL证书地址

ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;  # pem文件的路径

ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # key文件的路径

# ssl验证相关配置

ssl_session_timeout  5m;    #缓存有效期

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议

ssl_prefer_server_ciphers on;   #使用服务器端的首选算法

location / {

proxy_pass https://127.0.0.1:3443;

proxy_set_header HOST $host;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

重启nginx:
sudo systemctl restart nginx

到这里,你就可以使用形如:https://your_domain.com 来安全访问zerotier的后台管理了。

七、以下是建立自己完全独立的根服务器,请根据需要配置

1、如何建立根节点

首先,就需要创建自己的planet文件。这里我们不需要使用任何的第三方脚本,直接使用官方仓库自己编译就行。仓库地址:https://github.com/zerotier/ZeroTierOne

2、下载仓库并修改相关源码

git clone https://github.com/zerotier/ZeroTierOne

cd ZeroTierOne/attic/world

cat mkworld.cpp

可以看到在mkworld.cpp文件中配置有4个官方的根节点,分别位于洛杉矶、迈阿密、阿姆斯特丹和东京:

std::vector<World::Root> roots;

// Los Angeles

roots.push_back(World::Root());

roots.back().identity =  Identity("3a46f1bf30:0:76e66fab33e28549a62ee2064d1843273c2c300ba45c3f20bef02dbad225723bb59a9bb4b13535730961aeecf5a163ace477cceb0727025b99ac14a5166a09a3");

roots.back().stableEndpoints.push_back(InetAddress("185.180.13.82/9993"));

roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c815::/9993"));

// Miami

roots.push_back(World::Root());

roots.back().identity =  Identity("de8950a8b2:0:1b3ada8251b91b6b6fa6535b8c7e2460918f4f729abdec97d3c7f3796868fb02f0de0b0ee554b2d59fc3524743eebfcf5315e790ed6d92db5bd10c28c09b40ef");

roots.back().stableEndpoints.push_back(InetAddress("207.246.73.245/443"));

roots.back().stableEndpoints.push_back(InetAddress("2001:19f0:9002:5cb:ec4:7aff:fe8f:69d9/443"));

// Tokyo

roots.push_back(World::Root());

roots.back().identity =  Identity("34e0a5e174:0:93efb50934788f856d5cfb9ca5be88e85b40965586b75befac900df77352c145a1ba7007569d37c77bfe52c0999f3bdc67a47a4a6000b720a883ce47aa2fb7f8");

roots.back().stableEndpoints.push_back(InetAddress("147.75.92.2/443"));

roots.back().stableEndpoints.push_back(InetAddress("2604:1380:3000:7100::1/443"));

// Amsterdam

roots.push_back(World::Root());

roots.back().identity =  Identity("992fcf1db7:0:206ed59350b31916f749a1f85dffb3a8787dcbf83b8c6e9448d4e3ea0e3369301be716c3609344a9d1533850fb4460c50af43322bcfc8e13d3301a1f1003ceb6");

roots.back().stableEndpoints.push_back(InetAddress("195.181.173.159/443"));

roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c024::/443"));

我们需要做的就是将这4个节点注释掉,添加我们自己的planet节点,例如:

// 自建服务器

roots.push_back(World::Root());

roots.back().identity = Identity(""); //这里填identity.public文件的内容

roots.back().stableEndpoints.push_back(InetAddress("你的ZeroTier服务器公网IP/9993")); // 这里填公网ip和端口

其中,identity的值可以通过cat /var/lib/zerotier-one/identity.public命令查看

3、编译并生成planet文件

cd ZeroTierOne/attic/world

source ./build.sh && ./mkworld

# 此时会生成一个名为"world.bin"的文件,就是我们要的planet,将其重命名

mv world.bin planet

如果使用build.sh编译时报错:

In file included from ../../osdep/OSUtils.cpp:45:

    ../../osdep/OSUtils.hpp:46:10: fatal error: nlohmann/json.hpp: No such file or directory

则需要先将ZeroTierOne/ext/nlohmann复制到/usr/local/include/目录下再重新编译。

现在,我们只需要将planet文件发放到各个节点(包括planet节点、moon节点和leaf节点),替换原有的planet文件,并重启Zerotier-One服务即可。

sudo cp planet /var/lib/zerotier-one

sudo systemctl restart zerotier-one

再次查看节点情况:

sudo zerotier-cli peers

可以看到仅剩一个planet节点,且ip和端口都是我们刚刚自己配置的,说明操作成功了。

友情链接: 海峰收银系统  
Copyright © 2025 hfsoft.top All Rights Reserved.
中华人民共和国工业和信息化部ICP备案序号:皖ICP备2025073039号