frp是一个apache2.0开源的内网穿透软件,对大部分操作系统的适配都非常好,github:https://github.com/fatedier/frp。
基本配置
frp分为frps(服务端)和frpc(客户端)两个可执行文件。当我们访问我们想要的资源时,我们的请求由frps接收,并根据配置文件的规则转移给frpc。所以frps需要部署在有公网IP的服务器上,frpc部署在资源所在的服务器上。
我们选择对应的操作系统和CPU架构,下载并解压frp,需要注意的是,frps和frpc二者版本号必须相同。
windows系统需要在cmd中执行命令。
运行命令可以参考:https://enterdawn.top/%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f%e5%ae%9e%e7%8e%b0%e5%a4%96%e7%bd%91%e8%ae%bf%e9%97%ae%e6%a0%a1%e5%9b%ad%e7%bd%91%e5%86%85%e7%bd%91/
支持的协议
协议 | 说明 |
---|---|
tcp | 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
udp | 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
http | 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。 |
https | 针对 HTTPS 应用定制了一些额外的功能。 |
stcp | 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
sudp | 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
xtcp | 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 |
tcpmux | 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。 |
配置文件
最基本的,frps.ini,指定一个服务端运行所在的端口,同时为了安全起见,最好设置一个验证字符串。
//使用时请删除注释
[common]
bind_port = 7000 //运行端口
token = token_value //验证字符串
frpc.ini中指定服务端IP和配置的服务类型。
//使用时请删除注释
[common]
server_addr = 123.123.123.123//服务端的IP
server_port = 7000 //服务端的端口号
token = token_value //验证字符串,和frps.ini相同
[ssh]//我们以TCP协议转发22端口(即转发SSH连接)为例,“ssh”这个名字只是便于识别,换个名字也行
type = tcp //连接协议
local_ip = 127.0.0.1 //映射到的内网服务IP,我们也可以通过这台机器连接到其他内网资源
local_port = 22//内网服务的端口
remote_port = 6000//用于远程连接的端口,记得在服务端放开这个端口
[ssh2]//另外一个连接
type = tcp //连接协议
local_ip = 192.168.1.100 //一个在frpc所在的局域网中的其他机器
local_port = 22
remote_port = 6001
我们分别运行服务端和客户端,如果没有错误,我们就可以通过 123.123.123.123:6000 对frpc所在的机器进行SSH连接,通过123.123.123.123:6001对frpc所在局域网的IP为192.168.1.100的机器进行连接。
映射http服务
首先我们在frps.ini中指定http访问端口
[common]
bind_port = 7000
vhost_http_port = 8080
然后在frpc.ini中指定访问的域名
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
[web2]
type = http
local_port = 8080
custom_domains = www.yourdomain2.com
记得在域名服务商那里添加解析。
通过浏览器访问 http://www.yourdomain.com:8080 即可访问到处于内网机器上 80 端口的服务,访问 http://www.yourdomain2.com:8080 则访问到内网机器上 8080 端口的服务。当然如果服务端上没有web服务,我们也可以直接把frps.ini中的vhost_http_port设为80,以免输入端口号。
搭建代理
在frpc.ini下面加入:
[http_proxy]
type = tcp
remote_port = 6000
plugin = socks5//代理的协议,用户名和密码
plugin_user = 123
plugin_passwd = 123
本文参考或复制了部分frp官方文档中的文字。