• 无公网IP通过旁路由openwrt的Zerotier实现和在家一样访问家里每个设备


    现在的IP地址精贵,很多人拉的线路都没有公网IP了,早期时候有公网IP可以干很多事情,例如架个Web,FTP,游戏等各种服务,再通过动态域名,在公司或者朋友可以直接访问,只要映射端口就可以了。

    如果没有公网IP,其实还有其他办法,例如frp反向代理,这样需要一个公网IP的电脑进行中转,如果frp线路不稳定可能还是很卡。当然也是一种方案。

    今天给大家介绍Zerotier,他可以实现让你在公司或者其他地方可以访问和家里电脑一样方便的操作。例如你家里的Nas服务器是192.168.31.3,那么在公司也可以这样访问。甚至可以和家里人组队打局域网游戏。

    他的实现原理大概是在服务端创建一个虚拟的内网网段,例如192.168.0.0,你的设备请求接入网段,服务器内网穿透技术,让你直接和家里的设备进行点对点的连接,成功率颇高。

    zerotier.com可以免费注册这样的服务,通常在客户端需要装自己的客户端,如果你想访问家里的每台设备,都要装就太麻烦了,这里就是本文的目的,通过只在软路由上配置zerotier,让所有设备轻松访问。

    注册设置Zerotier

    注册
    这里就不写如何注册了,用邮箱就好了。

    接下来创建一个网络,点击Create A Network就会生成如下图的一个网络,直接点击就可以进入配置了。虽然是英文的,但是别怕,很简单的。
    在这里插入图片描述

    Network ID

    我们看看内部设置。首先是一个Network ID号,这个号很重要,要加入这个网络的人都需要知道这个ID号才可以。如下图,我用马赛克遮住了。
    在这里插入图片描述

    其他的设置都不用改。

    Routes

    下面是重点
    在这里插入图片描述
    第一次进入,这里的路由表里可能有一个192.168.x.x或者其他,你可以删除掉,自定义一个。
    例如在destination里输入10.0.0.0/24,或者你熟悉的192.168.0.0/24,这里注意不能和家里的或者你正在使用的电脑的内网网段相同,后面的24表示的子网掩码,不用管。后面的(via)不用输入,点击提交。

    假设你家里的网段是192.168.31.0,你的软路由ip是192.168.31.2,因为在软路由上安装了zerotier后配置的IP是10.0.0.2,或者我们再添加一条
    destination里输入192.168.31.0/24,via里输入10.0.0.2,点击提交就可以了。这样所有的192网段的设备都通过软路由转发了。

    设备列表

    我们接下来来看看连接的设备
    在这里插入图片描述
    我备注的work是单位电脑,我更改了ip,指定成101,前放的复选框如果勾选表示你许可他权限访问网络。
    下面的openwrt就是我添加的软路由,注意点击编辑,这里要勾选Allow Ethernet Bridging。

    这样就可以了,什么?你什么都看不到?
    文章先写了如何配置服务器,还没写如何操作客户端,所以还需要客户端配置才能看到,下面我们介绍电脑端和openwrt上如何配置。

    电脑客户端

    首先电脑端,直接在zerotier官网下载安装就好了。还有手机端等
    在这里插入图片描述

    运行后系统状态栏出现一个图标,
    我们点击图标,并选择Join New Network,
    在这里插入图片描述
    然后输入我们的网络ID号,就成为如下状态。
    在这里插入图片描述
    然后再进入后台刷新网页,看是否可以看到了,点击复选框同意权限,后面的Physical IP就是真实的外网IP出现后就连接成功了。

    家里软路由设置

    下面是软路由上的配置。
    首先开启ZeroTier,如果你的软路由没有这个插件,可以装一个或者换刷的固件,具体参考其他人文章。

    我们填写ID号,并勾选启动和允许客户端NAT,点击保存应用。
    在这里插入图片描述
    然后添加一个新的网络接口。
    在这里插入图片描述

    名字随便,我叫了zerotier,然后再接口里选择zt6ovq7i62,你的可能是ztXXXXX,zt开头的。我们复制这个zt6ovq7i62,后面要用到,点击提交。
    然后基本设置里,我么只要设置IP,10.0.0.2,就是我们zerotier后台配置的ip。掩码255.255.255.0,其他不用管。

    在这里插入图片描述
    防火墙设置里选择lan
    在这里插入图片描述
    保存应用。

    防火墙配置

    然后进行防火墙配置。
    在软路由里找到网络防火墙,并切换到自定义规则
    在这里插入图片描述
    在后面添加如下:

    iptables -I FORWARD -i zt6ovq7i62 -j ACCEPT
    iptables -I FORWARD -o zt6ovq7i62 -j ACCEPT
    iptables - t nat -I POSTROUTING -o zt6ovq7i62 -j MASQUERADE
    
    • 1
    • 2
    • 3

    注意这里的zt6ovq7i62要换上你的。
    保存应用。

    进入zerotier,刷新,你应该就可以看到软路由了,记得要勾选Allow Ethernet Bridging,并且把ip地址修改为10.0.0.2,老的删除掉。
    这样就大功告成了。

    实际测试

    我们在公司电脑上来测试一下
    在这里插入图片描述
    浏览器连接家里的Nas
    在这里插入图片描述
    在这里插入图片描述
    访问家里的路由
    在这里插入图片描述
    网络邻居访问
    在这里插入图片描述
    连接家里的ARK游戏服务器
    在这里插入图片描述
    第一个延迟37的就是通过zerotier。
    第二个延迟107的是通过frp,通过服务器中转的。

    以上都没有问题。

    如果zerotier里刷新不出来软路由,可以手动添加Node Id,我么可以连上软路由,输入指令 zerotier-cli info可以查看到当前ID和状态。

    还遇到过一个情况,openwrt里的zt接口只有发送没有接收数据,后台怎么都连不上,后来把openwrt里的clash配置好了就连上了,可能是国内某些线路连接zerotier不稳定。
    在windows或者openwrt上可以使用zerotier-cli listpeers指令查看。我们发现Planet没有IP地址。可能无法连接。

    root@OpenWrt:~# zerotier-cli listpeers
    200 listpeers <ztaddr> <path> <latency> <version> <role>
    200 listpeers 62f86xxx71 - -1 - PLANET
    200 listpeers 778cdxxx90 - -1 - PLANET
    200 listpeers 83048xxx32 - -1 1.10.2 LEAF
    200 listpeers cafe0xxxa9 - -1 - PLANET
    200 listpeers cafe9xxxx9 - -1 - PLANET
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果线路不好,我们可以借助moon服务器来解决。
    搭建moon服务器需要一个有公网ip的服务器,进入后输入

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

    安装好了后,加入你的网络(只作为Moon服务器的话貌似不用加入网络)

    zerotier-cli join xxxxxxxx
    
    • 1

    进入目录

    cd /var/lib/zerotier-one/
    
    • 1

    生成moon配置文件

    zerotier-idtool initmoon identity.public >>moon.json
    
    • 1

    编辑moon.json

    vi moon.json
    
    • 1

    在stableEndpoints输入公网ip地址/9993
    “stableEndpoints”: [“111.222.333.444/9993”]
    保存退出后
    生成签名文件

    zerotier-idtool genmoon moon.json
    
    • 1

    创建目录

    mkdir /var/lib/zerotier-one/moons.d/
    
    • 1

    将签名文件复制过去

    cp 0000006xxxxxxxxx.moon /var/lib/zerotier-one/moons.d/
    
    • 1

    重启moon服务器

    systemctl restart zerotier-one
    
    • 1

    windows客户端
    需要把00000xxxxxxxxxxx.moon文件复制到zerotier服务所在进程目录
    C:\ProgramData\ZeroTier\One
    还是创建moons.d文件夹
    把0000006xxxxxxxxx.moon放入目录,重启服务。

    openwrt也是同样的
    进入/etc/config/zero/目录,创建moons.d目录,放入文件,重启。
    最后输入zerotier-cli listpeers如果看到moon服务器并且有ip就成功了。
    在这里插入图片描述

    通过moon如果还是访问不稳定,可以直接架设一个Planet服务器,无需moon。
    具体可以看我这篇文章 - 在Centos上架设Zerotier Planet服务器

    其他学习参考:
    参考
    moon

  • 相关阅读:
    vue页面报Expected indentation of 2 spaces but found 4.eslintindent
    【JavaWeb】JavaScript
    Python 判断图片相似度的方法
    vscode 远程开发
    Codeforces Round #818 (Div. 2)
    Redis(1)- Redis数据库的安装和配置
    【C++】5.C语言/C++内存管理
    【云原生】第十篇--Docker主机集群化方案 Docker Swarm
    软件过程与建模学习之:Individuals,Motivation and Teams
    python之字典相关知识
  • 原文地址:https://blog.csdn.net/thinbug/article/details/126864556