赞
踩
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。frp 采用 C/S 模式,将服务端部署在具有公网 IP 机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
下图是frp官网:https://gofrp.org/
大家可以去看:傻瓜式-Web面板的轻量级、高性能内网穿透工具:nps使用教程
GitHub地址:
https://github.com/fatedier/frp,看下图就知道认可度有多高吧。
由于frp是go语言开发,因此可以直接下载可执行程序,没有任何依赖。一般通过GitHub的releases下载:
https://github.com/fatedier/frp/releases,我一般用下图这两个版本。
Linux用通用解压命令:tar -xf
frp_0.37.0_linux_amd64.tar.gz
window直接用工具进行解压吧。最终得到frps、frpc这两个可执行程序,以及示例配置文件。
按照如下配置frps.ini文件,在我的公网Linux服务器上执行frps -c frps.ini就可以成功运行。当然也可以使用systemd\frps.service将frps加入系统自启之类的,不过我还是喜欢用supervisor工具管理这些程序。
- [common]
- # 与客户端建立连接端口
- bind_port = 7000
- # 与客户端校验的token
- token = my_token
- # 提供web界面端口
- dashboard_port = 7500
- # web界面登录用户名
- dashboard_user = admin
- # web界面登录密码
- dashboard_pwd = password
按照如下配置在我的window电脑上的frpc.ini文件,值得注意的是remote_port实际是公网Linux服务器那边监听的端口,也就是说frpc通过server_port连接到frps上,通知frps启用remote_port来穿透到内网。运行客户端程序:frpc -c frpc.ini
- [common]
- # 连接frps的IP地址
- server_addr = 192.168.1.100
- # 连接frps的端口
- server_port = 7000
- # 和frps服务端校验的token
- token = my_token
-
- # 这里取名随意,一般有意义就行
- [stream]
- # 看官网有这些类型: TCP,UDP,HTTP,HTTPS,STCP,SUDP
- # 去这里开始看实例: https://gofrp.org/docs/examples/ssh/
- type = tcp
- # 本地访问的IP地址
- local_ip = 127.0.0.1
- # 本地访问的端口
- local_port = 8800
- # 在frps服务器上对应的端口
- remote_port = 6600
根据frps的dashboard_port端口访问web服务(
http://192.168.1.100:7500/),可以看到如下的tcp里面有一条内网穿透的服务可以使用。可以看到左侧的tab页,可以支持好几种内网穿透的协议,不过我一般只用到tcp协议,例如访问内网ssh后台,用起来杠杠的。
为了方便演示,编写了内网的http服务,在/test的方法里面,打印了远程地址,以及http的get请求的一个参数。
- package main
-
- import (
- "fmt"
- "net/http"
- )
-
- func main() {
- http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "RemoteAddr:%s\n", r.RemoteAddr)
- fmt.Fprintf(w, "data:%s\n", r.FormValue("data"))
- })
- http.ListenAndServe("127.0.0.1:8800", nil)
- }
如下图所示当访问服务器的6600端口,实际穿透到访问内网127.0.0.1:8800的服务器。我配置的是tcp协议,因此只要内网的服务是基于tcp协议的,那么就可以对6600端口使用相应的工具去访问。官网示例是访问内网ssh服务:
https://gofrp.org/docs/examples/ssh/。
按照我的理解,画了一张数据流向图。按照数字进行先后顺序进行处理。
内网穿透在ipv6没有普及之前都是刚需啊,例如很多人都会用内网穿透将内网window的3389端口映射,然后就可以在远端使用window自带的mstsc进行远程桌面的访问。也可以将内网Linux服务器的ssh端口穿透到公网,就可以在远程访问内网的ssh后台了。爱了爱了frp牛逼。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。