FFrpc使用自主域名解析透传本地服务
- 综述
- frp透传服务结构流程-http服务域名透传
- 第一部分openwrt-frpc客户端配置和使用
- 指定服务器
- 指定规则
- 在自己的域名运营商处添加域名解析
- 第二部分gpt3.5辅助shell编码实现frp自由切换服务器并更新dns解析
- 获取切换服务器参数
- 脚本实现切换
- 更新DNS解析
- 指定运营商并托管域名到cloudflare
- 根据参数(域名:地址)更新DNS记录CNAME
免责声明: 本文只提供技术路线,为方便学生与编程人员本地调试程序。不得用于非法用途,域名与网站原则上需要经过网络备案,与本文的内容在使用中产生的相关问题,本文作者不承担责任,本文不代表任何利益相关方,仅是一些使用心得,有不足这处请见谅。
综述
宽带拨号网络在运营商使用子网IP以后,动态域名解释失去了原来的作用,对于学生党,程序员来说一个云主机,一个独立IP,甚至一个域名,都是要花费一笔钱的。这其中域名是最便宜的一种。于是就有借助域名和frp,nps npc,这一类的代理透传软件,访问家中openwrt,NAS之类服务的想法。经过个人的摸索形成了一些步骤和代码,现在分享给大家。
本文以Freefrp.net提供的frps为例讲解openwrt中frpc服务的配置流程,其中重点是:
http+域名透传本地地址端口。
最终解决在一个freefrp.net网络节点断网后,自动切换另一个可用的网络节点
我的成果
http://pan.ezdial.cn/
frp透传服务结构流程-http服务域名透传
第一部分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密码***
- 最后启动运行测试
在自己的域名运营商处添加域名解析
加入一条解析记录CNAME类型,fa.ezdial.cn指向上面frpc使用的节点:frp2.ezdial.cn,现在已经在报废状态,于是有一下面部分的折腾。
第二部分gpt3.5辅助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个小时,实现了这剖分代码。
#!/bin/bashfrpss=("frps" "cfg02769c" "cfg03769c") #上节打开的后背freefrp.net节点
cd /root/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的有些不正常,借鉴了我用在acme上key,也就只有cloudflare在这里呢。没有去重新找token,zoneid。感觉不好找。
我感觉阿里也有相关的代码使用存储文件updatedns.sh
放在要用的地方,chmod +x updatedns.sh
更新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
指定运营商并托管域名到cloudflare
这是迁移到cloudflare域名管理的步骤,
1.将您当前的名称服务器记录更新为我们分配给 your.domain.org 的名称服务器:
- melinda.ns.cloudflare.com
- michael.ns.cloudflare.com## 得到API KEY和脚本示例
根据参数(域名:地址)更新DNS记录CNAME
./updatedns.sh fc.ezdial.cn frp.freefrp.net