FRP 是 Github 上开源的一款内网穿透工具,点击前往项目地址,该项目分为 frps 服务端和 frpc 客户端,通过在拥有公网 IP 的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置好后就可以实现通过公网 IP 访问内网的内容了

官方有提供中文文档,可以根据文档进行操作,虽然他的文档对配置项都有介绍,但我个人觉得他这个文档逻辑结构梳理的不是很清楚,有些配置项不知道该不该用,不知道该在哪用,不知道怎么用,所以我自己写个文章简单记录一下做个笔记

本文介绍的是基于 Docker 运行 frps 和 frpc,并通过 TCP 协议简单穿透 SSH 和 HTTP,在观看本文之前请确保你的机器已经安装 Docker

服务端搭建 frps

连接拥有公网 IP 的服务器,在合适的位置创建frps目录作为工作空间

# 创建 frps 目录作为工作空间
$ mkdir frps # 创建服务端配置文件
$ touch frps/frps.toml # 编辑服务端配置文件
$ vim frps/frps.toml

服务端配置文件内容如下所示

# 服务器的公网IP
bindAddr = "服务器的公网IP"
# 与客户端建立连接的端口
bindPort = 7000 # 服务端控制面板
webServer.addr = "服务器的公网IP"
# 访问控制面板的端口号
webServer.port = 7500
# 控制面板的用户名和密码,暴露在公网的服务请使用严谨一些的用户名密码
webServer.user = "admin"
webServer.password = "123456" # 配置服务端的鉴权,这里使用Token进行鉴权,客户端必须用指定的Token才可以与服务端建立连接,防止滥用
auth.method = "token"
auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug" # 配置服务端只打印warn级别的日志,并将日志输出到指定目录(注意这个目录指向的是容器内的目录)
log.level = "warn"
log.to = "/opt/frps/frps.log"

配置文件编写完成后下载fatedier/frps:v0.61.2镜像,不同与网上流传的教程(他们啥版本都有),该镜像应该是原作者提供的,镜像仓库名称和作者 Github 名称一致,且该镜像会及时跟进软件版本,v0.61.2 是截止到本文发布时的最新的版本

# 下载Docker镜像,Docker网络很迷,下载失败也不要紧,后面会帮你解决
$ docker pull fatedier/frps:v0.61.2 # 启动服务端 frps,推荐网桥用 host 类型,将刚刚创建的工作空间目录映射到容器中并指定配置文件启动
$ docker run --name frps \
--restart always \
--network host \
-e TZ=Asia/Shanghai \
-v ./frps:/opt/frps \
-d fatedier/frps:v0.61.2 -c /opt/frps/frps.toml

执行命令后如果容器正常运行,没有自动停止,就算启动成功了,日志文件空白属于正常现象,因为配置文件中设置了只打印 warn 级别日志,启动成功的 info 级别日志不会打印,通过容器运行状态判断是否启动成功即可

启动成功后可以通过之前配置的控制面板检查 frps 的状态,之前配置的是 7500 端口,这里进行访问测试,需要注意该容器是使用 host 网桥启动的,如果服务器中启用了防火墙需要放行之前配置的 7000 和 7500 端口

客户端搭建 frpc

如果你是 win 或移动端用户,请自行访问发行页面下载合适的版本以及客户端软件,这里仍然以 Linux Docker 环境举例搭建 frpc 客户端

同之前流程相似,在合适的位置创建frpc目录作为工作空间

# 创建 frpc 目录作为工作空间
$ mkdir frpc # 创建客户端配置文件
$ touch frpc/frpc.toml # 编辑客户端配置文件
$ vim frpc/frpc.toml

客户端配置文件内容如下所示

# 与服务端建立连接,跟上面的配置要对应
serverAddr = "服务端IP地址"
serverPort = 7000 # 配置Token鉴权,要与服务端一致
auth.method = "token"
auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug" # 配置日志信息
log.level = "warn"
log.to = "/opt/frpc/frpc.log"

配置文件编写完成后下载fatedier/frpc:v0.61.2镜像,强烈建议与服务端版本一致

# 下载Docker镜像,Docker网络很迷,下载失败也不要紧,后面会帮你解决
$ docker pull fatedier/frpc:v0.61.2 # 启动客户端 frpc,将刚刚的工作空间映射到容器中并指定配置文件启动
$ docker run --name frpc \
--restart always \
-e TZ=Asia/Shanghai \
-v ./frpc:/opt/frpc \
-d fatedier/frpc:v0.61.2 -c /opt/frpc/frpc.toml

同之前一样,日志文件是空白的,只要容器保持运行没有中途停止就算运行成功了

