异地组网方案:云服务器做Moon节点,openWrt做peers, 利用Zerotier内网穿透+组网)

方案说明

ABC三地,通过中心节点进行异地组网互相访问,且不影响其他访问方式;

现状

中心节点:debian24.02,独立IP,开放9993端口*(如果私有化部署就是必须的,通过Zerotier官方节点连接可以忽略)*
A地:内网openWrt路由
B地:PPPoE拨号上网,下接openWRT路由器
C地:openWRT路由器通过光猫拨号上网

目的

ABC三地openWRT路由器下的所有设备均可以访问其他几台openWRT路由器下的设备服务;

在这里插入图片描述

实现方法

1.账号注册

先到Zerotier注册SignUp账号;
注册登录后会Create A Network创建一个网络,复制下NETWORK ID备用;假设为000000aaaaaabbbbbb
创建完成点击ID进入管理页面,开始部署中心MOON节点;
在这里插入图片描述

2.中心节点

参考 ZeroTier 内网穿透,并搭建 moon 中转服务器

Linux(DEB/RPM)
curl -s https://install.zerotier.com | sudo bash

If you have GPG installed, a more secure option is available:

curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import && \  
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

安装完成之后运行

zerotier-cli join 000000aaaaaabbbbbb #刚才复制的网络ID

之后进入管理页面,可以看到新加入的设备,Auth对加入的中心服务器进行授权;即可获取到IP,这里假设是 10.0.0.200
授权完成后服务器运行 以查看节点情况

zerotier-cli listpeers

余下步骤一样,参考上面的原文,另外我没有生成moon.json,因为在openwrt里做了开机启动脚本,下面会说
至此,中心节点部署完毕,准备openWRT的部署;

3.三地openWRT路由器的zerotier部署

可以在luci页面软件包安装zerotier,也可以命令行安装

opkg install zerotier  #安装命令

安装完成后需要启用zerotier
vi /etc/config/zerotier enable 改为1

# vi /etc/config/zerotier
config zerotier 'sample_config'
        option enabled '1'
        option secret 'aaa222ccc:0:6b70d39a43b*****'
# wq!

启用和运行zerotier

/etc/init.d/zerotier enable
/etc/init.d/zerotier start
#查看状态
zerotier-cli info #查询信息
200  info ********** 1.12.1 ONLINE
#200 后面跟的是设备网络id,记住中心节点的就好,记不住就到网站管理页面看
#id后是版本以及在线状态
#zerotier-cli listpeers
  200 listpeers 0cccb752f7 36.209.227.146/21028;30252;30062 190 1.14.1 LEAF
  200 listpeers 2769b5f146 36.151.73.58/42225;22;810 19 1.10.2 LEAF
  200 listpeers 4fbcd1ae88 2409:8a3c:1d0a:6c90::2/37856;824;13311 28 1.10.2 LEAF
  ...
 #这里看到的是官方公共节点,但是没有moon节点下面将加入moon节点

先加入自己的网络

zerotier-cli join  000000aaaaaabbbbbb  

将此设备加入到自己创建的网络,这时候需要去网页端去Auth授权下该设备,授权时顺手复制下中心节点的id,也就是Address那里,假设是2769AAAAA6
在这里插入图片描述
回到命令行,输入

zerotier-cli orbit  2769AAAAA6 2769AAAAA6 
#特别注意,这里是需要输入两次中心节点的AddressID的
#之后查看连接情况
zerotier-cli listpeers
#如果中心服务器的后缀显示为 MOON则表示正常
zerotier-cli listnetworks
查看连接是否正常,如果后面有IP地址了,则正常

在这里插入图片描述
在这里插入图片描述
其他两台openWRT路由器相同方式部署,现在需要调通异地组网之间设备的连接

异地组网设备间的互相访问

防火墙设置端口转发

openwrt路由器设置端口转发的方法就不细说了,配置好,保证转发正常;

