openwr折腾记7-Frpc使用自主域名解析透传本地服务-开80-443的顺滑


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

综述

宽带拨号网络在运营商使用子网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/bash

frpss=("frps" "cfg02769c" "cfg03769c") #上节找到的节点记录对应三个freefrp.net地址
cd /frpcauto
check_network() {
    target=$1
    ping -c 1 "$target" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "网络连接正常"
	return 0
    else
        echo "无法连接到网络"
        return 1
    fi
}

check_network pan.ezdial.cn
if [ $? -eq 0 ]; then
  echo ok
else
  for item in ${frpss[@]}; do

    echo $item
    server=$item
    comm="uci get  frpc.$server.server_addr"
    
    ss=`$comm`
    echo $ss
    check_network $ss
    if [ $? -eq 0 ]; then
          echo server is ok
	  uci 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    
           break
     fi
  done

fi

脚本更新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"
fi


zoneid='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. 
分时日月星期,每小时运行一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
frp 是一个可用于内网穿透的工具,它提供了一个简单的客户端/服务端架构,可以轻松实现内网穿透。而 TURN(Traversal Using Relays around NAT)是一种用于解决 NAT 穿透问题的技术,通过使用 TURN 服务器中转数据,可以实现两个不在同一个 NAT 网络中的客户端之间的通信。 如果你想在 frp 中创建一个 TURN 服务器,可以按照以下步骤操作: 1. 安装 frp 客户端和服务端。你可以从 frp 的官网(https://github.com/fatedier/frp)下载最新版本的客户端和服务端,并按照官方文档进行安装和配置。 2. 配置 frps.ini 文件。在服务端的 frps.ini 配置文件中,添加以下配置: ``` # frps.ini [common] bind_port = 7000 # 添加 TURN 配置 [turn] bind_addr = 0.0.0.0 bind_port = 3478 kcp_bind_port = 3478 udp_bind_port = 3478 tls_port = 5349 cert_file = /path/to/cert.pem key_file = /path/to/key.pem realm = your-domain.com users = user1:password1,user2:password2 ``` 其中,turn 是自定义的服务名称,可以根据实际情况进行修改。 3. 配置 TURN 客户端。在客户端的 frpc.ini 配置文件中,添加以下配置: ``` # frpc.ini [common] server_addr = your-server-ip server_port = 7000 # 添加 TURN 配置 [turn] type = tcp local_ip = 192.168.1.100 local_port = 9000 protocol = udp username = user1 password = password1 ``` 其中,type 指定了 TURN 服务的类型,可以是 tcp 或 udp;local_ip 和 local_port 指定了本地服务的 IP 地址和端口号;protocol 指定了 TURN 服务使用的协议,可以是 tcp 或 udp;username 和 password 指定了 TURN 服务的用户名和密码。 4. 启动 frp 服务。在服务端和客户端分别启动 frps 和 frpc 服务即可。 通过以上步骤,你就可以在 frp 中创建一个 TURN 服务器并进行内网穿透了。需要注意的是,TURN 服务器需要消耗更多的网络带宽和计算资源,建议仅在必要时使用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wjcroom

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

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

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

打赏作者

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

抵扣说明:

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

余额充值