内网穿透SSH

先写一个 SSH 内网穿透的配置,将本机的 22 端口映射到远程的 8001 端口,编辑客户端配置文件frpc.toml在原基础上添加内容

# 与服务端建立连接,跟上面的配置要对应
serverAddr = "服务端IP地址"
serverPort = 7000 # 配置Token鉴权,要与服务端一致
auth.method = "token"
auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug" # 配置日志信息
log.level = "warn"
log.to = "/opt/frpc/frpc.log" # 该内网穿透起名为SSH,annotations中随便写了一些备注,基于TCP协议将本机的22端口映射到公网的8001
[[proxies]]
name = "SSH"
annotations = {title = "SSH远程连接", fuck = "test", desc = "annotations是该连接的备注信息,里面的key和val是随便写的,在服务端控制面板可以看到"}
type = "tcp"
localIP = "192.168.137.10"
localPort = 22
remotePort = 8001

内网穿透配置完成后docker restart frpc重启容器,就可以使用公网IP在外地SSH远程本机了,控制面板看到连接信息

内网穿透HTTP

FRP 支持 HTTP/HTTPS 协议的内网穿透,但是使用 HTTP 类型的内网穿透不是很方便,还需要配置一个域名,HTTPS 则更麻烦一些,还需要配置 SSL 证书,这里选择继续使用基于 TCP 协议的网站内网穿透

我本机运行了 Nginx,就以他为例子继续编辑客户端配置文件frpc.toml,在原基础上再在加一个内网穿透

# 与服务端建立连接,跟上面的配置要对应
serverAddr = "服务端IP地址"
serverPort = 7000 # 配置Token鉴权,要与服务端一致
auth.method = "token"
auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug" # 配置日志信息
log.level = "warn"
log.to = "/opt/frpc/frpc.log" # 该内网穿透起名为SSH,annotations中随便写了一些备注,基于TCP协议将本机的22端口映射到公网的8001
[[proxies]]
name = "SSH"
annotations = {title = "SSH远程连接", fuck = "test", desc = "annotations是该连接的备注信息,里面的key和val是随便写的,在服务端控制面板可以看到"}
type = "tcp"
localIP = "192.168.137.10"
localPort = 22
remotePort = 8001 # 该内网穿透起名为NGINX-HOME,基于TCP协议将本机的80端口映射到公网的8002
[[proxies]]
name = "NGINX-HOME"
type = "tcp"
localIP = "192.168.1.183"
localPort = 80
remotePort = 8002

docker restart frpc重启容器后访问公网查看效果

Docker镜像下载失败

DockerHub 网络阴晴不定,下载镜像经常失败,现在的 Docker 镜像加速地址也好多都失效了,我个人比较喜欢先把镜像下载到本地,然后上传到服务器载入到 Docker 引擎中

为此我特意编写了一款开源工具 did-tool(Docker image download tool,该工具为 Java 语言编写可在任意操作系统上运行,可实现无 Docker 环境下使用 HTTP 协议通过代理下载 Docker 镜像文件,镜像文件下载到本地会被打包为xxx.tar文件,只需要上传到服务器后使用docker load -i xxx.tar就可以导入镜像,本文使用的 Docker 镜像文件已准备好,点击下方链接下载即可

文件下载地址

自己做博客SEO太差啦没有人,原文地址求你点进去看:https://typecho.hanzhe.site/archives/15.html

下载frps_v0.61.2.tarfrpc_v0.61.2.tar两个文件即可,分别对应客户端和服务端的 Docker 镜像,如果你不想使用 Docker,里面也提供了 win 和 linux 下的可执行文件

下载地址:https://hanzhe.lanzouw.com/b02a8n5pza 访问密码:ek3v

基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)的更多相关文章

  1. Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问

    Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 ​ 关键词: frp内网 ...

  2. frp内网 穿透映射使内网svn可外网访问

    起因 公司svn目前部署在内网服务器上,现在想在家中也可以使用,因此需要外网访问内网的工具 经过 使用过几个产品: utools,一个小巧的windows下的工具,内网映射只是它的一个小功能,支持tc ...

  3. 树莓派FRP内网穿透及自启动

    内网穿透的步骤和文件存档 实验室在远方部署了电脑主机来采集数据和图片,每次去调试会很麻烦,因而使用FRP内网穿透使得我们可以在实验室访问主机. 主要功能 实现远程可访问和开机自启FRP程序服务 安装和 ...

  4. frp内网穿透(已验证)

    # 云服务器frp内网穿透教程 软件源码在https://github.com/fatedier/frp/releases上,根据系统类型,按需下载 教程术语描述 > A 是有固定IP的云服务器 ...

  5. 今天学到的新知识--使用localtunnel实现内网穿透,感觉很神奇哇~~

    localtunnel 是一个基于 nodejs 的内网穿透工具.通过简单的安装可以实现将内网里的设备的某个端口暴露在公网中以提供服务. 首先你电脑要有node环境 使用本地隧道,对应本地服务的端口号 ...

  6. frp实现基于反向代理的内网穿透

    个人博客主页: xzajyjs.cn frp是什么 简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP.TCP.UDP等众多协议 ...

  7. 【网络】内网穿透方案&FRP内网穿透实战(基础版)

    目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...

  8. frp 内网穿透访问内网Web服务

    ps:最近想要通过域名(公网)访问或者测试在本地搭建的 web 服务(不想在公网IP服务器上再部署个服务,也不想通过teamview等工具远程卡到爆!), 由于本地机器没有公网 IP,无法将域名解析到 ...

  9. frp内网穿透学习

    前言 因为自己在内网,但是目标站在外网,这时候可以通过内网穿透工具,将接收到的请求转发到内网,实现在内网的msf可以控制外网的靶机. 也看了一些Ngrok,花生壳的,发现Ngrok.cc这个看文章说有 ...

  10. 基于Yarp的http内网穿透库HttpMouse

    简介 前几天发表了<基于Yarp实现内网http穿透>,当时刚刚从原理图变成了粗糙的代码实现,项目连名字都还没有,也没有开放源代码.在之后几天的时间,我不断地重构,朝着"可集成. ...

