概述
导读 | 之前的教程介绍的frp内网穿透都是用tcp模式,但是tcp模式是直接把端口映射到公网IP上,很容易被扫描爆破,还是存在一定的风险。我们可以使用frp提供的stcp模式来避免公开暴露端口,同时访问者也要运行一个frpc作为接收转发。 |
frps配置
作为中间传输的服务器端的frps配置不变,参考之前的文章,如果想自定义其他端口,注意两端的frpc中的"server_addr"、"server_port"参数要一致。frps用到的端口要在防火墙或者宝塔那里放行。
frps.ini
[common]
bind_port = 7100
token=12310086N
dashboard_port = 7501
dashboard_user = admin
dashboard_pwd = admin123
客户端
我们以windwos的远程桌面为例。frpc两端分为外部的控制端和处于内网中的受控端。
内网中的受控端
编辑 fcpc.ini文件
[common]
server_addr = 服务器ip
server_port = 7100
token=12310086N
[secret_rdp]
type = stcp
sk = 58iD9tfjPIHQ0dWO
local_ip = 127.0.0.1
local_port = 3389
frpc.exe -c frpc.ini
外网的控制端
编辑 fcpc.ini文件
[common]
server_addr = 服务器ip
server_port = 7100
token=12310086N
[secret_rdp_visitor]
type = stcp
role = visitor
sk = 58iD9tfjPIHQ0dWO
server_name = secret_rdp
bind_addr = 127.0.0.1
bind_port = 30009
frpc.exe -c frpc.ini
牵线成功
两端都显示连接成功了,frp的在线面板里也看到stcp中多了"secret_rdp"一个连接记录。
连接
我们在外网的控制端,打开远程桌面,输入 "127.0.0.1:30009",就弹出来连接成功的登录界面了。
原理
原理就是两端的frpc启用stcp模式,控制端frpc把本地端口绑定到受控端的frp服务上,访问本地端口的请求就被穿透到内网frpc里。控制端必须运行访客模式的frpc表明身份才会被frps接纳再穿透。
服务名
[secret_rdp] [secret_rdp_visitor] 之类的服务名可以自定义,见名知意即可。
受控端
受控端中frpc读取配置文件:
- “[secret_rdp]”服务中,以stcp模式,把受控端本地的3389转发到服务器的frps上。
- "sk"是连接到“[secret_rdp]”服务的密钥,连接请求中的"sk"不一致,不允许连接。
- sctp模式以服务名的形式匹配,不再需要remote_port。
控制端
- 控制端中的配置: [secret_rdp_visitor]服务中"role=visitor"是指定本机的服务为访问者的stcp模式。
- "sk"密钥。
- 控制端中的“server_name”指的是是受控端中服务名,两者要连接的话,服务名必须一致。
- 控制端中的"bind_addr"必须是"127.0.0.1","bind_addr"、"bind_port"这两个参数是指本地端口。
流程
控制端frpc读取配置文件和frps连接,控制端frpc的[secret_rdp_visitor]服务配置指定了,要frps把本地30009端口和受控端的“[secret_rdp]”服务绑定上。控制端访问本地30009端口的请求被frpc转发到frps上,frps再将请求转发到受控端的“server_name”服务上。“server_name”服务里也指明了受控端哪些端口响应。
总结
流程就是frpc指定控制端使用stcp访问,不再直接把受控端直接映射到公网端口上,也避免被扫描爆破的风险,安全的暴露内网服务。这一套下来比较绕,如果没看懂,照着教程操作一次,多读几遍上面的步骤,理解了就豁然开朗了。同时也可以着手实践安全的暴露其他的内网服务,比如MySQL:指定控制端访问,本地的33306端口的响应由内网的MySQL 3306响应。Linux就该这么学
最后
以上就是默默黑夜为你收集整理的FRP中安全地暴露内网服务的全部内容,希望文章能够帮你解决FRP中安全地暴露内网服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复