ZeroTier内网穿透教程
ZeroTier内网穿透简介
家有NAS,如何从外网进行访问或管理,这就需要使用内网穿透。对于家里宽带没有公网IP的人来说,用ZeroTier是个不错的选择。当然,能实现网穿透的还有frp,但是frp需要一个服务端(比方说一个VPS),而ZeroTier则不需要自己拥有服务端。
ZeroTier简单来说,就是通过这个软件,把各个设备接入一个虚拟局域网中,并分配给每个设备一个(或多个)局域网IP,从而实现设备间的互联。
- 优点:安装和设置简单,不需要过多的配置和知识。
- 缺点:需要相关设备下载ZeroTier,网速和稳定性取决于ZeroTier的服务,也可哪天就不能用了。

开始搭建
- 注册ZeroTier账号,访问zerotier.com,正常注册就好。
- 登录后创建一个网络(虚拟局域网),点击“Create A Network”,下方就会出现一条新的记录,点进入进行设置。
- Network ID:网络ID,这个很重要,是加入这个网络所必须用到的ID
- Name和Description:可随意修改,就是这个虚拟局域网的名称和简介(可不填)
- Access Control:选择Private比较安全,每个加入这个局域网的设备,都需要通过这个网页进行确认批准。而选择Public,则会使每个知道NetworkID的人,都能随意接入这个局域网。
- 其他设置保持默认即可。
设备加入网络
- windows设备:在官网下载并安装windows客户端,安装完毕并运行后,在桌面右下角托盘区找到程序图标,点击并选择“Join New Network”(加入新网络),并输入之前在ZeroTier网站创建的网络的NetworkID即可。
- 安卓设备:在谷歌市场下载APP:ZeroTier One,进入之后,在APP主页面点击“Add Network”,输入NetworkID,其他保持默认,点击最下方“Add”即可。回到主页面,右上方“Settings”中,可勾选“Use Mobile Data”,这样可以在移动网络下访问局域网设备(不勾选则只能在Wifi网络中访问局域网)。最后,回到主页面,点击刚刚新建的网络的右方的开关,即可连入局域网。
- Docker:如果是NAS设备(Linux系统)想接入局域网,可以安装Docker版的ZeroTier。用docker run命令或者docker compose都可以。
docker run方式: 用SSH工具接入已装好Docker的NAS设备的控制台后,输入以下命令安装ZeroTier镜像: 群辉优化版镜像
docker run -d \
--name zerotier \
--restart=unless-stopped \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
zerotier/zerotier-synology:latest或者通用镜像:
docker run -d --name zerotier \
--restart unless-stopped \
--device /dev/net/tun \
--net host \
--cap-add NET_ADMIN \
--cap-add SYS_ADMIN \
-v /opt/zerotier:/var/lib/zerotier-one \
zerotier/zerotierdocker compose 方式:
services:
zerotier:
image: zerotier/zerotier
container_name: zerotier
restart: unless-stopped
network_mode: host
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
- SYS_ADMIN
volumes:
- CHANGE_TO_COMPOSE_DATA_PATH/zerotier:/var/lib/zerotier-one #CHANGE_TO_COMPOSE_DATA_PATH/zerotier数据持久化目录,可按需修改最后从控制台中输入以下命令加入局域网络:
docker exec -it ZeroTier zerotier-cli join 233ccaac272dfa91注意把join后边的那串文字替换成自己网络的NetworkID
- 批准设备入网:当有新设备加入网络中后,需要在zerotier.com中对应网络的设置页面进行批准。在设置页面往下拉,在Members一节中,会出现新申请入网的设备。在这里勾选这条记录,即可准入网络。此处可以看到自动分配给这个设备的局域网IP,这个很重要,是设备间互相访问所使用的IP。也可以在这里修改设备的备注名称和描述。
互相访问
此时,已可以实现各设备之间的互联。比如家中设备的IP是192.168.122.1,在8088端口运行了一个网站。则在已加入这个虚拟局域网的外网设备中,可以通过192.168.122.1:8088访问到家中的网站。访问家中FTP或者SMB服务也是同理。
自检脚本(可选)
有时候可能Zerotier会掉线,如果还有其他的始终在线的设备,可以使用自检脚本来确保本机设备在线,如果掉线,则重启docker容器。参见:ZeroTier的网络连通性自检脚本
公网反代
上边的方案,需要每一个设备都加入虚拟局域网才能实现互相访问。自己用比较方便,但是如果想把内容分享给其他人,或者临时使用公共设备,再或者想用家里设备作为服务器工给外网访问,这就不方便了。
如果想解决上述问题,需要拥有一个VPS(虚拟主机,有公网IP),通过反向代理,来实现。
大致原理就是:把家中设备和VPS加入同一个局域网,在VPS上设置反向代理,用户想要访问家中设备上的内容时,由VPS充当中转站,负责用户与家中设备的通信。
开始动手:
- 把VPS和家中服务器接入局域网,实现内网穿透。参照上文教程即可。一般VPS都是Linux系统,可以通过安装Docker版ZeroTier实现。
- VPS上设置反向代理。利用Caddy服务,或者Nginx服务进行反向代理设置。(详见Caddy相关博客,也可网络搜索教程)Caddy建站指南
- 之后只要通过设置好的域名,便可以直接访问家中服务器。