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

2023-11-20

现在的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

注意这里的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

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

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

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

zerotier-cli join xxxxxxxx

进入目录

cd /var/lib/zerotier-one/

生成moon配置文件

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

编辑moon.json

vi moon.json

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

zerotier-idtool genmoon moon.json

创建目录

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

将签名文件复制过去

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

重启moon服务器

systemctl restart zerotier-one

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Java实现文件传输

    Java实现文件传输 在Java编程中 我们可以使用各种方法实现文件传输 文件传输是将文件从一个位置传输到另一个位置的过程 可以用于各种应用场景 如文件备份 文件共享等 下面我将介绍一种基于Socket的Java文件传输实现方法 首先 我们
  • C++程序中使用openpose预测关节点坐标的简易实现

    C 程序中使用openpose预测关节点坐标的简易实现 虽然在openpose的官网上已经给出了很多可用的demo 但是如果我们在自己的C 项目中想要使用openpose来预测三维关键点官网给出的例子不是很适用 所以我现在给出了C 程序中使
  • Go切片排序

    Go 语言标准库提供了sort包 用于对切片和用户定义的集合进行排序 具体示例如下 基本排序 package main import fmt sort func main float 从小到大排序 f float64 5 2 1 3 0 7
  • 解决elementUI的对话框(Dialog)组件点击自动跳转到页面顶部问题

  • Python身份运算符(is , is not) 和比较运算符(==,!=)区别

    学习的时候无意中翻到 就在这里稍微记录一下 从名字上看 身份运算符的意思是 运算 两个对象的身份的 那怎么 运算 两个对象的身份呢 那么就自然而然想到比较两个对象的身份是否是相同的 在这里的身份就是他们的id 也就是内存地址 所以身份运算符
  • 【数据结构】哈夫曼编码与前缀编码

    1 前缀编码 首先对于一个串可以用等长的二进制位表示 这样就叫做固定长度编码 如果可以用不等长的二进制位表示 则称之为可变长度编码 那么对于那些频度高的字符我们采用短二进制位编码 出现频度低的采用长二进制位编码的话 将会极大地减少编码长度

