我们在上一篇文章内网穿透神器frp——实现在家远程办公_mac,rdp,windows_黄腾霄的博客-CSDN博客中介绍了如何使用frp的tcp模式,在公网暴露内网设备的tcp服务。还根据此技术实现了对内网设备的远程桌面服务访问。今天我们来分析下这种方式存在的问题,以及可以参考的解决方案。


Frp的TCP模式问题

这里主要存在2个问题。

第一个是安全问题:

试想一下,frp的tcp模式相当于你的设备直接向公网暴露了一个tcp端口。任何设备都可以尝试连接这个端口。这里就会有很大的安全风险。

第二个问题是网络问题:

我的所有请求都需要进行frp的服务器进行中转,这里势必会造成比较大的网络延时。(尤其是我们大部分的vps是部署在国外)这对我们的服务响应速度会造成较大影响。

解决安全问题(stcp)模式

对于安全问题,frp的思路是,既然这些服务有可能被坏人攻击,那我们只要限制特定设备能够使用这个端口就好了。

那么问题来了,我怎么知道哪些设备是允许使用的呢?

服务端配置?那就又陷入了内网穿透的问题。

最简单的方法是使用密钥验证。这就是frp的Secret TCP(stcp)模式的思路。

如下图所示,frp客户端1需要暴露一个tcp端口。于是他在向服务端注册时,额外传了一个密钥。

所有其他设备期望访问这个端口,必须要先验证这个密钥。

这样一来,我们就需要在发起请求的设备上也配置一个frp客户端,通过这个客户端带着密钥发起请求。

