frp是一个用于内网穿透的工具,基于Go语言.
与其他内网穿透不同的是,他需要自己提供服务端,也就是说,访问速度与服务器带宽有很大关联
原理图:
github下载地址Releases-frp
官网Frp官方文档
本地服务器和云主机服务器均需要下载frp,放至任意位置,都可以
其中,包含两个主要的exe文件(或文件):
- frps - 用于客户端连接
- frpc - 用于服务端监听
单连接内网穿透
云主机服务器编辑frps.ini
[common]
bind_port = 1234 #frp程序本身需要占用一个端口运行
vhost_http_port = 555 #外网访问的端口,特定的http类型
由于我们打算通过http://10.10.10.12:555/来访问网站,故设置外网访问端口为555,随后运行服务端的frp程序
./frps -c ./frps.ini
本地服务器编辑frpc.ini
本地网站(或tcp)地址为8111
服务端地址:10.10.10.12
[common]
server_addr = 10.10.10.12
server_port = 1234
[ssh] #标签内容可更改
type = tcp
local_ip = 127.0.0.1
local_port = 8111
remote_port = 555 #这个代表要映射的端口
随后运行本地服务器的frp程序
frpc -c ./frpc.ini #运行代码
另外需要提到的是,如果需要从外网ssh远程连接操作内网的服务器,是需要ssh穿透一下,只需在frpc.ini添加一个type为tcp类型的,地址不变,端口要一个新的
注意
frps.ini中的vhost_http_port并不是必需,只是为了限制服务端允许映射的端口,为了安全,所以限制允许映射的端口.
多个内网穿透
多连接时,需要更改几个地方
实例:映射555,556两个端口
第一是云服务器的frps.ini
[common]
bind_port = 7000
vhost_http_port = 555,556 #这里有两个
第二是本地服务器的frpc.ini
注意:这里因为有两个连接,所以应当启动两个frpc
[common]
server_addr = 10.10.10.12
server_port = 1234
[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 8111
remote_port = 555 #映射到555
这是第一个,第二个的frpc.ini应当更改frpc.ini中的[ssh1]的标签名和remont_port
如:
[common]
server_addr = 10.10.10.12
server_port = 1234
[ssh2]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 556
当然frp提供的功能远不止这些,以上介绍的都是最核心的功能,还提供:
- 为本地 HTTP 服务启用 HTTPS
- 对外提供简单的文件访问服务
- 转发 Unix 域套接字
- 转发 DNS 查询请求
- 通过自定义域名访问内网的 Web 服务
- 安全地暴露内网服务
- 点对点内网穿透(正在开发中)
详细可以查看frp的官网