有勇气的牛排博客

frp 内网穿透

有勇气的牛排 1035 网络、逆向、汇编 2021-10-13 14:24:58

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

frp启动

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

frp启动 客户端

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

frp内网web访问

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

frp统计面板访问

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


留言

专栏
文章
加入群聊