openWRT自动加入网络设置节点以及基于iptables的转发生效

openwrt登陆后设置启动项,配置本地启动脚本如下:

# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
#假设网络id是 0000AAAABB 中心节点ADDRESS ID是2769AAAAA6 
zerotier-cli join 0000AAAABB && zerotier-cli orbit 2769AAAAA6  2769AAAAA6 
#开启转发,这里假设zerotier的虚拟网卡名称为ztlaaa888x 
iptables -I FORWARD -i ztlaaa888x -j ACCEPT && iptables -I FORWARD -o ztlaaa888x -j ACCEPT &&  iptables -t nat -I POSTROUTING -o ztlaaa888x -j MASQUERADE
exit 0

这里可以在openwrt的终端里opkg install curl 后对其他openwrt节点进行访问测试;
对于做好转发的openwrt节点,可以curl URL:端口进行测试
在这里插入图片描述
这就表示ABC三地的openwrt路由器节点和下面的设备之间是通的了,至于路由器怎么做转发以及防火墙就自行搜索吧

如果一切都没问题可以重启下openwrt路由器再进行一次测试,祝顺利

B点访问A点飞牛影视的测试:
在这里插入图片描述

在这里插入图片描述

### 如何在OpenWRT中集成ZeroTier或解决相关问题 #### 集成ZeroTierOpenWRT 为了将ZeroTier集成到OpenWRT,可以按照以下方法操作: 1. **安装必要的软件包** 使用`opkg`命令安装ZeroTier的核心组件以及任何可能需要的支持工具。例如,在终端运行以下命令以安装ZeroTier One客户端: ```bash opkg update && opkg install zerotier-one ``` 2. **配置ZeroTier服务** 安装完成后,可以通过启动ZeroTier服务并加入网络来进行基本设置。以下是启动服务的命令: ```bash /etc/init.d/zerotier start zerotier-cli join <NETWORK_ID> ``` 这里的`<NETWORK_ID>`是指定要连接的虚拟网络ID。 3. **验证安装与状态** 可通过以下命令查看当前节点的状态及其分配的IP地址: ```bash zerotier-cli info zerotier-cli listnetworks ``` 4. **注意事项** 在修改基础文件时需格外小心,因为OpenWrt的安全模式依赖于SquashFS分区上的完全可用的基础文件[^1]。如果在此过程中发生错误配置,则可能导致设备无法正常进入安全模式,进而需要采取更复杂的方法恢复设备功能。 #### 解决常见问题 当尝试集成ZeroTier或其他第三方应用至OpenWrt环境时可能会遇到一些挑战。下面列举了一些常见的障碍及对应的解决方案: - 如果发现推送更改失败提示类似于“Can't push refs to remote”,这通常意味着本地分支未同步最新改动。此时应先执行拉取更新再提交新变更[^2]: ```bash git pull origin main git push origin main ``` - 对于编译阶段产生的错误,比如构建WebRTC SDK期间出现问题,确认已正确完成前置步骤如运行`gclient runhooks`和指定目标路径下的Ninja构建过程[^3]: ```bash gclient sync --force gn gen out/Default ninja -C out/Default ``` - 当涉及前端框架Angular项目对接后台数据库MySQL场景下碰到困难时,可参考StackOverflow上讨论过的类似主题寻求帮助[^4]。 ```python import mysql.connector def connect_to_db(): try: connection = mysql.connector.connect( host='localhost', user='root', password='password', database='testdb' ) if connection.is_connected(): db_Info = connection.get_server_info() print("Connected to MySQL Server version ", db_Info) except Exception as e: print(e) connect_to_db() ``` 上述脚本展示了一个简单的Python函数用于建立与MySql服务器之间的链接实例。 #### 总结 综上所述,成功地把ZeroTier引入OpenWrt不仅增强了路由器联网能力还扩展了其应用场景范围;然而在整个实施流程里务必要遵循官方文档指导谨慎行事以免造成不可逆损害。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigKay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值