openwr折腾记7-Frpc使用自主域名解析透传本地服务免费不断线的探索

Frpc使用自主域名解析透传本地服务

  • 综述
      • frp透传http服务结构流程
  • 第一部分openwrt-frpc客户端配置和使用
    • 指定服务器
    • 指定规则
    • 在自己的域名运营商处添加域名解析
  • 第二部分shell编码实现frp自由切换服务器并更新dns解析
    • 获取切换服务器参数
    • 脚本实现切换
    • 脚本更新DNS解析
    • 打开openwrt计划任务

免责声明: 本文只提供技术路线,为方便学生与编程人员本地调试程序。不得用于非法用途,域名与网站原则上需要经过网络备案,本文的内容在使用中产生的相关问题,本文作者不承担责任,本文不代表任何利益相关方,仅是一些使用心得,有不足这处请见谅。

综述

宽带拨号网络在运营商使用子网IP以后,动态域名解释失去了原来的作用,对于学生党,程序员来说一个云主机,一个独立IP,甚至一个域名,都是要花费一笔钱的。这其中域名是最便宜的一种。我原本就有一个域名,为了访问家中的网络和服务,就有了借助域名和frp,nps npc,这一类的代理透传软件的需要。

经过个人的摸索形成了一些步骤和代码,发现freefrp.net免费且还算稳定,但在某个时期会节点被停。刚刚找到自动切换节点的方法,一并分享给大家。

本文先介绍以Freefrp.net提供的frps为例讲解openwrt中frpc服务的配置流程,其中重点是:
http+域名透传本地地址端口
然后解决在一个freefrp.net网络节点断网后,自动切换另一个可用的网络节点

我的成果
家中的frp转nas-panindex
http://pan.ezdial.cn/
免费的cloudflarepage+github+hugo
http://hugo.ezdial.cn/

frp透传http服务结构流程

openwrt-frpc frps服务器 互联网客户 域名解析DNS server:port,token 和规则(域名->>本地地址端口) 接受请求准备接受连接 请求访问my.domain.com,谁提供服务? 由frp.freefrp.net提供服务 请求规则中域名my.domain.com,车在水里吗? 请求规则中域名my.domain.com,车在水里吗? 由my.domain.com找到并询问本地地址端口得到回复:没在。 没在 openwrt-frpc frps服务器 互联网客户 域名解析DNS

第一部分openwrt-frpc客户端配置和使用

指定服务器

在这里插入图片描述

  • 我们使用三个服务器地址,以后有更新可以上freefrp.net官网查看
    frp.freefrp.net
    frp1.freefrp.net
    frp2.freefrp.net
  • 下面是服务器添加
    在这里插入图片描述

指定规则

比如我在192.168.2.8:3007打开了服务比如ChatbotUI,一个访问openai在聊天窗口,配置如下:

在这里插入图片描述
添加规则。
代理名称需要一个唯一的字符串,类型选择http,这样才能使用自主域名动态改变frp服务器
我使用子域名fa,自定义域名fa.ezdail.cn访问192.168.2.8在3007端口提供在chatbotui窗口。
且指定了一个简单的auth用户wjc密码***

  • 最后启动运行测试,日志存放在/tmp/frpc.log
    在这里插入图片描述

在自己的域名运营商处添加域名解析

加入一条解析记录CNAME类型,fa.ezdial.cn指向上面frpc使用的节点:frp2.ezdial.cn,现在已经在报废状态,于是有一下面部分的折腾。

第二部分shell编码实现frp自由切换服务器并更新dns解析

获取切换服务器参数

ssh进入openwrt后台,或者使用web shell,ttyp客户端

uci show frpc.frps
这是第一个节点的内容
uci show frpc.frps
frpc.frps=server
frpc.frps.server_port='7000'
frpc.frps.tcp_mux='true'
frpc.frps.alias='frp2'
frpc.frps.server_addr='frp2.freefrp.net'
frpc.frps.token='freefrp.net'
uci set frpc.main.server="frps"
uci commit frpc
这是设置使用第一个节点
uci show frpc.@server[1]
frpc.cfg06769c=server
frpc.cfg06769c.alias='frp'
frpc.cfg06769c.server_addr='frp.freefrp.net'
frpc.cfg06769c.server_port='7000'
frpc.cfg06769c.token='freefrp.net'
frpc.cfg06769c.tcp_mux='true'
这是第二个节点的内容,其中cfg06769c是他的识别码,
uci set frpc.main.server="cfg06769c"
uci commit frpc
这是设置使用第二个节点
  • 以此类推可以显示并使用第三个节点 uci show frpc.@server[2] 在下一节要用到

脚本实现切换

这个脚本的写作过程中不断借用ChatGPT3.5的帮助,

