• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |
花生壳

60分钟利用PHTunnel集成Openwrt!

花生壳X蒲公英  / 教程分享  / 只看大图  / 倒序浏览   © 著作权归作者本人所有

#楼主# 2019-8-28 18:07

跳转到指定楼层
本文详细介绍如何将PHTunnel封装成一个openwrt标准组件,并编译到自己的openwrt固件中,具备内网穿透功能。
PHTunnel组件制作什么是PHTunnel
PHTunnel 是新一代花生壳核心组件,用C语言实现(最小约80KB),较上一代反向代理性能有明显的提升。支持TCPHTTPHTTPS协议,端到端的TLS加密通信。
本文用PHTunnel嵌入openwrt,让设备具备穿透各种复杂的路由和防火墙访问到内网设备的功能。
下载
下载自己的编译平台的二进制PHTunnel文件是第一步要做的,我们可以到oray的官方github网站进行下载。进入https://github.com/OrayDev/PHTunnel/releases ,选择相应平台下载包。
集成Openwrt1.png
规划目录结构
接下来的任务是规划自己的PHTunnel组件安装后,在openwrt系统上是怎样的目录结构。
首先核心的应用程序PHTunnel我们可以放在/usr/bin目录下,因为它是一个非管理员应用,所以一般比放在/usr/sbin目录下要更科学一些。
uci配置文件:由于openwrtuci是常用的配置解决方案(不理解uci可参阅其他文档),所以需要一个uci配置文件,该文件通常放在/etc/config目录下,同时我们取名同样为PHTunnel,这样就可以使用uci set PHTunnel.xx.xx等操作PHTunnel的配置了。
根据PHTunnel列出的参数,uci的配置如下:
集成Openwrt2.png
启动脚本:通常应用都是作为守护脚本运行,所以PHTunnel也会制作成守护程序,自动运行,所以需要在/etc/init.d中建立PHTunnel的启动脚本,名称也叫PHTunnel
hotplug.d机制:为了及时响应网络状态,快速重启PHTunnel,可使用hotplug机制。这样在wan口断开重新连上网的时候,能马上重启PHTunnel。在/etc/hotplug.d/iface下需要创建一个xx-PHTunnel的脚本,其中xx代表脚本执行顺序,可以随便填。
这样,安装后的目录结构是如下图
集成Openwrt3.png
编写PHTunnel组件Makefile
根据目录结构规划,现在来编写组件,由于openwrt的组件是用makefile文件编写。
集成Openwrt4.png
makefile及规划的files目录统一放在PHTunnel目录内,然后放在openwrtpackage/utils目录中即可(可放在package下的任何位置),再来看一下目录结构
集成Openwrt5.png
这时执行make menuconfig后,就能看到PHTunnel组件了
集成Openwrt6_meitu_1.jpg
集成Openwrt7.png
选中该组件后保存,执行make,就可以编译出带PHTunnel的固件了和对应的PHTunnelipk组件包了。
启动脚本
启动脚本用于启动与停止PHTunnel,启动后读取uci配置,变成PHTunnel的启动参数,然后启动PHTunnel程序,代码如下:
集成Openwrt8.png
这里用到了openwrtPROCD机制,这样可以在PHTunnel意外崩溃的情况下,自动重启。
hotplug脚本
集成Openwrt9.png
用于在wan接口连接有效时,重新开启PHTunnel,加速重连速度。
PHTunnel-luci-app组件制作功能
PHTunnel运行后,需要进行扫码登录,管理,解绑等操作,这些都是需要与客户的交互操作,openwrt提供的luci是实现交互的最佳选择,也是最正式的方式,下面来制作基于luciPHTunnel组件。
核心模块
luci的代码区域在/usr/lib/lua/luci中,所以所有交互的web代码都放在这个下面,首先是核心的基础库PHTunnel.lua,它将提供所有核心函数,如获取二维码,登录信息和解绑操等核心功能。
集成Openwrt10_meitu_2.jpg
所有函数的核心都是调用wget来访问rpc服务和官方提供的web服务。
LUCI页面
完成核心函数库后,接下来就是根据luci的架构进行开发。首先是规划菜单与菜单项,如图:
集成Openwrt11_meitu_3.jpg
完成这样的菜单,需要在controller目录下实现,如图:
集成Openwrt12.png
其中setup页面用于设置基本参数,Status页面用于扫码与解绑,Log用于显示日志。
Setup页面
设置页面是一个纯UCI页面,我们可以使用luci提供的cbi模块开发。
集成Openwrt13.png
显现的页面如图
集成Openwrt14_meitu_4.jpg
Status页面
该页面用于显示二维码,管理界面链接及解绑。相关代码在view/oray/PHTunnel_status.htm, view/oray/PHTunnel_inner_status.htm, view/oray/PHTunnel_log_off.htm
PHTunnel_status.htm : 用于显示当前状态。
PHTunnel_inner_status.html : 用于后台实时检测绑定状态,当用户使用手机刷二维码绑定后,PHTunnel_status.htm页面动态显示绑定帐号。
PHTunnel_log_off : 用于解绑帐号
集成Openwrt15.png
Log页面
用于显示日志,该页面相对简单(view/oray/PHTunnel_log.htm)
集成Openwrt16.png
通过uci获取日志路径,并使用cat命令将文件内容输出即可。
制作组件的makefile
与制作PHTunnel组件一样,将所有文件组织成目录树,并加入Makefile
集成Openwrt17.png
Makefile
集成Openwrt18.png
最后同样将组件复制到openwrt/package/utils/下,这样我们可以在配置界面中看到PHTunnel-luci-app组件
集成Openwrt19.png
选择以上两个组件,充分编译后,即可在本地的luci界面上使用PHTunnel了。

那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

0

精华

41

回帖

454

积分

入门用户

Rank: 1

云币
0
贡献
6
活跃
402
精华
0
方寸 发表于 2020-8-24 17:52 来自 中国陕西西安
有软路由openwrt的ipk离线包吗,
回复 支持 反对 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 搜索 官方QQ群
懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图