文章目录
一、简介
frp
是一个专注于内网穿透的高性能的反向代理应用,支持 TCP
、UDP
、HTTP
、HTTPS
等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP
节点的中转暴露到公网。
为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
源码地址:https://github.com/fatedier/frp
官网文档:https://gofrp.org/docs/
二、准备
- 一台具有公网IP服务器,以下简称服务端
- 一台或若干台需要被外网访问的本地服务器,以下简称客户端
三、下载
下载地址:https://github.com/fatedier/frp/releases
打开找到我们要下载的版本,当前最新版为v0.42.0
根据自己需要,下载对应操作系统的版本
四、安装
frp
采用 Golang
编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。
我们将下载好的压缩文件上传到服务端和客户端服务器,window
系统直接手动解压即可,我们主要介绍下linux
解压。
解压
tar -zxvf frp_0.41.0_linux_amd64.tar.gz
重命名
mv frp_0.41.0_linux_amd64 frp
进入frp
根目录
cd frp
五、配置
1.服务端基础配置
打开服务端服务器进入frp
根目录,找到frps.ini
进行配置。
[common]
bind_port = 19995
bind_addr = 0.0.0.0
token = 123456
[common]
是固定名称的段落,用于配置通用参数。
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|---|---|---|---|---|
bind_addr | string | 服务端监听地址 | 0.0.0.0 | ||
bind_port | int | 服务端监听端口 | 7000 | 接收 frpc 的连接 | |
token | string | 鉴权使用的 token 值 | 客户端需要设置一样的值才能鉴权通过 |
详细服务端配置参数请看官网文档:https://gofrp.org/docs/reference/server-configures/
2.客户端基础配置
打开客户端服务器进入frp
根目录,找到frpc.ini
(这里是frpc.ini
不是frps.ini
,不要搞混了哈)进行配置。
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 19995
token = 123456
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|---|---|---|---|---|
server_addr | string | 连接服务端的地址 | 0.0.0.0 | 服务端的公网IP | |
server_port | int | 连接服务端的端口 | 7000 | ||
token | string | 鉴权使用的 token 值 | 客户端需要设置一样的值才能鉴权通过 |
详细客户端配置参数请看官网文档:https://gofrp.org/docs/reference/client-configures/
3.启用监听仪表盘
打开服务端服务器进入frp
根目录,找到frps.ini
进行配置。
[common]
bind_port = 19995
bind_addr = 0.0.0.0
token = 123456
dashboard_user = admin
dashboard_pwd = 123456
dashboard_port = 9995
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|---|---|---|---|---|
dashboard_addr | string | 启用 Dashboard 监听的本地地址 | 0.0.0.0 | ||
dashboard_port | int | 启用 Dashboard 监听的本地端口 | 0 | ||
dashboard_user | string | HTTP BasicAuth 用户名 | |||
dashboard_pwd | string | HTTP BasicAuth 密码 |
启用仪表盘后,我们通过浏览器访问公网ip:[dashboard_port]
,输入账户密码,可以看到我们的配置和访问统计信息,界面如下
4.TCP方式代理(mysql、oracle、ssh连接和远程桌面等)
TCP方式代理,无需进行服务端更改,我们只需要配置客户端即可,打开客户端服务器进入frp
根目录,找到frpc.ini
进行配置。
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 19995
token = 123456
[2254]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2254
[2254]
是该代理名称,在整个代理中要唯一,不然启动会报名称被占用。按照上面的配置,我们可以通过远程工具,访问公网ip:[remote_port]
即可连接到这台客户端服务器,相当于内网访问[local_ipt ]:[local_port ]
。
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|---|---|---|---|---|---|
type | string | 代理类型 | 是 | tcp | tcp, udp, http, https, stcp, sudp, xtcp, tcpmux | |
local_ip | string | 本地服务 IP | 是 | 127.0.0.1 | 需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址 | |
local_port | int | 本地服务端口 | 是 | 配合 local_ip | ||
remote_port | int | 服务端绑定的端口 | 是 | 用户访问此端口的请求会被转发到 local_ip:local_port |
详细客户端代理配置参数请看官网文档:https://gofrp.org/docs/reference/proxy/
其他示例
mysql
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3306
oracle
[orcl]
type = tcp
local_ip = xxx.xxx.xxx.xxx
local_port = 1521
remote_port = 1521
注:oracle
的local_ip
需要配置为内网ip,而不是默认的127.0.0.1
,具体原因应该是oracle
的监听问题,这里需要注意,如果其他代理出现了访问不到,也可以试下这样配置。
win远程桌面
我们在自己的windows
客户端进行以下配置,然后启动frp,我们可以在别的电脑上使用公网ip:7789
来远程桌面,这样我们就可以扔掉其他的远程软件了,简洁又快速,缺点就是一台电脑占用一个公网端口有点浪费了。。。
[mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7789
5.HTTP和HTTPS方式代理(web、gitlab、nexus等)
HTTP
和HTTPS
方式代理,分为两种方式进行域名配置,custom_domains
和 subdomain
必须要配置其中一个,两者可以同时生效。custom_domains
为全域名,服务端只需要配置HTTP
和HTTPS
端口号(两者可只配一个,具体看使用情况),subdomain
需要在服务端配置subdomain_host
,即二级域名的后缀,例如服务端配置subdomain_host
为moonce.com
,客户端配置subdomain
为abc
,那么完整访问是abc.moonce.com
,当然还要加上配置的端口号。
服务端
打开服务端服务器进入frp
根目录,找到frps.ini
进行配置。
[common]
bind_port = 19995
bind_addr = 0.0.0.0
token = 123456
subdomain_host = moonce.com
vhost_http_port = 9999
vhost_https_port = 9998
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|---|---|---|---|---|
subdomain_host | string | 二级域名后缀 | |||
vhost_http_port | int | 为 HTTP 类型代理监听的端口 | 0 | 启用后才支持 HTTP 类型的代理,默认不启用 | |
vhost_https_port | int | 为 HTTPS 类型代理监听的端口 | 0 | 启用后才支持 HTTPS 类型的代理,默认不启用 |
客户端
打开客户端服务器进入frp
根目录,找到frpc.ini
进行配置。
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 19995
token = 123456
[gitlab]
type = http
local_port = 9999
subdomain = gitlab
[web]
type = http
local_port = 80
custom_domains = www.moonce.com
假设我们客户端地址是192.168.1.123
,我们访问 www.moonce.com:9999
时会被转发到本地的192.168.1.123:80
,当我们访问 gitlab.moonce.com:9999
会被转发到本地的192.168.1.123:9999
上。
详细客户端代理配置参数请看官网文档:https://gofrp.org/docs/reference/proxy/
六、启动
1.linux服务端
nohup ./frps -c ./frps.ini &> frps.log &
查看日志
cat frps.log
2.linux客户端
打开客户端服务器进入frp
根目录,执行命令
nohup ./frpc -c frpc.ini &> frpc.log &
查看日志
cat frpc.log
3.windows客户端
打开客户端服务器进入frp
根目录,cmd执行命令
.\frpc.exe -c frpc.ini
关闭命令行即停止,需要做自动启动的可以通过nssm
将命令做成服务,相关操作网上搜吧,挺简单的。
七、停止运行
使用ps
查询进程号,然后kill
杀死掉进程即可。
ps -aux | grep frp|grep -v grep
kill -9 xxxx