提问了以下问题:shell列表声明,循环使用列表元素,网络诊断,函数参数传递,并得到了成套的代码。也感谢chatbotui这个项目使得调用很顺滑。

让我在外行的情况下用3个小时,实现了这剖分代码。本来我也不敢想像能做成,以往google代码是很耗费时间的,chatgpt相当于有一个很大的代码库提供咨询,很智能的样子。

将文件更换为自己的frpss列表,存储为autosw.sh

#!/bin/bashfrpss=("frps" "cfg02769c" "cfg03769c") #上节找到的节点记录对应三个freefrp.net地址
cd /frpcauto
check_network() {target=$1ping -c 1 "$target" > /dev/null 2>&1if [ $? -eq 0 ]; thenecho "网络连接正常"return 0elseecho "无法连接到网络"return 1fi
}check_network pan.ezdial.cn
if [ $? -eq 0 ]; thenecho ok
elsefor item in ${frpss[@]}; doecho $itemserver=$itemcomm="uci get  frpc.$server.server_addr"ss=`$comm`echo $sscheck_network $ssif [ $? -eq 0 ]; thenecho server is okuci set frpc.main.server=$item    #切换节眯uci commit frpc/etc/init.d/frpc restart         #重起frpc服务./updatedns.sh pan.ezdial.cn $ss    #下一节要提供的解析数据修改./updatedns.sh fc.ezdial.cn $ss    breakfidonefi

脚本更新DNS解析

这一章是bing搜素来的代码,可能gpt的有些不正常代码是旧的,指定运营商并托管域名到cloudflare
这是迁移到cloudflare域名管理的步骤,
将您当前的名称服务器记录更新为我们分配给 your.domain.org 的名称服务器:

  1. melinda.ns.cloudflare.com
  2. michael.ns.cloudflare.com##
    如果不更换托管商,则更改相关运营商的代码比如阿里腾讯,请自行查找。
    代码使用:
  3. 登陆cloudflare找到zoneid和cftoken替换为自己的。
  4. 存储为updatedns.sh
  5. chmod +x updatedns.sh
  6. 根据参数(域名:地址)更新CNAME
    ./updatedns.sh fc.ezdial.cn frp.freefrp.net
#!/bin/bash
#wanip_v4=`curl -s -k https://ip.cn | jsonfilter -e "$.ip"`
wanip_v4='frp.freefrp.net'
echo "set $1 cname $2 "record_name='pan.ezdial.cn'
if [ "$1" ]; then
record_name=$1 ;
fi
if [ "$2" ];  then
wanip_v4=$2 ;
echo "two args $wanip_v4"
fizoneid='71f66fcff8c2a902cc69a573b54de5'
cftoken='5GLE2sFk6_sMSD9Iw60rViRqESIK__S8UJxci'
zoneinfo=`curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records?name=$record_name&type=CNAME" \-H "Authorization: Bearer $cftoken" \-H "Content-Type:application/json"  `
#echo $zoneinfo
recordid=` jsonfilter -s $zoneinfo  -e  "$.result[0].id" `
echo $recordid
result_cf=`curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records/$recordid" \-H "Authorization: Bearer $cftoken" \-H "Content-Type: application/json" \--data "{\"type\":\"CNAME\",\"name\":\"$record_name\",\"content\": \"$wanip_v4\", \"ttl\":1,\"proxied\":false}"`
echo $result_cf

打开openwrt计划任务

将这两块代码存在一个目录,并更改测试成功。
添加一个合适的频率检测本身域名可访问状态,不通则切换到下一个节点,数分钟后应该就能成功上线了。最近cloudflare的表现好像在1分钟之内能更新解析纪录。不知道为什么这么快。

* */1 * * * * path/autosw.sh. 
分时日月星期,每小时运行一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL — InnoDB事务

文章目录 事务定义事务特性事务隔离级别READ UNCOMMITTEDREPEATABLE READREAD COMMITTEDSERIALIZABLE 事务存在的问题脏读(Dirty Read)不可重复读(Non-repeatable Read)幻读(Phantom Read) 事务定义 数据库…

(十三)大数据实战——hadoop集群之YARN高可用实现自动故障转移

前言 本节内容是关于hadoop集群下yarn服务的高可用搭建,以及其发生故障转移的处理,同样需要依赖zookeeper集群的实现,实现该集群搭建时,我们要预先保证zookeeper集群是启动状态。yarn的高可用同样依赖zookeeper的临时节点及监控&…

构建器/建造者/构建者模式(C++)

定义 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。 应用场景 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象…

Android应用开发(6)TextView进阶用法