如何配置

  • 服务端:配置仍然同默认配置一致,直接运行即可
  • 客户端1:配置需要将type改为stcp,并且增加一个sk字段。这里不需要远端端口,因为不公开
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000[rdp]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
# 远程桌面的本地端口号
local_port = 3389
  • 客户端2:
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000[rdp_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = rdp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
# 绑定本地端口用于访问 远程桌面 服务
bind_addr = 127.0.0.1
bind_port = 6000

此时,你在客户端2,使用127.0.0.1:6000即可访问客户端1的远程服务。

解决网络问题(xtcp)模式

思考一下,我们的frp服务器主要目的是为了解决两台设备相互识别的情况。在正式运行时,其实并不需要服务端做什么事情。

frp客户端就好比两个相亲的对象,frp服务端是媒婆。媒婆介绍完之后,就应该有相亲对象自己聊天了。

这个就是点对点模式(p2p)。在frp中,这个可以通过设置xtcp实现。

如何配置

  • 服务端:配置需要增加一个udp端口 7001,增加完之后就是如下
# frps.ini
[common]
bind_port = 7000
bind_udp_port = 7001
  • 客户端1:配置需要将type改为xtcp即可
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000[rdp]
type = xtcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
# 远程桌面的本地端口号
local_port = 3389
  • 客户端2:配置需要将type改为xtcp即可
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000[rdp_visitor]
type = xtcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = rdp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
# 绑定本地端口用于访问 远程桌面 服务
bind_addr = 127.0.0.1
bind_port = 6000

此时,你在客户端2,使用同样的方式,以127.0.0.1:6000即可访问客户端1的远程服务。

不过需要注意的是,目前frp的p2p服务还不完善,很多nat设备还是不能够穿透的。

此时大家还是需要切换回stcp来使用。


参考文档:

  • 2020-1-7-如何使用mac电脑连接你的windows设备 - huangtengxiao
  • frp/README_zh.md at master · fatedier/frp
  • 2020-1-10-内网穿透神器frp - huangtengxiao
  • fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
  • 内网穿透神器frp——实现在家远程办公_mac,rdp,windows_黄腾霄的博客-CSDN博客

本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。

内网穿透神器frp之进阶配置——stcp及p2p模式相关推荐

  1. 内网穿透神器Frps一键安装脚本及设置教程

    frps 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发. *因为frps是g ...

  2. 一款很好用的内网穿透工具--FRP

    前言 对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题. 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy.FRP 是一 ...

  3. 启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明

    内网穿透工具 FRP 公网服务端.内网客户端 frps.ini .frpc.ini 配置文件常用设置展示及说明 公网服务端 frps.ini 配置文件常用设置 公网服务端配置文件:frps.ini [ ...

  4. 推荐几款超好用的内网穿透神器,总有一款适合你!

    前言 本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法. 0x01 nps-npc 1.1 简介 nps是一款轻量级.高性能.功能强大的内网穿透代理服务器.目前支持 ...

  5. 内网穿透-利用frp进行远程桌面控制(window服务端,window客户端)

    内网穿透-利用frp进行远程桌面控制(window服务端,window客户端) 参考链接 https://blog.csdn.net/weixin_38416696/article/details/1 ...

  6. 中秋征文 | 【云原生之Docker】使用docker部署内网穿透工具FRP

    中秋征文 | [云原生之Docker]使用docker部署内网穿透工具FRP 一.卷首语 二.FRP介绍 1.frp简介 2.frp支持的系统 3.本次frp部署目的 三.检查本地docker状态 1 ...

  7. 内网穿透神器!远程办公时代的生产力工具

    点关注公众号,回复"1024"获取2TB学习资源! 新冠疫情催生了无数的居家办公族,电脑设备的远程连接便成了刚需,但是由于大多数公司的网络和绝大多数家庭网络都没有公网IP地址,VP ...

  8. 有了内网穿透神器 ngrok ,个人电脑也能做服务器

    平常我们访问的网站都是由具有公网ip的服务器提供的,如果想做自己的网站也得要有个自己的服务器(当然也可以使用GitHub这种做静态网站,下次可以说说),其实服务器简单来说也就是一台电脑而已,那可不可以 ...

  9. 架设游戏私服——内网穿透工具frp

    架设游戏私服--内网穿透frp 1. 服务端 2. 客户端 3. exe消失之谜 适用场景: 拥有一台云服务器服务商提供的拥有公网ip的低配服务器. 拥有一台高配家用机,但是位于动态ip的家庭网络甚至 ...

  10. 自建内网穿透之frp

    准备需求:一台公网服务器(VPS) 要求:开启6000,7000两个端口 前往GitHub下载对应文件 链接地址:https://github.com/fatedier/frp/releases 步骤 ...

最新文章

  1. shell最大出现和连续出现次数_从 1 到 n 整数中 1 出现的次数
  2. 基于Matlab的声波信号处理,基于声卡和Matlab平台的语音信号增强处理系统
  3. cytoscape要求的JAVA版本_微生物研究必备:Cytoscape绘制网络图(一)
  4. .NET 6 Preview5+VS2022实战千万并发秒杀项目,帅爆了(附源码)
  5. 有关进程的一些基本概念
  6. Nginx多进程高并发、低时延、高可靠机制在缓存(redis、memcache)twemproxy代理中的应用...
  7. python自动化测试常见面试题二_思考|自动化测试面试题第二波
  8. Qt文档阅读笔记-官方2D Painting Example实例解析
  9. Java客户端开发是什么_客户端桌面应用一般是用什么技术开发的?
  10. 别在分答上问我问题了
  11. 一文搞懂JVM架构:java数据结构和c语言数据结构区别
  12. 中华老黄历下载手机版免费_中华老黄历下载安装到手机-中华老黄历软件下载5.4.5 官方下载最新版-东坡下载...
  13. 计算机微信接收excel打不开怎么回事,微信打不开收到的Excel
  14. java dismiss_为什么我的dismiss()方法无法关闭自定义警报对话框
  15. 大数据———Flume与Kafka整合
  16. 沙盘游戏让我变成“诗人”
  17. HTML5开发环境搭建
  18. 获取某种颜色在图片中所占的比例
  19. c语言 while 阶乘之和,c语言阶乘之和问题示例详解
  20. Linux下GUI开发:GTK+ 2.0 + anjuta + glade

热门文章

  1. Yagmail通过QQ邮箱发送邮件实例
  2. java学习网络编程遇到异常java.net.SocketException:Software caused connection abort: socket write error
  3. 深度学习这些年那些超重要的idea回顾总结
  4. IBM服务器微软集群安装
  5. 转(Google 全国 地图 纠偏数据 偏移数据 火星坐标修正 方案 )
  6. html5新增哪些属性,html5中新增哪些form属性
  7. Spring-几种组件注册方式
  8. DataFrame的ix方法
  9. JAVA关键字final修饰类,深入分析java中的关键字final
  10. 笔耕不辍 | Redis入门