随机推荐

  1. Qt编写视频监控系统74-悬浮工具栏(半透明/上下左右位置/自定义按钮)

    一.前言 在监控系统中一般在视频实时预览的时候,希望提供一个悬浮工具条,可以显示一些提示信息比如分辨率.码率.帧率,提供一堆快捷操作按钮,可以录像.抓拍.云台控制.关闭等操作,参考了国内很多监控厂商客 ...

  2. Qt开源作品26-通用按钮地图效果

    一.前言 在很多项目应用中,需要根据数据动态生成对象显示在地图上,比如地图标注,同时还需要可拖动对象到指定位置显示,能有多种状态指示,安防领域一般用来表示防区或者设备,可以直接显示防区号,有多种状态颜 ...

  3. 微信团队分享:微信后端海量数据查询从1000ms降到100ms的技术实践

    本文由微信技术团队仇弈彬分享,原题"微信海量数据查询如何从1000ms降到100ms?",本文进行了内容修订和排版优化. 1.引言 微信的多维指标监控平台,具备自定义维度.指标的监 ...

  4. 今天记录一下小程序使用微信客服api,而不是小程序客服

    小程序客服缺少很多东西,并且只能使用button的开放能力,所以尝试使用一下微信客服,自己开发客服又比较麻烦,秉着能免费绝不花钱的想法,接下来就直接写代码,也就是api,记录下来方便使用 wx.ope ...

  5. bitset 学习笔记

    引入 顾名思义, \(\texttt{bitset}\) 是用 \(\texttt{bit}\) 组成的 \(\texttt{set}\); 区别于普通的 \(\texttt{bool []}\) 或 ...

  6. biancheng-MongoDB教程

    目录http://c.biancheng.net/mongodb2/ 1NoSQL是什么2MongoDB是什么3Windows安装MongoDB4Linux安装MongoDB5MacOS安装Mongo ...

  7. mac文件目录结构

    详解MAC硬盘中各个文件夹 详解MAC硬盘中各个文件夹 打开Macintosh HD你会发现内中有四个文件夹 分别有--应用程序(Applications).系统(System).用户(User).资 ...

  8. C#客户端Json转DataTable

    本文转自 https://blog.csdn.net/pinebud55/article/details/52240287 感谢pinebud55分享 之前我们有讨论过c#是如何处理json的,在我的 ...

  9. 让存储绿“翼”盎然,天翼云HBlock入选工信部目录!

    近日,中国电信天翼云的自研产品HBlock凭借"存储资源盘活技术"成功入选<国家工业和信息化领域节能降碳技术装备推荐目录(2024年版)>(以下简称<目录> ...

  10. 帮您了解CDN节点如何做到访问加速与安全防护

    本文分享自天翼云开发者社区<帮您了解CDN节点如何做到访问加速与安全防护>,作者:尹****荷 网站业务痛点 在当前网站快速发展的背景下,网站业务突增往往伴随着一系列网络安全隐患.主要会有 ...