注意事项:
1)服务器端和内网机器端下载的版本要相同,否则可能会影响内网穿透
2)根据服务器系统选择合适的脚本
脚本主要分为服务端与客户端文件
1.外网服务器端用到的是Frps和Frps.ini
2.win10电脑用到的是Frpc和Frpc.ini
注:
服务端部署,可以只保留服务端文件 frps**
客户端部署,可以只保留客户端文件 frpc**
下载地址:
https://github.com/fatedier/frp/releases/tag/v0.37.1
注意下载版本
tar -zxvf frp_0.37.1_linux_arm64.tar.gz
mv frp_0.37.1_linux_arm64 frp
cd frp
vim frps.ini
[common]
# 内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = ch
./frps -c frps.ini
360会报毒
frpc.ini
[common]
# 外网-服务器端ip
server_addr = 121.**.**.124
# 外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = ch
[ssh]
# 配置类型为http协议
type = tcp
# 内网机器的IP
local_ip = 127.0.0.1
#内网需要监听的端口(win10所启服务端口)
local_port = 8888
remote_port = 6000
./frpc -c frpc.ini
vps运行
curl 127.0.0.1
虽然成功,但是描述还是不详细,下面给出具体案例
场景:将内网linux 22端口映射到vps,kali访问vps,实现访问内网linux的效果
frps.ini
[common]
# 内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
./frps -c frps.ini
frpc.ini
[common]
# 外网-服务器端ip
server_addr = 121.**.**.124
# 外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
./frpc -c frpc.ini
ssh -oPort=6000 root@121.**.**.124
不得不说,很nice
frps.ini,设置http访问端口为8080,
https一样:type 设置为 https 即可
[common]
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 设置 http 访问端口为 8080
vhost_http_port = 8080
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
./frps -c ./frps.ini
frpc.ini
[common]
# 外网-服务器端ip
server_addr = 121.**.**.124
# 外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
[web]
type = http
# 本地机器上 Web 服务对应的端口
local_port = 80
# 绑定自定义域名
custom_domains = www.***.net
./frpc -c ./frpc.ini
http://frp.***.net:8080
通过 static_file
插件可以对外提供一个简单的基于 HTTP 的文件访问服务。
[common]
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 设置 http 访问端口为 8080
vhost_http_port = 8080
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
./frps -c ./frps.ini
[common]
# 外网-服务器端ip
server_addr = 121.**.**.124
# 外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /tmp
# 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix = static
# 用户名
plugin_http_user = admin
# 密码
plugin_http_passwd = root
./frpc -c ./frpc.ini
http://121.**.**.124:6000/static/
通过浏览器查看 frp 的状态以及代理统计信息展示。
注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。
需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:
frps.ini
[common]
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = root
http://121.**.**.124:7500
这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用 snappy:
frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true
如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 SSH 协议等,通过设置 use_encryption = true
,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。
如果传输的报文长度较长,通过设置 use_compression = true
对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 CPU 资源。
从 v0.25.0 版本开始 frpc 和 frps 之间支持通过 TLS 协议加密传输。通过在 frpc.ini
的 common
中配置 tls_enable = true
来启用此功能,安全性更高。
为了端口复用,frp 建立 TLS 连接的第一个字节为 0x17。
注意: 启用此功能后除 xtcp 外,不需要再设置 use_encryption。
目前支持在客户端的代理配置中设置代理级别的限速,限制单个 proxy 可以占用的带宽。
frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
bandwidth_limit = 1MB
在代理配置中增加 bandwidth_limit
字段启用此功能,目前仅支持 MB
和 KB
单位。
在 frpc 的配置文件中可以指定映射多个端口,目前只支持 tcp 和 udp 的类型。
这一功能通过 range:
段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。
例如要映射本地 6000-6005, 6007 这 6 个端口,主要配置如下:
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007
实际连接成功后会创建 8 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_7
。
frps.ini
# 下面这句开头必须要有,表示配置的开始
[common]
# frps绑定端口 (必选)
bind_port = 7000
# frps 日志 (可选)
log_file = ./frps.log
# frps 日志等级 (可选)
log_level = warn
# frps 日志存放天数 (可选)
log_max_days = 30
# 默认为900秒,即15分钟,如果设置成0就不会对报文时间戳进行超时验证
authentication_timeout = 900
# 仪表盘端口,只有设置了才能使用仪表盘(即后台)
dashboard_port = 7500
# 仪表盘访问的用户名密码,如果不设置,则默认都是 admin
dashboard_user = admin
dashboard_pwd = admin
# frp 穿透访问内网中的网站监听端口 配合后面使用nginx做域名绑定访问
vhost_http_port = 7001
# 将 frp.so.codeceo.org 解析到服务端后,可以使用此域名来访问客户端对应的 http
subdomain_host = frp.so.codeceo.org
frpc.ini
[common]
# 服务端公网IP
server_addr = xxx.xxx.xxx.xxx
# 服务端frps绑定端口
server_port = 7000
[web1]
type = http
local_port = 80
custom_domains = web1.***.org
[web2]
type = http
local_ip = localhost
local_port = 9528
use_gzip = true
custom_domains = web2.***.org
[web6]
type = http
local_port = 80
custom_domains = web6.***.org
./frps: cannot execute binary file: Exec format error
说明软件版本与服务器架构选择不匹配,更换版本即可解决。
参考地址:
https://www.jianshu.com/p/6be158cc3685
https://segmentfault.com/a/1190000021876836
https://www.cnblogs.com/liscookie/p/11237615.html