Android应用开发学习笔记——目录索引 上一章Android应用开发(5)文本视图(TextView)介绍了文本视图(TextView)设置文本内容、设置文本大小、设置文本显示颜色。 TextView是最基础的文本显示控件&#xff…

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符,不能直接使用,需要使用转义符\。如:$,(,),*,,.,?,[,,^,{。 这里大家会有疑问:为啥小括号(),这个就需要两个来转义&a…

Linux 下设置开机自启动的方法

文章目录 事先准备对于普通的 Linux对于 RedHat Enterprise Linux 9 笔者的运行环境: 设置成功过的 Linux: RedHat Enterprise Linux 9 x86_64 CentOS 8 x86_64 事先准备 进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux…

JavaWeb 手写Tomcat底层机制

目录 一、Tomcat底层整体架构 1.简介 : 2.分析图 : 3.基于Socket开发服务端的流程 : 4.打通服务器端和客户端的数据通道 : 二、多线程模型的实现 1.思路分析 : 2.处理HTTP请求 : 3.自定义Tomcat : 三、自定义Servlet规范 1. HTTP请求和响应 : 1 CyanServletRequest …

《面试1v1》ElasticSearch基础

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

Kafka的配置和使用

目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker(docker类似于linux的软件商店,下载所有应用都能从docker去下载) a、自动安装 curl -fsSL https://get.docker.com | b…

Visual Studio配置PCL库

Visual Studio配置PCL库 Debug和Release配置新建项目配置属性表测试参考 Debug和Release Debug和Release的配置过程一模一样,唯一区别就在于最后一步插入的附加依赖项不同,因此下面以debug为例。 配置新建项目 1、新建一个C空项目,模式设置…

Linux文本三剑客之awk

目录 前言 awk 1.认识awk 2.使用awk 2.1语法 2.2常用命令选项 2.3awk变量 2.3.1内置变量 2.3.2自定义变量 2.4printf命令 awk例题 前言 awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是…

FreeRTOS源码分析-9 互斥信号量

目录 1 优先级翻转问题 2 互斥信号量概念及其应用 2.2FreeRTOS互斥信号量介绍 2.3FreeRTOS互斥信号量工作原理 3 互斥信号量函数应用 3.1功能分析 3.2API详解 3.3功能实现 4 递归互斥信号量函数应用 4.1死锁现象 ​编辑 4.2API详解 4.3解决死锁 5 互斥信号量实现原…

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig与zag/左右双旋/3+4重构)

本文目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 06.代码注意插入算法删除算法完整代码&#xff1a…

关于接口测试用例设计的一些思考

接口测试发现的典型问题 传入参数处理不当,引起程序错误类型溢出,导致数据读取和写入不一致对象权限校验出错,可获取其他角色信息状态出错,导致逻辑处理出现问题逻辑校验不完善定时任务执行出错 接口测试用例设计 接口测试用例…

redis入门3-在java中操作redis

Redis的java客户端 Jedis、Lettuce、Redisson、以及spring提供的spring data redis Jedis操作redis //添加依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version> </dep…

JJWT快速入门

本篇介绍使用 JJWT&#xff08;Java JWT&#xff09;库来生成 JWT Token&#xff0c;步骤如下&#xff1a; 添加依赖&#xff1a; 在项目中添加 JJWT 依赖项。对于 Maven 项目&#xff0c;可以在 pom.xml 文件中添加以下依赖项&#xff1a; <dependency><groupId>…

python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表

#!/user/bin/evn python import os,re,openpyxl 输入&#xff1a;帆软脚本文件路径输出&#xff1a;帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…

c++学习(特殊类设计)[30]

只能在堆上创建对象的类 如果你想要确保对象只能在堆上创建&#xff0c;可以通过将析构函数声明为私有&#xff0c;并提供一个静态成员函数来创建对象。这样&#xff0c;类的实例化只能通过调用静态成员函数来完成&#xff0c;而无法直接在栈上创建对象。 以下是一个示例&…

【开源项目--稻草】Day03

【开源项目--稻草】Day03 1. 续Spring-Security1.1 自定义登录界面 2. 用户注册2.1 将注册页面显示2.2 编写控制器进行测试2.3 编写注册业务逻辑2.4 注册功能的收尾 3. VUE3.1 VUE的基本使用3.1.1 什么是VUE 3.2 使用VUEAjax完善稻草问答的注册功能 1. 续Spring-Security 1.1 …

Kubespray-offline v2.21.0-1 下载 Kubespray v2.22.1 离线部署 kubernetes v1.25.6

文章目录 1. 目标2. 预备条件3. vcenter 创建虚拟机4. 系统初始化4.1 配置网卡4.2 配置主机名4.3 内核参数 5. 打快照6. 安装 git7. 配置科学8. 安装 docker9. 下载介质9.1 下载安装 docker 介质9.2 下载 kubespray-offline-ansible 介质9.3 下载 kubernetes 介质 10. 搬运介质…