frp 是什么?
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
如何使用
一、准备工作
要使用frp进行内网穿透,需要准备以下几个条件:
- 一台有公网IP的服务器,作为frp的服务端,负责转发内网设备的请求和响应。本文以Linux系统为例,其他系统请参考官方文档。
- 一个或多个需要进行内网穿透的设备,作为frp的客户端,可以是Windows、Linux、macOS、ARM等平台。
- frp的安装包,可以从官方网站下载对应平台的版本。
- 补充资料中提供的相关链接和配置文件,用于参考和修改。
二、服务端配置和启动
- 在公网服务器上下载并解压frp的安装包,进入解压后的文件夹,只需要关注frps相关文件。
- 编辑frps.ini文件,设置服务端的基本参数,如下:
[common]
# 服务器端端口
bind_port = 10000
kcp_bind_port = 10000
bind_udp_port = 10000
# 服务器看板的访问端口
dashboard_port = 65535
# 监听 HTTP 请求端口为
vhost_http_port = 10080
# 监听 HTTPS 请求端口为
# vhost_https_port = 10443
# 最大连接数
max_pool_count = 30
# 开启toke认证
authentication_method = token
# 开启tcp穿透端口范围
allow_ports = 3389,10000-65535
# 客户端连接凭证
token = 123456
# 服务器看板账户
dashboard_user = lldwb
dashboard_pwd = @LLdwb15979809462
# 是否启用 TLS 模式
dashboard_tls_mode = true
dashboard_tls_cert_file = /www/server/panel/vhost/ssl/lldwb.top/fullchain.pem
dashboard_tls_key_file = /www/server/panel/vhost/ssl/lldwb.top/privkey.pem
- 启动frps服务端,执行命令:
./frps -c frps.ini
-
放行
TCP
和UDP
协议的端口 -
可以通过访问
服务器IP:仪表盘页面的端口
,输入用户名和密码登录后查看frp服务端的运行状态。
三、客户端配置和启动
- 在需要进行内网穿透的设备上下载并解压frp的安装包,进入解压后的文件夹,只需要关注frpc相关文件。
- 编辑frpc.ini文件,设置客户端的基本参数和需要穿透的服务,如下:
[common]
# frp服务端的IP地址
server_addr = 公网服务器IP
# frp服务端监听的端口
server_port = 7000
# 开启toke认证
authentication_method = token
# frp服务端和客户端之间的验证密钥,必须保持一致
token = 123456
# 代理名称
[mysql]
# 代理协议
type = tcp
# 代理本地端口
local_port = 3306
# 代理远程端口(frps开放的端口 10000-65535 )
remote_port = 33366
# 加密
use_encryption = false
# 压缩
use_compression = true
# 如果是http或者https代理协议,就需要添加
# 需要穿透的域名,如果没有域名可以使用subdomain参数设置子域名
custom_domains = example.com
- 启动frpc客户端,执行命令:
./frpc -c frpc.ini
四、补充说明
配置的补充说明在官方文档查看
启动相关
启动frp,(/root/frps)安装frp位置
cd /root/frps
screen -S frps ./frps -c frps.ini
同时按住Ctrl+A+D挂起screen
screen -r
执行 screen -r 命令来恢复会话
使用 Ctrl+C 退出
当80和443端口被Nginx占用的解决方法(只限http内网穿透)
宝塔的证书夹:
/www/server/panel/vhost/ssl/lldwb.top
只有bt.lldwb.top tom.lldwb.top可以使用80访问
其他http只能用10000访问,如果需要添加新的域名在nginx配置文件中添加
Nginx配置文件
server {
listen 80;
listen 443 ssl;
ssl_certificate /www/server/panel/vhost/ssl/lldwb.top/fullchain.pem; #在域名服务商申请的证书,不同的域名证书不一样
ssl_certificate_key /www/server/panel/vhost/ssl/lldwb.top/privkey.pem; #在域名服务商申请的证书,不同的域名证书不一样
server_name bt.lldwb.top tom.lldwb.top; #如有多个域名,用空格隔开
client_max_body_size 10M;
location / {
proxy_pass http://127.0.0.1:10080; #访问xxx.leachchen.com时默认是80端口,此时将请求转发到81端口上,frp服务端和客户端保持了连接,此时会访问到客户端配置了相同域名的端口上
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
五、参考资料
- 官方文档:https://gofrp.org/docs/overview/
- 官方仓库:https://github.com/fatedier/frp https://blog.csdn.net/weixin_43922901/article/details/109261700
- https://sspai.com/post/52523