我是靠谱客的博主 炙热火,最近开发中收集的这篇文章主要介绍通过frp搭建属于自己的免费稳定的内网穿透服务介绍部署对比HTTP和HTTPS事项整理错误经验整理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 介绍
    • 简述
    • 功能列表
    • 原理
  • 部署
    • 部署
    • 客户端部署
      • Linux环境下部署
      • Windows环境下部署
    • 管理后台
    • 安全问题
    • 限速
  • 对比
  • HTTP和HTTPS事项整理
    • HTTP注意事项
    • HTTPS操作流程
  • 错误经验整理
    • frpc服务连接异常
    • frpc启动异常login to server failed
    • Chrome浏览器无法访问

之前的开发中,使用的内网穿透工具都是natapp,虽然该工具用起来很简单,但是每次重启都会变动域名,而且因为是免费的隧道传输上也被限制了,使用起来也很卡,所以也一直希望能够找到一款稳定的免费的内网穿透工具。frp是开源内网穿透软件,需要自己搭建服务器端和客户端,域名和带宽都是由自己提供的,所以也不存在随机域名和网速限制的情况

介绍

简述

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
Frp是基于Go语言开发的,所以它的服务端和客户端能跨平台地运行在macOS、Windows、Linux和BSD等操作系统,支持x86、ARM和mips等架构处理器。
github地址:https://github.com/fatedier/frp
文档地址:https://gofrp.org/docs/overview/

功能列表

【1】客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
【2】采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
【3】代理组间的负载均衡。
【4】端口复用,多个服务通过同一个服务端端口暴露。
【5】多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
【6】高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
【7】服务端和客户端 UI 页面。

原理

在这里插入图片描述
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
当运行在公网上的frps服务端程序收到访问请求后,会将其转发内网中的frpc客户端,由frpc客户端再转发至内网中的某个服务。frp可以建立起这样一个映射:
<公网ip>:<公网port> --> <内网ip>:<内网port>。

在这里插入图片描述

部署

部署

安装部署主要有俩个重要的配置文件,一个是部署在云服务器的frps配置文件frps.ini,一个部署在内网客户端的frpc.ini文件。

Tips:相关配置默认值和描述都可以在GitHub源码下面俩个配置文件看到
在这里插入图片描述
外网服务端部署 frps.ini配置文件

[common]
bind_port = 7700
token = XXX
vhost_http_port = 8080
vhost_https_port = 8443

dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = XXX

tcp_mux = true
max_pool_count = 10

bind_port:代理服务器和内网机器之间的通信端口
token :服务器和内网之前的通信密码
vhost_http_port 和vhost_https_port用于服务器端监听端口,用于接收HTTP或者HTTPS请求
dashboard_port,dashboard_user和dashboard_pwd :服务器端管理后台的登录端口,登录地址就是绑定在外网服务器的,登录用户名和密码。
tcp_mux :是否使用TCP流复用,默认true
max_pool_count:每个代理的最大连接数量

Docker启动

docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

客户端部署

Linux环境下部署

frpc.ini配置文件

docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
[common]
server_addr = xxx.example.cn
server_port = 7000
token = 123456
tls_enable = true

[web]
type = http
local_port = 8080
local_ip = 192.168.101.11
custom_domains = xxx.example.cn

server_addr:外网服务器地址
server_port :外网服务器和内网机器客户端穿透通信端口,默认是7000
token :秘钥
[web]:当前客户端连接名称,可自定义修改
type :http连接
local_port:通过当前代理转发到内网应用的端口,即目标端口
local_ip :通过当前代理转发内容应用的服务器地址
custom_domains:绑定的自定义域名,该域名应该和外网服务器Ip映射

Windows环境下部署

下载地址:https://github.com/fatedier/frp/releases
在这里插入图片描述
打开后修改frpc.ini配置文件,修改配置

[common]
server_addr = xxx.example.cn
server_port = 7000
token = 123456
tls_enable = true

