概述
frp是什么
frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
1、利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
2、对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
3、利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
官网资料
https://gofrp.org/#
git下载
https://github.com/fatedier/frp/releases/
wget https://github.com/fatedier/frp/releases/download/v0.xx.xx/frp_0.xx.xx_linux_386.tar.gz
使用示例
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
阿里云需要开放安全组
通过 ssh 访问公司内网机器
详细配置可以查看官方文档
1、修改服务器 frps.ini 文件:
[common]
#服务端需要开启的端口(与客户端绑定的进行通信的端口)
bind_addr = 0.0.0.0
bind_port = 5443
kcp_bind_port = 5443
#服务端需要开启的端口(访问客户端web服务自定义的端口号,即Http监听的端口)
vhost_http_port = 9080
vhost_https_port = 9081
#授权令牌,需要客户端的token保持一致
token = 123456
#仪表配置
dashboard_addr = 0.0.0.0
dashboard_port = 6443
dashboard_user = admin
dashboard_pwd = admin
#日志配置
log_file = /you/path/
log_level = info
log_max_days = 3
#最大连接数
max_pool_count = 50
max_ports_per_client = 0
authentication_timeout = 900
tcp_mux = true
启动 frps:
./frps -c ./frps.ini
2、修改本地 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;
[common]
server_addr = xxxxxx
server_port = 5443
token = 123456
# 通过tcp的方式可以不使用域名的情况下进行内网穿透,直接访问http://127.0.0.1:8080即可
# tcp穿透需要设置remote_port(为将服务器的8080端口绑定到你的穿透服务,此处的8080端口也需要在防火墙中放开访问权限>)
#[mock-tcp]
#type = tcp
#local_ip = 172.18.50.59
#local_port = 8089
#remote_port = 8080
# custom_domains = mock.frp.test.com[common]
#bind_port = 7000
[ssh]
remote_port = 9082
type = tcp
local_ip = 127.0.0.1
local_port = 22
启动 frpc:
./frpc -c ./frpc.ini
通过 ssh 访问内网机器,假设用户名为 test:
ssh -oPort=6000 test@x.x.x.x
Nginx 反向代理 frp的http端口
# frp的接收http请求的反向代理
server {
listen 80;
#有域名写域名 没域名写localhost
server_name localhost;
location / {
# 7071端口即为frp监听的http端口
proxy_pass http://127.0.0.1:7071;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
# 防止爬虫抓取
if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot")
{
return 403;
}
};
# frps 一键脚本安装
[项目地址](https://github.com/chauncey09/frp)
### 一键脚本(先运行脚本,在自行修改frps.ini)
1、新建一个存放目录
```bash
mkdir frps
2、拉取一键搭建脚本
#安装
wget https://raw.githubusercontent.com/chauncey09/frps.sh/master/frps.sh && chmod +x frps.sh && ./frps.sh
#卸载
wget https://raw.githubusercontent.com/chauncey09/frps.sh/master/unfrps.s
3、增加脚本权限
chmod 700 ./install-frps.sh
4、安装
./install-frps.sh install
之后他会让你输一些参数,全部参数都有默认值,直接回车就是输入默认值:
Please input frps bind_port [1-65535](Default Server Port: 5443): #输入frp提供服务的端口,用于服务器端和客户端通信,默认即可
Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80): #输入frp进行http穿透的http服务端口,建议选择其他端口,默认的80端口给Nignx,然后用Nginx代理frp的http端口
Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443): #输入frp进行https穿透的https服务端口,同上面的80端口类似,建议分配其他端口,然后通过Nginx代理此端口
Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):#输入frp的控制台服务端口,用于查看frp工作状态,默认即可
Please input dashboard_user (Default: admin):#登录控制台的用户名,默认即可
Please input dashboard_pwd (Default: arepR7VZ):#登录控制台的密码,如果记不住默认的建议修改
Please input privilege_token (Default: 9e2UAeWa6hxrwdc):#输入frp服务器和客户端通信的密码,默认是随机生成的,默认即可
Please input frps max_pool_count [1-200](Default max_pool_count: 50):#设置每个代理可以创建的连接池上限,默认50
##### Please select log_level #####
1: info
2: warn
3: error
4: debug
#####################################################
Enter your choice (1, 2, 3, 4 or exit. default [1]): 默认即可
Please input frps log_max_days [1-30](Default log_max_days: 3 day): 默认即可
##### Please select log_file #####
1: enable
2: disable
#####################################################
Enter your choice (1, 2 or exit. default [1]):默认即可
安装完毕后会弹出以下内容,标明了具体信息,到此服务端操作全部完成。
==============================================
You Server IP : X.X.X.X
Bind port : 5443
KCP support : true
vhost http port : 8085
vhost https port : 4435
Dashboard port : 6443
token : 9e2UAeWa6hxrwdc
tcp_mux : true
Max Pool count : 50
Log level : info
Log max days : 3
Log file : enable
==============================================
frps Dashboard : http://X.X.X.X:6443/
Dashboard user : admin
Dashboard password : admin
==============================================
frps status manage : frps {start|stop|restart|status|config|version}
Example:
start: frps start # 启动frps命令
stop: frps stop # 停止frps命令
restart: frps restart # 重启frps命令
[root@root frps]#
安装完毕后配置frps.ini
vi /usr/local/frps/frps.ini
配置完成重启frps生效
sudo systemctl restart frps
可以访问ip地址+控制台端口查看(如果是阿里云腾讯云的服务器或者服务器已安装宝塔面板的,记得在安全组放行以上的配置的端口,否则无法访问)
frp后台自动启动的几个方法
1、使用nohup来启动
这是frps的后台启动(路径写你服务器上的绝对路径),如果要查看日志的话,就直接使用cat nohup.out,就可以查看了。
nohup /path/to/your/fprs -c /path/to/your/frps.ini
这是frpc的后台启动
nohup /path/to/your/fprc -c /path/to/your/frpc.ini
2、使用systemctl来控制启动
注意:如果用一键安装脚本,请先卸载,不然启动自己配置的启动方式会失败。
这个方法比较好用,很方便
sudo vim /lib/systemd/system/frps.service
在frps.service里写入以下内容
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini
[Install]
WantedBy=multi-user.target
然后就启动frps
sudo systemctl start frps
再打开自启动
sudo systemctl enable frps
- 如果要重启应用,可以这样,
sudo systemctl restart frps
- 如果要停止应用,可以输入,
sudo systemctl stop frps
- 如果要查看应用的日志,可以输入,
sudo systemctl status frps
3、使用supervisor来控制
首先先安装supervisor,我用的ubuntu
sudo apt install supervisor
创建 supervisor frps 配置文件,在 /etc/supervisor/conf.d 创建 frp.conf
[program:frp]
command = /your/path/frps -c /your/path/frps.ini
autostart = true
同样是你的绝对路径。
写完以后,要重新加载一下supervisor
重启supervisor
sudo systemctl restart supervisor
查看supervisor运行状态
sudo supervisorctl status