frp是什么
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
原理
frp主要由客户端(frpc)和服务端(frps)组成,服务端通常部署在具有公网ip的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
官方文档地址
下载
客户端和服务端的所有文件被打包在一个压缩包中
https://github.com/fatedier/frp/releases
部署
解压缩下载的压缩包,将其中的frpc拷贝在内网服务所在的机器上,将frps拷贝到具有公网IP的机器上,放置在任意目录。
开始使用
1.编写配置文件(如下示例)
2.服务端启动:
./frps -c ./frps.ini
3.客户端启动
./frpc -c ./frpc.ini
示例
示例一:通过SSH访问内网机器
1.在具有公网IP的机器上部署frps,修改frps.ini文件:
[common]
bind_port = 7000
2.在需要被访问的内网机器上(SSH服务通常监听在22端口)部署frpc,修改frpc.ini文件,假设frps所在服务器的公网IP为x.x.x.x:
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh(任意名称)]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
3.分别启动frps和frpc。
4.通过SSH访问内网机器:
- 内网SSH访问:
内网IP:22
- 内网穿透SSH访问:
公网IP:6000
示例二:mysql服务内网穿透
[mysql(任意名称)]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6009
- 内网SSH访问:
内网IP:3306
- 内网穿透SSH访问:
公网IP:6009
示例三:通过自定义域名访问内网的Web服务
0.域名解析配置为 * ,表示二级域名 test.yourdomain.com ,test2.yourdomain.com 等都能解析到对应的公网服务器ip
1.在具有公网IP的机器上部署frps,修改frps.ini文件:
[common]
bind_port = 7000
vhost_http_port = 8281
2.在需要被访问的内网机器上部署frpc,修改frpc.ini文件,假设frps所在服务器的公网IP为x.x.x.x:
[common]
server_addr = x.x.x.x
server_port = 7000
[websockect(任意名称)]
type = http
local_port = 8689
custom_domains = test.yourdomain.com
3.分别启动frps和frpc。
4.访问:
- 内网访问:
内网IP:8689
- 内网穿透访问:
# 二级域名:vhost_http_port
http://test.yourdomain.com:8281
示例四:为本地HTTP服务启用HTTPS
1.修改frps.ini文件:
[common]
bind_port = 7000
2.frpc.ini内容如下:
[common]
server_port = 7000
[htts2http]
type = https
custom_domains = xm.app.dingcloud.com.cn
plugin = https2http
plugin_local_addr = 127.0.0.1:3000
# HTTPS 证书相关的配置
plugin_crt_path = ./server.pem
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
3.分别启动frps和frpc。
4.访问:
- 内网访问:
http://127.0.0.1:3000
- 内网穿透访问:
# 二级域名:vhost_http_port
https://xm.app.dingcloud.com.cn
systemd开机自启
- 编写frpc.service,放入路径:/usr/lib/systemd/system/frpc.service
[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(frpc的实际安装目录)
ExecStart=/usr/local/bin/frpc -c /usr/local/bin/frpc.ini
[Install]
WantedBy=multi-user.target
- 执行命令:
systemctl daemon-reload
- 根据参数“ExecStart”的值将frpc执行程序和frpc.ini放入指定目录,(需要将改文件夹权限设置为777,否则会有权限报错)
systemctl命令
- 重启frpc服务
systemctl restart frpc
- 查看frpc状态
systemctl status frpc
停止frp服务
先执行
ps -aux|grep frp| grep -v grep
再执行
kill xxxx