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

4 篇文章 2 订阅

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

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,以下是使用 Docker 搭建 OpenWrt 容器作为旁路由和 DNS 服务器,其他容器从 OpenWrt 容器进行网络访问的步骤: 1. 安装 Docker,这里假设您已经安装好了 Docker。 2. 搜索并下载 OpenWrt 镜像,可以使用以下命令: ``` docker pull openwrtorg/rootfs:latest ``` 3. 创建并启动一个 OpenWrt 容器,可以使用以下命令: ``` docker run -itd --name openwrt --privileged openwrtorg/rootfs /sbin/init ``` 4. 进入 OpenWrt 容器,可以使用以下命令: ``` docker exec -it openwrt /bin/bash ``` 5. 配置 OpenWrt旁路由和 DNS 服务器,具体步骤可以参考 OpenWrt 官方文档。以下是示例配置: - 将 WAN 口设置为 DHCP 客户端,从上游路由器获取 IP 地址和 DNS 服务器地址。 ``` uci set network.wan.proto=dhcp uci commit network ``` - 将 LAN 口设置为静态 IP 地址,例如设置为 192.168.1.1/24。 ``` uci set network.lan.proto=static uci set network.lan.ipaddr=192.168.1.1 uci set network.lan.netmask=255.255.255.0 uci commit network ``` - 启用 DHCP 服务器,分配 IP 地址给其他容器,例如分配 IP 地址范围为 192.168.1.100 至 192.168.1.200。 ``` uci set dhcp.lan.start=100 uci set dhcp.lan.limit=100 uci set dhcp.lan.leasetime=12h uci commit dhcp ``` - 配置 DNS 服务器,将 DNS 查询转发到上游 DNS 服务器。 ``` uci set dhcp.lan.dhcp_option="6,192.168.1.1" uci set dhcp.lan.dns=223.5.5.5 # 这里以腾讯公共 DNS 服务器为例 uci commit dhcp ``` 6. 配置 Docker 容器的网络为桥接模式,这样可以将 Docker 容器与 OpenWrt 容器连接到同一个网段。可以使用以下命令: ``` docker network create --driver=bridge --subnet=192.168.1.0/24 mybridge docker network connect mybridge openwrt ``` 7. 在其他容器中配置网络,使其可以通过 OpenWrt 容器进行网络访问。可以使用以下命令: ``` docker run -itd --name mycontainer --network mybridge myimage /bin/bash ``` 其中,myimage 是您要运行的容器镜像,mycontainer 是容器的名称。 8. 在其他容器中配置 DNS 服务器为 OpenWrt 容器的 IP 地址,例如设置为 192.168.1.1。 ``` echo "nameserver 192.168.1.1" > /etc/resolv.conf ``` 现在,其他容器就可以通过 OpenWrt 容器进行网络访问和 DNS 解析了。希望对您有所帮助,如果您还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值