| 之前的教程介绍的frp内网穿透都是用tcp模式,但是tcp模式是直接把端口映射到公网IP上,很容易被扫描,还是存在一定的风险。我们可以使用frp提供的stcp模式来避免公开暴露端口,要求访问者运行一个frpc作为身份认证和流量转发,把 访问者的本地端口绑定到内网frpc服务上。不再公开映射内网frpc端口。 |

作为中间传输的服务器端的frps配置不变,参考之前的文章,如果想自定义其他端口,注意两端的frpc中的"server_addr"、"server_port"参数要一致。frps用到的端口要在防火墙或者宝塔那里放行。
[common] bind_port = 7100 token=12310086N dashboard_port = 7501 dashboard_user = admin dashboard_pwd = admin123

stcp模式的演示,我们以windwos的 远程桌面为例,不再直接把内网的3389端口映射到公网IP的端口上,而是通过stcp模式指定验明访问者分身,要求访问者也要运行一个frpc 作为身份校验和流量转发,让访问者 把访问本地端口的请求转发到内网机器上。
frpc两端分为外部的 "控制端"和处于内网中的 "受控端"。
编辑 fcpc.ini文件。服务[secret_rdp]之类的服务名可以自定义,见名知意即可。
[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文件,服务[secret_rdp_visitor]之类的服务名可以自定义,见名知意即可。
[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"一个连接记录。

控制端启动连接成功时候也会看到frps出现连接成功的日志。

我们在外网的控制端,打开远程桌面,输入 "127.0.0.1:30009",就弹出来连接成功的登录界面了。

原理两端的frpc启用的stcp模式,就是要求frps把一端访问本地端口的请求转发到内网frpc上。一端必须运行访客模式的frpc表明身份才会被frps接纳再转发。
受控端中frpc读取配置文件:
控制端中的配置:
流程就是frpc指定使用stcp访问,要求校验正确身份和服务名后再转发请求,把 访问者的本地端口绑定到内网frpc服务上。不再直接把受控端映射到公网端口上,也避免因为公开被扫描的风险,安全的暴露内网服务。
表达水平有限,多读几遍上面的步骤,就是把 访问者的本地端口绑定到内网frpc服务上,这一套下来比较绕,如果没看懂,照着教程操作一次,理解了就豁然开朗了。
同时也可以着手实践安全的暴露其他的内网服务,比如MySQL:指定控制端访问本地的33306端口的响应由内网的MySQL 3306响应。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31524109/viewspace-2775645/ ,如需转载,请注明出处,否则将追究法律责任。