快速搭建frp的http和ssh的内网穿透
一、frp是个啥
中文文档:https://gofrp.org/docs/overview/
其实中文文档已经挺详细的了,但是依然还是有些坑的.
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
- 为啥用frp?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
二、服务器端环境
- 一台公网服务器或者VPS
- 一个指向到此台公网服务器的域名,本文以spacevast.com 为例(仅做ssh内网穿透不需要)
- nginx
- frp v0.37.1
1、先将frp专用子域名解析好
- 取服务商的域名解析的地方,添加两条记录
*.frp.spacevast.com
为A记录
frp.spacevast.com
为A记录
记录值为服务器的公网ip
2、服务器端配置frp服务端
# 先切换到目录
cd /opt
# 下载到当前目录,如果下载不下来,就想办法在本地下载下来,上传上去
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
#解压
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
mv frp_0.37.1_linux_amd64.tar.gz frp
cd frp
ll
进入目录中可以看到 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE 这七个文件
• frpc:客户端可执行程序
• frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)
• frpc.ini:客户端配置项
• frps:服务端可执行程序
• frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)
• frps.ini:服务端配置项
• LICENSE:许可证
- 修改服务端的配置文件frps.ini
各个参数说明详见官方文档 https://gofrp.org/docs/reference/server-configures/
[common]
bind_port = 7000
vhost_http_port = 7080
# 开启dashboard,frp提供了一个控制台,可以通过这个端口访问到控制台。可查看frp当前有多少代理连接以及对应的状态
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = xxxx
# 日志存放路径
log_file = /opt/data/frp/log/frps.log
log_level = warn
log_max_days = 7
# 服务端的subdomain_host需要和客户端配置文件中的subdomain、local_port配合使用,
# 可通过{subdomain}.{subdomain_host} 的域名格式来访问自己本地的 web 服务。
# 假如服务端的subdomain_host为frp.spacevast.com,客户端某个配置组中的
# subdomain为a,local_port为8585,
# 则访问 a.frp.spacevast.com ,等同于访问本地的localhost:8585
subdomain_host = frp.spacevast.com
uthentication_method = token
authenticate_heartbeats = true
authenticate_new_work_conns = true
token = xxxxxx
# 开启prometheus监控
enable_prometheus = true
# 开启tcp穿透端口范围
allow_ports = 20000-30000
请一定要把端口7000/7500/7080/这三个端口在你的服务器提供商那里开放出来,如果用了宝塔,那么宝塔那边也需要开一次
- 配置系统启动项frp
cd /etc/systemd/system
touch frps.service
vi frps.service
#把下面的内容粘贴进去
[Unit]
Description=frps service
[Service]
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=frp-service
User=root
[Install]
WantedBy=multi-user.target
#启动frp
systemctl start frps.service
- 如果启动报错了,有可能是因为log目录没建立,请建立好log目录
log_file = /opt/data/frp/log/frps.log
mkdir -vp /opt/data/frp/log/
3、配置服务器端的nginx
server
{
listen 80;
server_name *.frp.spacevast.com frp.spacevast.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/frp.spacevast.com;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/frp.spacevast.com.conf;
#REWRITE-END
location / {
# 7080端口即为frp监听的http端口
proxy_pass http://127.0.0.1:7080;
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;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
access_log /www/wwwlogs/frp.spacevast.com.log;
error_log /www/wwwlogs/frp.spacevast.com.error.log;
}
- 重新加载nginx配置或重启nginx
nginx -s reload
#或者
systemctl restart nginx
三、客户端使用/配置
下载对应客户端的包:https://github.com/fatedier/frp/releases
1、这里以windows为例子
- 解压后得到如下目录
- 编辑客户端的ini文件frpc.ini
[common]
server_addr = 公网服务器的ip
server_port = 7000
# 开启token认证
authentication_method = token
authenticate_heartbeats = true
authenticate_new_work_conns = true
token = xxxxx(要和服务器配置的token一样)
[web01]
type = http
local_port = 81
#这里是二级域名,比如这个web01最终浏览器访问为 http://web01.frp.spacevast.com
subdomain= web01
use_encryption = true
use_compression = true
- 命令行启动
#切换到frp所在目录
./frpc.exe
- 出现如下信息说明启动成功
- 下面就可以浏览器输入
http://web01.frp.spacevast.com
测试一下了~
四、dashboard
浏览器访问frp.spacevast.com,输入刚刚配置的账号密码访问
五、通过ssh访问内网
- 修改frps.ini文件,配置一个名为ssh的方向代理
# frps.ini
[common]
bind_port = 7000
[ssh]
listen_port = 6000
auth_token = 123456_
- 启动frps
- 修改frpc.ini文件
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
auth_token = 123456_
[ssh]
local_port = 22
- 启动frpc
- 通过ssh访问内网机器
ssh -oPort=6000 root@x.x.x.x
End.
给个一键三连呀~