介绍
说明:Frp
估计很多人都用过,一个高性能的内网穿透工具,支持tcp
、udp
、http
、https
协议,安装和使用教程可以直接查看官方中文文档→传送门,写的超详细。这里博主分享个某大佬写的Frps
一键脚本,使用起来很方便,想快速上手的可以用下。
安装使用
原项目地址:https://github.com/dylanbai8/frpspro
我的地址:https://github.com/songwqs/frpspro
系统要求:CentOS 7+
、Debian 8+
0.52.0以上版本
wget -N --no-check-certificate https://git.songwqs.top/https://raw.githubusercontent.com/songwqs/frpspro/master/ff.sh && chmod +x ff.sh && bash f.sh install
0.51.3版本:
wget -N --no-check-certificate https://git.songwqs.top/https://raw.githubusercontent.com/songwqs/frpspro/master/f.sh && chmod +x ff.sh && bash f.sh install
使用Doker快速安装
start frps: frps.toml文件
docker run --restart=always --network host -d -v /root/frps/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps
start frpc: frpc.toml文件
docker run --restart=always --network host -d -v /root/frpc/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc
加速拉取
frpc:
docker pull hub.songwqs.top/snowdreamtech/frpc:latest
docker tag hub.songwqs.top/snowdreamtech/frpc:latest snowdreamtech/frpc:latest
frps:
docker pull hub.songwqs.top/snowdreamtech/frps:latest
docker tag hub.songwqs.top/snowdreamtech/frps:latest snowdreamtech/frps:latest
执行后默认生成了以下配置 :
管理面板: http://xxxxxxxxx:7500 用户名:admin 密码: admin bind_port: 7000 默认token: yqJ5zhUmkSXH vhostHTTPPort:81 默认vhostHTTPSPort: 444 kcpBindPort:7000
需要修改可以去 /usr/local/frps修改:
vi /usr/local/frps/frp.toml
PS:由于0.52.0以后版本换了配置文件为.toml
格式也换了 详见官方文档或者这篇https://songw.top/archives/1494.html
可以直接复制以下的进行编辑:
bindPort = 7000
auth.token = "token"
kcpBindPort = 7000
##Web界面
##默认为 127.0.0.1 如果需要公网访问修改为 0.0.0.0
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
##配置TLS 证书来启用HTTPS接口
# webServer.tls.certFile = "server.crt"
# webServer.tls.keyFile = "server.key"
# transport.tls.force 指定是否只接受 TLS 加密连接。默认情况下,该值为 false。
#tls.force = false
# transport.tls.certFile = "server.crt"
# transport.tls.keyFile = "server.key"
# transport.tls.trustedCaFile = "ca.crt"
# 仪表板资源目录(仅限调试模式)
# webServer.assetsDir = "./static"
##如果要支持虚拟主机,必须设置用于监听的 http 端口(可选)
##注意:http 端口和 https 端口可以与 bind_port 相同
vhostHTTPPort = 81
vhostHTTPSPort = 444
# 控制台或实际 logFile 路径,如 ./frps.log
log.to = "./frps.log"
# trace、debug、info、warn、error
log.level = "info"
log.maxDays = 3
# 当 log.to 为 console 时禁用日志颜色,默认值为 false
log.disablePrintColor = false
# 每个代理中保留的池计数不超过 maxPoolCount。
transport.maxPoolCount = 50
# 如果使用了 tcp 流复用,则默认值为 true
transport.tcpMux = true
# 指定 tcp mux 的保持活动间隔,仅当 tcpMux 为 true 时有效
transport.tcpMuxKeepaliveInterval = 60
#每个客户端可用的最大端口数,默认值为 0 表示无限制
##maxPortsPerClient = 0
##在仪表板监听器中启用 golang pprof 处理程序,必须首先设置仪表板端口
##webServer.pprofEnable = false
##enablePrometheus 将在 webServer 上的 /metrics API 导出 Prometheus 指标。
##enablePrometheus = true
0.52.0以下版本的frp.ini配置文件
#[common]为整体截面
[common]
#必须附上IPv6的文字地址或主机名
#在方括号中,如“[::1]:80”、“[ipv6主机]:http”或“[ipv6主机%zone]:80
bind_addr=0.0.0.0
bind_port=7000
#用于kcp协议的udp端口,它可以与“bindport”相同
#如果未设置,则在frp中禁用kcp
kcp_bind_port=7000
#如果要按仪表板配置或重新加载frp,必须设置dashboard_port
dashboard_port=7500
#仪表板资产目录(仅适用于调试模式)
dashboard_user = admin
dashboard_pwd = 123456987
# assets_dir = ./static
vhost_http_port = 880
vhost_https_port = 8443
#控制台或真实日志文件路径,如./frps.log
log_file = ./frps.log
#调试,信息,警告,错误( debug, info, warn, error)
log_level = info
log_max_days = 3
#身份验证令牌可以自己设置
token = frpzjmFnLqzxFPg
#当许多人同时使用一个frps服务器时,可以方便地使用http、https类型的子域配置。
subdomain_host=x.x.x.x.x(你的服务器ip)
#subdomain_host = my.abc.com
#只允许frpc绑定您列出的端口,如果您没有设置任何限制
#allow_ports=1-65535
#如果超过最大值,每个代理中的pool_count将更改为max_pool_count
max_pool_count=50
#如果使用tcp流复用,默认值为true
tcp_mux=true
# 重启应用
sudo systemctl restart frps
#查看frp是否启动
ps aux | grep frp
===================================
服务端frps的启动与停止
# 启动frps
sudo systemctl start frps
# 打开自启动
sudo systemctl enable frps
# 重启应用
sudo systemctl restart frps
# 停止应用
sudo systemctl stop frps
# 查看应用的日志
sudo systemctl status frps
# 停止开机自启动
systemctl disable frps
常用命令
一键修改 bindPort:bash ff.sh bindPort
一键修改 vhostHTTPPort:bash ff.sh vhostHTTPPort
一键修改 vhostHTTPSPort:bash ff.sh vhostHTTPSPort
一键修改 webServer.port:bash ff.sh webServer.port
一键修改 dashboard_user:bash ff.sh dashboard_user
一键修改 webServer.password:bash ff.sh webServer.password
一键修改 kcpBindPort:bash ff.sh kcpBindPort
一键修改 subDomainHost (用于泛解析子域名):bash ff.sh subDomainHost
一键卸载 frps:bash ff.sh uninstall
一键更新 frps:bash ff.sh update
一键关闭 apache2、防火墙,释放 80 端口:bash ff.sh unapache2
注意事项
#一键关闭 apache2、防火墙,释放80端口 bash ff.sh unapache2 #转发远程桌面时,需先在本机开启允许远程协助 我的电脑-右键属性-远程设置 #需要注意frpc所在机器和frps所在机器的时间相差不能超过15分钟
frps.ini配置文件在目录:/usr/local/frps
端口白名单:
# frps.ini
allowPorts = [
{ start = 2000, end = 3000 },
{ single = 3001 },
{ single = 3003 },
{ start = 4000, end = 50000 }
]
客户端进阶用法frpc
以下只是列出可能要用到的功能,其他用法用法都在中文文档>>> :https://gofrp.org/zh-cn/docs/
0.52.0以上版本 toml配置:
user = "your_name"
serverAddr = "x.x.x.x"
serverPort = 7000
auth.token = "token"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
i端口范围映射(最低v0.56.0):
{{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }}
[[proxies]]
name = "tcp-{{ $v.First }}"
type = "tcp"
localPort = {{ $v.First }}
remotePort = {{ $v.Second }}
{{- end }}
负载均衡:
# frpc.toml
[[proxies]]
name = "test1"
type = "tcp"
localPort = 8080
remotePort = 80
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
[[proxies]]
name = "test2"
type = "tcp"
localPort = 8081
remotePort = 80
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
代理限速:
# 限制此代理的带宽,单位为 KB 和 MB
transport.bandwidthLimit = "1MB"
# frpc.toml
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
transport.bandwidthLimit = "1MB"
细节可以去这个链接查看:https://songw.top/archives/1494.html
0.52.0以下版本 ini配置文件
一、范围端口映射
在 frpc 的配置文件中可以指定映射多个端口,目前只支持 TCP 和 UDP 的代理类型。
这一功能通过 range: 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。
例如要映射本地 6000-6005, 6007 这7个端口,实际连接成功后会创建 7 个 proxy链接池。多用于ftp被动模式这类需要大范围端口的服务器
例子:
# frpc.ini [range:test_tcp] type = tcp local_ip = 127.0.0.1 local_port = 6000-6005,6007 remote_port = 6000-6005,6007
二、更加安全的点对点stcp/xtcp内网穿透服务(类似于简化版蒲公英异地组网)
1.点对点中继 -安全穿透(stcp)
增加安全性 不暴露端口服务器 双方通过密钥链接 服务器做中继数据
2.点对点P2P -安全穿透(xtcp)
增加安全性 不暴露端口服务器 双方通过密钥链接 服务器只做握手和校验不参加数据交换 双方实行打洞P2P(udp传输) 介于国内的网络环境 成功率不高 可以尝试下 不行切换会 stcp
3.配置信息
需要双方配置服务信息
a、frps服务器端需要添加一个udp 打洞端口:
bind_udp_port = 7001
如:
# frps.ini [common] bind_port = 7000 bind_udp_port = 7001
b、frpc客户端
被访问端A需要 追加: 密钥:sk=xxx
例子:
# frpc.ini [common] # 你的frp服务器的公网ip server_addr = x.x.x.x # 你的frp服务器的默认端口 server_port = 7000 [myser1] # type可以直接切换stcp或者xtcp type = stcp # 只有 sk 一致的用户才能访问到此服务 sk = 123456 local_ip = 127.0.0.1 # 的本地端口号 local_port = 3389
访问端B需要 追加:
访问者: role = visitor
要访问的代理服务: server_name = myser1
只有 sk 一致的用户才能访问到此服务: sk = 12346
绑定本地端口用于访问端A 服务:
bind_addr = 127.0.0.1
bind_port = 6000
例子:
# frpc.ini [common] # 你的frp服务器的公网ip server_addr = x.x.x.x # 你的frp服务器的默认端口 server_port = 7000 [rdp_visitor] # type可以直接切换stcp或者xtcp type = stcp # 访问者 role = visitor # 要访问的 stcp 代理的名字 server_name = myser1 # 只有 sk 一致的用户才能访问到此服务 sk = 123456 # 绑定本地端口用于访问端A服务 bind_addr = 127.0.0.1 bind_port = 5000
三、 使用插件模式
[http_proxy ] type=tcp remote_port=5300 plugin=http_proxy plugin_http_user=admin plugin_http_passwd=123456 use_encryption=true use_compression=true [socks5] type=tcp remote_port=5301 plugin=socks5 plugin_user=admin plugin_passwd=123456 use_encryption=true use_compression=true
插件不做过多介绍 实际使用说明可以去 https://gofrp.org/docs/features/common/client-plugin/#http_proxy 查看