概念
frp
是一个可用于内网穿透的高性能的反向代理应用,支持 tcp
, udp
, http
, https
协议.
功能特性
通过在具有公网 IP
的节点上部署 frp
服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持
TCP
、UDP
以及 Websocket
等多种协议;
- 采用
TCP
连接流式复用,在单个连接间承载更多请求,节省连接建立时间;
- 代理组间的负载均衡;
- 端口复用,多个服务通过同一个服务端端口暴露;
- 多个原生支持的客户端插件(静态文件查看,
HTTP
、SOCK5
代理等),便于独立使用 frp
客户端完成某些工作;
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展;
- 服务端和客户端
UI
页面;
服务端 - frps
1. 下载程序
首先到 frp
的 releases
页面下载最新版的对应 VPS
的处理器架构的压缩包
1
| https://github.com/fatedier/frp/releases
|
如何知道 VPS
的处理器架构?在 VPS
上运行这个命令:
1 2
| [root@dosbat ~]# arch x86_64
|
如果输出x86_64
则需要下载带linux_amd64
的那个压缩包;
2.解压赋权
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| [root@dosbat ~]#cd /root
[root@dosbat ~]#wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.18.0/frp_0.18.0_linux_amd64.tar.gz
[root@dosbat ~]#tar -xzvf frp_0.18.0_linux_amd64.tar.gz
[root@dosbat ~]#mv frp_0.18.0_linux_amd64 frp [root@dosbat ~]#cd frp
[root@dosbat ~]#chmod +x frps 然后试着运行一下`frps`,看看是否能正常运行 然后试着运行一下`frps`,看看是否能正常运行
[root@dosbat frp]# ./frps --help frps is the server of frp (https://github.com/fatedier/frp)
Usage: frps [flags]
Flags: --allow_ports string allow ports --bind_addr string bind address (default "0.0.0.0") -p, --bind_port int bind port (default 7000) --bind_udp_port int bind udp port -c, --config string config file of frps --dashboard_addr string dasboard address (default "0.0.0.0") --dashboard_port int dashboard port --dashboard_pwd string dashboard password (default "admin") --dashboard_user string dashboard user (default "admin") --disable_log_color disable log color in console -h, --help help for frps --kcp_bind_port int kcp bind udp port --log_file string log file (default "console") --log_level string log level (default "info") --log_max_days int log max days (default 3) --max_ports_per_client int max ports per client --proxy_bind_addr string proxy bind address (default "0.0.0.0") --subdomain_host string subdomain host -t, --token string auth token -v, --version version of frpc --vhost_http_port int vhost http port --vhost_http_timeout int vhost http response header timeout (default 60) --vhost_https_port int vhost https port
|
3.配置systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@dosbat ~]# vi /lib/systemd/system/frps.service [Unit] Description=Frp Server Service After=network.target
[Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frps -c /etc/frp/frps.ini (启动命令,我这里frps.ini放在了etc目录下所以这里是这么写的)
[Install] WantedBy=multi-user.target
|
4.常用指令
1 2 3 4 5 6
| 启动服务 [root@dosbat ~]# systemctl start frps 添加自启动 [root@dosbat ~]# systemctl enable frps 查看服务状态 [root@dosbat ~]# systemctl status frps
|
5. 配置程序
先停止服务
1
| [root@dosbat ~]# systemctl stop frps
|
参考以下配置说明来书写配置文件frps.ini
,完整的配置说明可以查看目录下的frps_full.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| [common]
bind_port = 7000
token = 12345678
authentication_timeout = 900
dashboard_port = 7500
dashboard_user = admin dashboard_pwd = admin
vhost_http_port = 10080 vhost_https_port = 10443
subdomain_host = example.com
|
然后把你精简后的配置文件内容写入frps.ini
1 2 3 4 5 6 7 8 9 10 11
| [root@dosbat ~]# echo "[common] bind_port = 7000 token = 12345678 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin vhost_http_port = 10080 vhost_https_port = 10443 subdomain_host = example.com" > frps.ini 最后启动服务 [root@dosbat ~]# systemctl start frps
|
仪表盘登录
客户端 - frpc
1.安装赋权
1
| [root@dosbat ~]#wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.18.0/frp_0.18.0_linux_amd64.tar.gz
|
1 2 3 4 5 6 7
| [root@dosbat ~]#tar -xzvf frp_0.18.0_linux_amd64.tar.gz
[root@dosbat ~]#mv frp_0.18.0_linux_amd64 frp [root@dosbat ~]#cd frp
[root@dosbat ~]#chmod +x frpc
|
2.修改配置
1.基本配置(必须)
1 2 3 4 5 6 7 8
| [common]
server_addr = 0.0.0.0 (填写frps服务器地址)
server_port = 7000
token = 12345678(与之前服务器的密码一致)
|
2.TCP/UDP
这里以转发 ssh
为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false
remote_port = 6001
|
3.HTTP(S)
以转发路由器设置页面为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| [router-web]
type = http
local_ip = 127.0.0.1 local_port = 80
use_encryption = true use_compression = true
http_user = admin http_pwd = admin
subdomain = web01
custom_domains = web02.yourdomain.com
locations = /abc,/def
host_header_rewrite = dev.yourdomain.com
|
4.TCP/UDP 范围转发
1 2 3 4 5 6 7 8 9 10 11
| [range:multi-port]
type = tcp local_ip = 127.0.0.1 use_encryption = false use_compression = false
local_port = 6010-6020,6022,6024-6028 remote_port = 16010-16020,16022,16024-16028
|
5.合并配置
写入到frpc.ini
中,然后仿照运行服务端的方式来运行客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| [common] server_addr = 0.0.0.0 server_port = 7000 token = 12345678
[ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 use_encryption = false use_compression = false remote_port = 6001
[router-web] type = http local_ip = 127.0.0.1 local_port = 80 use_encryption = true use_compression = true http_user = admin http_pwd = admin subdomain = web01 custom_domains = web02.yourdomain.com locations = /abc,/def host_header_rewrite = dev.yourdomain.com
[range:multi-port] type = tcp local_ip = 127.0.0.1 use_encryption = false use_compression = false local_port = 6010-6020,6022,6024-6028 remote_port = 16010-16020,16022,16024-16028
|
6.启动服务
1
| [root@nues frp]# ./frps -c frps.ini
|