前言

每次换路由器、刷机后,都要重复一遍zerotier的配置过程,今天抽时间记录下来备用。

zerotier是一个虚拟局域网工具,可以用来做内网穿透,从而实现在外网方便自由地访问内网设备的目的。我家的主路由器是Openwrt系统,通过桥接光猫方式上网,局域网里有NAS等设备,希望能够在外面通过zerotier客户端建立虚拟局域网,直接用原有的内网IP地址访问NAS等设备。

参考: https://github.com/mwarning/zerotier-openwrt/wiki

准备:在Openwrt上安装zerotier

大多数第三方Openwrt固件都带了zerotier,如果实在没有,可以去zerotier官网下载用于不同设备的版本,或从Openwrt官方或第三方的插件库自行寻找适配的ipk,自行上传安装,网上教程很多,此处不赘述。

0. 注册Zerotier

去Zerotier官网注册账号,并创建一个虚拟网络,记下下图红框中的Network ID

truenas安装python truenas安装zerotier_truenas安装python

1. 在Openwrt中启用Zerotier

如下图,在Openwrt中输入Network ID,让当前设备加入虚拟网络。注意下面的“自动允许客户端NAT”,是实现外网访问路由器后其他设备的必要条件,但仅此还不够,还需要后面的步骤配合才能实现。

truenas安装python truenas安装zerotier_truenas安装python_02


启用后,你应该能看到接口信息中有如下的内容。目前这里看不到虚拟网络分配的地址,需要下一步完成。

truenas安装python truenas安装zerotier_虚拟局域网_03

2. 在Zerotier官网认证路由器设备

路由器输入Network ID后,并不能直接被访问到,需要去Zerotier官网,登录后进入你建立的虚拟局域网的管理界面,拉到最下面,你会看到类似下面这样的列表,

truenas安装python truenas安装zerotier_truenas安装python_04


左边有虚红线的,表示有一个设备刚刚接入,需要你认证。只要简单的打勾就可以了。系统会自动给该设备分配一个虚拟局域网网段内的IP,如果不满意可以调整。

现在,回Openwrt看一下zerotier的信息,如果还没有显示虚拟网IP地址,就重启一下zerotier,信息变成这样就说明路由器已经成功接入虚拟网:

truenas安装python truenas安装zerotier_官网_05

3. 在Zerotier官网配置NAT

因为我们希望通过路由器的zorotier虚拟局域网访问内网设备,这就需要如下图,在虚拟网络管理界面中,添加路由:

truenas安装python truenas安装zerotier_虚拟局域网_06


假设你的局域网是192.168.3.0/24(即网络是192.168.3.x,掩码255.255.255.0),路由器的虚拟IP是10.222.33.1,则这里两个框就分别输入192.168.3.0/24和10.222.33.1。这个配置其实就是对加入虚拟局域网的所有设备设置了一个路由:当从任意设备上想访问192.168.3.0网段时,需要经过10.222.33.1,也就是我们的路由器来转发数据。

Zerotier官网的配置到此结束,接下来回到路由器上继续配置。

更新:
到此,可以先跳到第7步测试是否可以从外网访问内网设备,如果可以,就到此结束。如果不行,则需要完成4-6步骤。

4. 在防火墙上放行外网对路由器9993端口的UDP输入

如下图,在Openwrt防火墙上建立如下规则:

truenas安装python truenas安装zerotier_官网_07

5. 在Openwrt上配置路由信息

在Openwrt界面的网络->接口下,点击“添加新接口”,按照下图配置:

truenas安装python truenas安装zerotier_服务器_08

  • 名称:任意,这里用了Zerotier
  • 协议:不配置
  • 设备:从列表中选择一个zt打头的设备,这其实是zerotier在系统中创建的虚拟接口。

点击创建接口,并设置成开机自动启用,回到接口列表,保存并应用。

6. 配置防火墙

进入Openwrt的网络->防火墙,在最下方的区域列表下方,点“新增”,然后按照下图配置:

truenas安装python truenas安装zerotier_官网_09

注意:按照官网说明,在“允许转发到目标区域”设置中,如果仅仅为了访问局域网内部设备,是不需要选中wan的。当你想让虚拟网络中的其他设备也利用该Openwrt设备上网时,才需要选中wan。我没做过深入测试,考虑到可能其他设备的客户端如果是以VPN方式接入虚拟网络后必须通过这个openwrt上网,简单起见,我选中了wan。

保存,并应用。大功告成。

7. 测试

随便找一台电脑或手机,安装zerotier客户端,并参照步骤2做设备认证。不要用家里的WiFI,启动zerotier客户端,上线,试试直接访问局域网任意设备的IP地址,看是不是能访问了!

如果遇到配置正常但无法连接,可以确认一下路由器上的zerotier接口信息中是否只分配了IPv6地址,没有虚拟IPv4地址。本人在某个版本的openwrt上遇到过这种情况,关掉下图中的选项就正常了,具体原因未知。

truenas安装python truenas安装zerotier_网络_10

8. 补充

其实并不是只能通过Openwrt设备访问局域网,任意一台安装了zerotier的设备都可以做到。只是需要你对网络知识比较了解,能够在该设备上通过命令行或其他方式进行防火墙、路由等相关配置,也一样可以实现目标。