[web]
type = http
local_port = 8888
local_ip = 172.35.XX.XX
custom_domains = xxx.example.cn

启动命令:frpc.exe -c frpc.ini

参考bash脚本

@ echo off
echo "Start to close frpc.exe program"
taskkill /f /im "frpc.exe"
echo "frpc.exe program has been closed"
frpc.exe -c frpc.ini
pause>nul

管理后台

管理后台的访问地址是:ip:7500
账号密码:admin/admin,如果你设置了token ,那么密码就是这个。通过这个管理后台可以
在这里插入图片描述

安全问题

Frp对于内外网的身份验证可以通过服务端和客户端的 [common]节点配置一样的 token 参数。

服务端frps.ini示例
[common]
# 略去其他配置
token = 12345678

客户端frpc.ini示例
[common]
# 略去其他配置
token = 12345678

限速

目前frp仅支持客户端的限速,在配置中某一个服务节点下面增加 bandwidth_limit 字段启用此功能。
客户端frpc.ini示例

# 某个服务节点下
[some_service]
# 其他配置略,单位仅支持 MB和KB
bandwidth_limit = 1MB

对比

在这里插入图片描述

HTTP和HTTPS事项整理

HTTP注意事项

默认是使用的是HTTP的方式,如果没有特定的需要的可以直接使用。但是这个会存在一些问题:
【1】Chrome中http被强转成https问题。在测试过程发现通过自定义的域名使用Chrome浏览器不行,定位发现http被强转成https,这个可以通过修改Chrome浏览器的配置处理。
【解决方式】
1.在谷歌浏览器输入地址:
chrome://net-internals/#hsts

2.在新打开界面最下面找到:
Delete domain security policies
在这里插入图片描述
将你的域名地址填入DELETE掉,即取消安全验证,只需要填写纯域名地址即可,例如baidu.com
此外,如果你想每次将http强转成https的可以在 Add HSTS domain 下重复以上步骤,然后点击 Add按钮就可以了
在这里插入图片描述
【2】部分ios用户打开链接时http会自动变成https。这个问题在我们测试时发现,通过HTTP的方式安卓机正常,部分低版本的IOS也正常,但是存在一个IOS设备访问白屏。这个问题根据具体情况处理吧,因为当前frp内网穿透也仅仅用于开发预生产环境,如果测试要求必须满足该部分IOS那么需要只能配置HTTPS。

HTTPS操作流程

通过frp配置HTTPS非常方便,参考文档如下:
https://gofrp.org/docs/examples/https2http/
只需要修改内网机器frpc.ini 配置文件

[common]
server_addr = x.x.x.x
server_port = 7000

[test_htts2http]
type = https
custom_domains = test.yourdomain.com

plugin = https2http
plugin_local_addr = 127.0.0.1:80

# HTTPS 证书相关的配置
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

配置的秘钥文件路径需要是绝对路径,注意挂载到容器内。配置完成之后可以在管理后台发现
在这里插入图片描述

错误经验整理

frpc服务连接异常

[proxy.go:796] [cfdf4e1b451ddbd1] [web] connect to local service [127.0.0.1:8088] error: dial tcp 127.0.0.1:8088: connect: connection refused

需要指定local_ip =

frpc启动异常login to server failed

frpc启动异常login to server failed
解决方式:
frpc.ini客户端配置文件原来的[common]配置中加入
tls_enable = true

Chrome浏览器无法访问

参考本文:【HTTP和HTTPS事项整理.HTTP注意事项】模块

部分ios用户打开链接时http会自动变成https
参考本文:【HTTP和HTTPS事项整理.HTTP注意事项】模块

最后

以上就是炙热火为你收集整理的通过frp搭建属于自己的免费稳定的内网穿透服务介绍部署对比HTTP和HTTPS事项整理错误经验整理的全部内容,希望文章能够帮你解决通过frp搭建属于自己的免费稳定的内网穿透服务介绍部署对比HTTP和HTTPS事项整理错误经验整理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部