随机推荐

  • Win2012服务器 远程桌面帐户允许多用户同时登录的配置方法(2个用户)

    打开任务栏左下角的 服务器管理器 在左侧列表中选中 本地服务器 然后将右侧 远程桌面 功能的选项修改为 启用 注意取消下面复选框的选中状态 修改本地组策略 允许远程桌面帐户的多用户访问 同时按住 Win键 R 组合键调出运行窗口 输入 gp
  • MySQL cmd窗口输入密码后闪退

    最近重新使用回 MySQL 到官网下载客户端版 MySQL Installer 进行安装时 已经设置过 root 密码为 123456 第一次用 cmd 登录时成功 然后再安装 MySQL Workbench 进行连接 却报了错误 auth
  • 基本的Java的MVC入门案例

    概念 MVC Model View Controller 模型 视图 控制器 他是一种专门设计web程序的模式 高内聚 低耦合 高内聚 专人干专事 低耦合 让类与类之间的关系不能太紧密 模型 Model 是应用程序中与处理应用程序数据逻辑的
  • React抽离组件到独立的JS文件中

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 React学习记录 一 抽离组件到独立的JS文件中 1 先创建一个Hello js 2 再创建一个index js文件 React学习记录 一 抽离组件到独立的JS
  • PHP is_array()函数详解,PHP判断是否为数组

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 is array 一 基本使用 二 空数组 三 同时判断多
  • 字节对齐规则和位域

    字节对齐规则 结构体的起始存储位置必须是能够被该结构体中最大的数据类型所整除 每个数据成员存储的起始位置是自身大小的整数倍 比如int在32位机为4字节 则int型成员要从4的整数倍地址开始存储 结构体总大小 也就是sizeof的结果 必须
  • matlab 因果分析,matlab非参数的格兰杰因果分析

    代码1 deseason m function rp vp deseason data textdata days flipud textdata 1 days days 1 end 1 volume flipud data 5 price
  • Vue如何将数据显示在页面中

    如何将data的数据显示在页面中 1 文本插值 div msg div 渲染结果 div hello world div 2 原始HTML插值 v html v text 区别 v text不会对标签进行转义而v html会对标签进行一次转
  • QT笔记——初识QHostInfo、QHostAddress、QNetworkInterface

    网络模块需要在 pro文件中添加 QT network QHostInfo 利用操作系统提供的查询机制来查询与特定主机名相关联的主机的 IP 地址 头文件 include
  • Js中的defer属性和async属性

    Js中的defer属性和async属性 一 defer和async 1 defer 指外部js文件和当前html页面同时加载 异步加载 但只在当前页面解析完成之后执行js代码 async 指外部js文件和当前html页面同时加载 异步加载
  • Redhat Add and Remove Software[No Groups Available in any repository ]

    在 etc yum repos d中把rhel debuginfo repo 修改一下 enabled 1 修改为 enabled 1
  • Java 实现令牌桶限流算法 原生极简实现 包括单机和多线程版本

    文章目录 令牌桶算法简介 令牌桶算法限流范围 单机版实现 多线程版实现 令牌桶算法简介 令牌桶是指一个限流容器 容器有最大容量 每秒或每100ms产生一个令牌 具体取决于机器每秒处理的请求数 当容量中令牌数量达到最大容量时 令牌数量也不会改
  • Python中访问类中的私有变量的两种方法

    我们知道 类中的私有变量是不能直接在类外访问或修改的 因此我们可以设置一个get函数和一个set函数来间接访问和修改私有属性 那么每次访问和修改的都需要调用函数 有没有更简单的方法呢 下面介绍两种方法 1 property 属性函数 比如P
  • 如何保证数据产出质量简述

    如何保证数据产出质量简述 数据质量的评估 数据质量的保障 数据产出流程 机制 revire机制 数据质量保障中的工具 规则 SQLSCAN DQC 基线 数据质量的评估 数据质量可以从一下几个角度进行评估 完整性 完整性是指数据的记录和信息
  • ECG信号三大主要噪声-基线漂移,工频干扰,肌电干扰

    1 基线漂移 基线漂移属于 低频干扰 呼吸的节奏 四肢动作以及前端处理电路设计 都有可能造成基线漂移 致使原始ECG信号漂移之后的 幅度达到R波最大幅值的0 1 0 2倍 ECG信号的一般采用是 粘贴式或吸球式 电极来采集信号 那么存在于体
  • 请关闭该文件夹或文件,然后重试 怎么处理?

    一 打开任务管理器 性能 gt 打开资源监视器 选择CPU gt 搜索句柄中填入文件夹名称 右击结束进程 就能进行操作了
  • 【Linux入门教程】2 文件权限和访问模式、环境变量、管道和过滤器

    Linux文件权限和访问模式 为了更加安全的存储文件 Linux为不同的文件赋予了不同的权限 每个文件都拥有下面三种权限 所有者权限 文件所有者能够进行的操作 组权限 文件所属用户组能够进行的操作 外部权限 其他权限 其他用户可以进行的操作
  • QT编程之信号和槽机制知识

    qt知识总结 一 常见的父窗口有3类 1 QWidget 它是所有对象的基类 继承自QOject和OPaintDevice 2 QMainWindow 它提供了一个主要的应用窗口 可以用来构建APP的应用界面 3 QDialog 对话框 其
  • TensorFlow.js预测鸢尾花种类

    源码连接 TensorFlow js实现鸢尾花种类预测 机器学习文档类资源 CSDN下载 一 加载IRIS数据集 创建index html入口文件 跳转到script主文件 在script js文件夹中利用预先准备好的脚本生成鸢尾花数据集
  • 无公网IP通过旁路由openwrt的Zerotier实现和在家一样访问家里每个设备

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