文章目录

  • 介绍
    • 简述
    • 功能列表
    • 原理
  • 部署
    • 部署
    • 客户端部署
      • 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 = 8443dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = XXXtcp_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.complugin = 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搭建属于自己的免费稳定的内网穿透服务相关推荐

  1. frp + nginx 配置多人共用的http 内网穿透服务

    frp + nginx 配置多人共用的http 内网穿透服务 一. 前言 frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp . http 和 https.可 ...

  2. 快速搭建使用FRP内网穿透服务

    快速搭建使用FRP内网穿透服务 frp是一款流行的跨平台开源免费内网穿透工具,支持 Windows.macOS 与 Linux.你只需一台快速稳定的服务器即可愉快地进行内网穿透,实现家中设备公网直接访 ...

  3. frp内网穿透服务搭建

    GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewa ...

  4. 使用frp搭建内网穿透服务

    什么是内网穿透?为什么要用内网穿透?内网穿透能做什么? 以上问题我只想说,如果你自己没有公网IP,但是你又想在公网上访问家里的服务,或者是在公司远程家里的电脑,那么你就需要内网穿透服务. 内网穿透需要 ...

  5. UBNT ER-X 路由器DDNS配置和frps内网穿透服务搭建

    本文基于UBNT EdgeRouter ER-X路由器,在不额外增加硬件的情况下,实现DDNS,搭建frps内网穿透服务. Teamviewer开始收费了,向日葵之类用起来又不顺手,试来试去还是Win ...

  6. 手把手教你,搭建内网穿透服务

    我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...

  7. 搭建内网穿透服务一步一步讲解教程

    我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...

  8. 搭建个人内网穿透服务

    内网穿透 本地电脑上的服务无法通过互联网让其他人访问到,通过内网穿透技术可以为自己本地的服务提供互联网入口,无需将本地服务部署在服务器上,便可以让其他人可以访问 前提准备 本地web服务,访问8080 ...

  9. 【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机

    文章目录 前言 1.Mcsmanager安装 2.创建Minecraft服务器 3.本地测试联机 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射内网端口 5.远程联机测试 6. ...

最新文章

  1. 对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解
  2. java的关键字与保留字
  3. Liferay 6.1 用maven 构建 service-builder的巨大BUG的修复
  4. 中国移动OnetNet云平台 使用以太网传输数据流步骤
  5. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了
  6. 方程的解_NOI导刊2010提高(01) 组合数
  7. 30幅让人震撼的精美高速摄影作品欣赏
  8. linux xguest用户,在/etc/passwd中得到普通用户列表
  9. php 0和字符串比较为真
  10. 趣味图解 | 什么是缺页错误 Page Fault?
  11. 顶会集结+深度解析:医疗+AI如此火爆,NLP如何赋能?
  12. 旅行商问题与蚁群算法
  13. (阿里/百度/腾讯)云服务器建站全过程(Ubuntu Server 16.04.1 LTS 64位)
  14. 基带丢失、IMEI丢失、手机无信号--高通通用解决办法
  15. 微信发朋友圈/评论/点赞/搜索/购物车的测试点
  16. IPv4与IPv6之间的区别
  17. ORACLE EXP/IMP详解
  18. Java虚拟机工作原理详解 ( 二 )
  19. mw150um 驱动程序win10_mw150um驱动下载-MERCURY水星MW150UM 150M无线USB网卡驱动2.0 官方最新版-东坡下载...
  20. 生鲜自提柜能否疫战成名?未来是一片蓝海还是一地鸡毛?

热门文章

  1. 利用CSS和JS实现抖音超火3d照片墙
  2. 软件工具在材料研究领域的应用
  3. 【安信可A9G专题②】A9G在微信公众号上的定位功能笔记分享;
  4. Redis学习(List数据类型)
  5. python re 简单实例_Python re.search方法代码示例
  6. 思科模拟器 --- 交换机的基本配置与管理
  7. 定义类C++ primer目录
  8. 【word】正文双栏,尾注只占页面半边
  9. php报错: file_put_contents(): failed to open stream 的解决方法
  10. 数据结构(二叉树相关、满、完全二叉树、霍夫曼树、排序方法及时间复杂度总结、)笔记-day11