frp 下载链接:https://pan.quark.cn/s/5ea28f097442
文章来源:frp | 开源内网穿透利器,速速用起来 (qq.com)
概述
1、frp 是一款高性能的反向代理应用,专注于内网穿透,采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。
2、在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
3、此外,还可以通过 xtcp 实现 P2P 通信。
4、使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
需求场景
比如希望实现在公司通过外网访问家用电脑相关服务(网站、远程桌面等)的功能。且即使没有域名也可通过公网访问。
1、需要一台外网可访问的有固定 ip 的云服务器。
2、再就是一台外网无法访问的无固定 ip 的本地家用电脑。
配置文件介绍
# 服务端配置(frps.toml)
bindPort = 7000 # frp服务的特定端口,防火墙也需放开该端口
# 服务面板可查看frp服务状态信息
webServer.addr = "0.0.0.0" # 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0
webServer.port = 7500 # 后台管理端口
webServer.user = "admin" # (可选)后台登录用户名
webServer.password = "admin" # (可选)后台登录密码
transport.tls.force = true # 服务端将只接受TLS连接
auth.method = 'token' # 客户端访问验证方式
auth.token = "123123" # 客户端访问验证密码,frpc要与frps一致
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
vhostHTTPPort = 8000
vhostHTTPSPort = 45443
# 客户端配置(frpc.toml)
transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "x.x.x.x" # 公网服务器ip
serverPort = 7000 # 服务端端口
auth.method = 'token' # 客户端访问验证方式
auth.token = '123123' # 客户端访问验证密码
[[proxies]]
name = "test-tcp" # 客户端服务名
type = "tcp" # 通讯方式
localIP = "127.0.0.1" # 需要暴露的服务的IP
localPort = 3389 # 将本地3389端口的服务暴露在公网的5000端口
remotePort = 5000 # 暴露服务的公网入口
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
customDomains = ["域名或ip"]
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["域名或ip"]
老版本是 ini 后缀的配置文件,新版本现在是 toml 后缀配置文件。
公网服务器选择
1、可以选择各大服务商的体验产品,免费限时使用。
2、阿里云服务器:https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=y7wtz5sg
举例
环境描述
这里全部使用本地虚拟机实现,和使用公网服务器效果都一样。
- 中转(模拟公网)服务器(Linux):192.168.49.191
- 被连接的客户端(Linux):192.168.49.141
- 主动连接的客户端(Windows):192.168.49.156
发布 ssh 和 http 服务
将程序解压并放进中转服务器。
在中转服务器的程序目录中执行以下命令,创建并编辑配置文件。
vi frps.toml
将以下内容放入配置文件,然后保存退出。
bindPort = 7000
auth.token = "111111"
# 服务端仪表盘的端口,可以用浏览器访问查看
webServer.addr = "0.0.0.0"
webServer.port = 7500
# 服务端仪表盘的用户密码
webServer.user = "admin"
webServer.password = "admin"
# 虚拟主机端口
vhostHTTPPort = 8080
执行以下命令启动 frp 服务。
chmod u+x frps
./frps -c ./frps.toml
执行命令后会提示 frp started successfully,没有报错就 ok 了。
接下来关闭防火墙(或者单独放行 7000、7500 端口),如果是云服务,就在安全组以及系统防火墙上放行对应端口,具体命令就不说了。注意后续使用的端口也需要对应放行。
然后通过浏览器访问以下地址。
http://192.168.49.191:7500/
输入账号密码登录即可访问到管理页面。
将程序解压并放进被连接的客户端上。
在被连接的客户端程序目录中执行以下命令,创建并编辑配置文件
vi frpc.toml
将以下内容放入配置文件
serverAddr = "192.168.49.191"
serverPort = 7000
auth.token = "111111"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["192.168.49.191"]
vhostHTTPPort = 8080
执行以下命令启动 frp 客户端
chmod u+x frpc
./frpc -c ./frpc.toml
此时在管理页面可以看到两个服务接入,一个 tcp(ssh)、一个 http(web)
tcp
http
在主动连接的客户端上执行命令或者打开浏览器访问链接
ssh root@192.168.49.191 -p 6000
http://192.168.49.191:8080/dashboard/
此时连接上的是被控客户端
用另一台设备也尝试访问这个地址,发现任何人只要能访问到 192.168.49.191:6000,即可以尝试远程连接被控客户端,这......主动给黑客发布了一个肉鸡是吧,滴、好人卡,那绝对是不能当这个大好人的。
stcp 类型
服务端的配置和上面相同即可。
在被连接的客户端上用以下内容替换上面的配置文件。
serverAddr = "192.168.49.191"
serverPort = 7000
auth.token = "111111"
[[proxies]]
name = "ssh"
type = "stcp"
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 22
remote_port = 6000
将程序解压并放进主动连接的客户端上(这一步在上个例子中是没有的)。
在主动连接的客户端程序目录中创建配置文件,并放入以下内容(这一步在上个例子中是没有的)。
serverAddr = "192.168.49.191"
serverPort = 7000
auth.token = "111111"
[[visitors]]
name = "ssh_visitor"
type = "stcp"
# 要访问的 P2P 代理的名称
serverName = "ssh"
secretKey = "123456"
# 绑定本地端口以访问 ssh 服务
bindAddr = "127.0.0.1"
bindPort = 5555
最后两边正常启动服务,然后连接端输入以下命令即可访问到被控端
ssh root@127.0.0.1 -p 5555
此时只有你自己可以访问目标服务,上述安全问题解决。
当然,程序有没有其他安全问题这里就暂且不论了。
xtcp 类型
应用场景:在传输数据时希望流量不经过服务器的场景(点对点隧道)。
原理:简单来说就是双方首次通话建立连接时需要经过服务器,然后服务器帮助双方直接建立连接隧道,后续数据转发时就不需要经过服务器了,通过双方直接建立的连接隧道传数据即可,可以避免公网服务器带宽有限带来的瓶颈。但是这个功能很多时候无法实现,主要是因为运营商的 nat 原因(nat 是啥这里就不解释了),nat 有很多种类型,有些 nat 类型之间没法实现这个功能,所以当 xtcp 无法正常建立点对点隧道时,后续工作流程就还是和 stcp 一样了。
总结
1、上述主要还是在讲个人使用场景,可以满足个人的一些特殊需求。
2、其实这个工具黑客也都会使用,主要用来实现内网穿透效果,如果你电脑上杀毒软件没关的话,程序只要在电脑上落地,可能就会被直接查杀,因为很多安全软件都把它识别为黑客工具了,没办法,工具太好用了。
3、不过没关系,个人正常用的话,让安全软件直接信任就可以了。
4、有人问个人使用场景会用了,那黑客怎么用?这个问题就不多解释了,配置方法其实都是一样的。