内网穿透 frp : 隐藏通信隧道技术

x33g5p2x  于2022-02-12 转载在 其他  
字(4.6k)|赞(0)|评价(0)|浏览(451)

1 frp介绍

注意事项:
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

2 服务端配置

2.1 修改配置

vim frps.ini
[common]
# 内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = ch

2.2 启动

./frps -c frps.ini

3 客户端配置

3.1 win10

360会报毒

3.1.1 修改配置

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
3.1.2 启动
./frpc -c frpc.ini

3.1.3 访问

vps运行

curl 127.0.0.1

虽然成功,但是描述还是不详细,下面给出具体案例

4 通过ssh访问内网机器

  • 内网linux
  • 公网vps
  • 内网kali

场景:将内网linux 22端口映射到vps,kali访问vps,实现访问内网linux的效果

4.1 服务端

frps.ini

[common]
# 内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
./frps -c frps.ini

4.2 客户端

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

4.3 访问

ssh -oPort=6000 root@121.**.**.124

不得不说,很nice

5 通过域名访问内网Web服务

5.1 服务端

frps.ini,设置http访问端口为8080,

https一样:type 设置为 https 即可

[common]
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 设置 http 访问端口为 8080
vhost_http_port = 8080
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
./frps -c ./frps.ini

5.2 客户端

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

5.3 访问

http://frp.***.net:8080

6 对外提供简单的文件访问服务(测试失败)

通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务。

6.1 服务端

[common]
# 服务器端监听的端口,默认是7000,可自定义
bind_port = 7000
# 设置 http 访问端口为 8080
vhost_http_port = 8080
# 用于身份验证,请自行修改,要保证服务端与客户端一致
token = charles
./frps -c ./frps.ini

6.2 客户端

[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

6.3 访问

http://121.**.**.124:6000/static/

7 统计面板

通过浏览器查看 frp 的状态以及代理统计信息展示。

注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。

需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:

7.1 服务端

frps.ini

[common]
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = root

7.2 访问

http://121.**.**.124:7500

8 加密与压缩

这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用 snappy:

8.1 客户端

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 资源。

9 TLS

从 v0.25.0 版本开始 frpc 和 frps 之间支持通过 TLS 协议加密传输。通过在 frpc.inicommon 中配置 tls_enable = true 来启用此功能,安全性更高。

为了端口复用,frp 建立 TLS 连接的第一个字节为 0x17。

注意: 启用此功能后除 xtcp 外,不需要再设置 use_encryption。

10 代理限速

目前支持在客户端的代理配置中设置代理级别的限速,限制单个 proxy 可以占用的带宽。

10.1 客户端

frpc.ini

[ssh]
type = tcp
local_port = 22
remote_port = 6000
bandwidth_limit = 1MB

在代理配置中增加 bandwidth_limit 字段启用此功能,目前仅支持 MBKB 单位。

11 范围端口映射

在 frpc 的配置文件中可以指定映射多个端口,目前只支持 tcp 和 udp 的类型。

这一功能通过 range: 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。

例如要映射本地 6000-6005, 6007 这 6 个端口,主要配置如下:

11.1 客户端

[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

12 其他参考

12.1 服务端

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

12.2 客户端

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

13 常见报错

./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

相关文章