frp(内网穿透)

一、简介

frp 是一个可用于内网穿透的高性能的反向代理应用,支持多种协议类型

  • frp 为 C/S (客户端/服务端)架构
  • 服务端的配置文件名为 frps.ini (公网)
  • 客户端的配置文件名为 frpc.ini (内网)

下载地址:
https://github.com/fatedier/frp/releases

官方文档:
中文:https://gofrp.org/docs/
中文:https://github.com/fatedier/frp/blob/master/README_zh.md
英文:https://github.com/fatedier/frp#configuration-files

文件介绍:

frpc		#  客户端二进制文件
frpc_full.ini	#  客户端配置文件完整示例
frpc.ini	#  客户端配置文件

frps		#  服务端二进制文件
frps_full.ini	#  服务端配置文件完整示例
frps.ini	#  服务端配置文件

实验环境:
VMware 15

  • kali-1 IP:192.168.0.190(桥接模式,代替公网)
  • kali-2 IP:192.168.201.152(NAT模式,内网)

二、常用参数

frps.ini(服务端,用于公网)

[common]		#  共同配置,必需有该配置(请勿修改该代理名)
bind_addr = 0.0.0.0	#  绑定的 IP
bind_port = 7000	#  服务端监听的端口
vhost_http_port = 80	#  为代理的 http 设置一个监听端口(通过域名访问网页时须使用此处设置的端口访问)
vhost_https_port = 443	#  为代理的 https 设置一个监听端口(通过域名访问网页时须使用此处设置的端口访问)

#  安全
token = 123		#  设置身份验证
log_file = ./frps.log	#  指定日志路径
log_level = info	#  指定日志级别(trace(跟踪)、debug(调试)、info(信息)、warn(警告)、error(错误)
log_max_days = 3	#  指定日志记录最大天数
max_ports_per_client = 0	#  最大端口可用(默认为 0 ,表示无限制)
allow_ports = 2000-3000,3001,3003,4000-5000	#  端口白名单

#  传输
tls_only = false	#  指定是否指接受 TLS 加密(默认为 false)
tcp_mux = true	#  开启 tcp 流多路复用(默认为 true)

frpc.ini(客户端,用于内网)

[common]		    #  共同配置,必需有该配置(请勿修改该代理名)
server_add = 192.168.0.190  #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000	    #  服务端端口(需和服务端的端口配置为一致)
dns_server = 8.8.8.8	    #  指定 DNS 服务器
start = ssh,web		    #  启用代理名称为 ssh 跟 web 的代理(默认为空格,表示启用所有代理)
user = test_name	    #  连接时在代理名称前面添加 test_name. (如当前代理名称为 common ,则 test_name.common)

#  安全
token = 123		    #  设置身份验证(必须与服务端相同)
log_file = ./frpc.log	    #  指定日志路径(如指定了日志文件,则控制台不会显示相关信息(会显示在日志文件里))
log_level = info	    #  指定日志级别(trace(跟踪)、debug(调试)、info(信息)、warn(警告)、error(错误)
log_max_days = 3	    #  指定日志记录最大天数

#  传输
login_faile_exit = true     #  首次跟服务器连接失败时退出程序,如为 false 则失败后重新尝试连接(默认为 true)
protocol = tcp              #  用于连接服务器的通信协议(支持 tcp、kcp、websocket,默认为 tcp)
tls_enable = true	    #  通过 tls 连接服务端
tcp_mux = true		    #  开启 tcp 流多路复用(默认为 true,必须与服务端相同)

[ssh]			    #  代理名称
type = tcp		    #  协议型
local_ip = 127.0.0.1
local_port = 22		    #  需代理的端口
remote_port = 6000	    #  远程端口(远程访问时使用此端口,如为 0 则服务端随机分配一个端口)
bandwidth_limit = 1MB	    #  限制此代理的宽带(单位为 KB 和 MB)
use_encryption = true	    #  如为 true 则与服务端的通信会被加密(默认为 false)
use_compression = false	    #  如为 true 则消息将被压缩

[web]			    #  代理名称
type = http		    #  类型
local_ip = 127.0.0.1
local_port = 80		    #  需代理的端口
use_encryption = true	    #  如为 true 则与服务端的通信会被加密(默认为 false)
use_compression = false	    #  如为 true 则消息将被压缩
http_user = admin	    #  访问网页时需要的用户名
http_pwd = passwd	    #  密码
subdomain = test.com        #  子域名
custom_domains = www.test.com	#  域名

三、基于 SSH

1、由于是基于 ssh 的,所以需开启内网的 ssh 确保能正常连接( kali 默认关闭 ssh )

  • 1)ssh 配置文件默认路径为 /etc/ssh/sshd_config
    找到图中的两个地方,并修改为一样的即可

  • 2)修改完后需重启服务:sudo systemctl restart ssh

2、配置服务端 frps.ini

[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000    #  frps 监听的端口

启动服务:sudo ./frps -c ./frps.ini

3、配置客户端 frpc.ini

[common]          #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)

[ssh]                   #  代理名称
type = tcp              #  协议类型
local_ip = 127.0.0.1
local_port = 22         #  需代理的本地端口(需能正常访问)
remote_port = 6000      #  远程端口(远程访问时使用的端口)

启动服务 sudo ./frpc -c ./frpc.ini

4、使用 xshell 进行连接



四、基于 WEB

1、提供简单的文件访问服务
  • 1)配置服务端 frps.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000    #  frps 监听的端口

启动服务:sudo ./frps -c ./frps.ini

  • 2)配置客户端 frpc.ini
[common]        #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190 #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000          #  服务端端口(需和服务端的端口配置为一致)

[plugin_static_file]        #  代理名称
type = tcp                  #  协议类型
remote_port = 6002          #  远程端口(远程访问时使用的端口)
plugin = static_file        #  加载 static_file 插件
plugin_local_path = /var    #  须访问的路径
plugin_http_user = admin    #  用户名
plugin_http_passwd = passwd #  密码

启动服务:sudo ./frpc -c ./frpc.ini

  • 3)服务端使用浏览器访问

2、基于 IP 访问 http
  • 1)配置服务端 frps.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000    #  frps 监听的端口
vhost_http_port = 2333      #  为代理的 http 设置一个监听端口(通过域名访问网页时须使用此处设置的端口访问)

启动服务:sudo ./frps -c ./frps.ini

  • 2)配置客户端 frpc.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)

[web]                   #  代理名称
type = tcp              #  协议类型
local_ip = 127.0.0.1
local_port = 80         #  需代理的本地端口(需能正常访问)
remote_port = 7890      #  远程端口(通过 IP 访问网页时须使用此处设置的端口访问)

启动服务:sudo ./frpc -c ./frpc.ini

或客户端 frpc.ini 配置文件内容为

[common]            #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)

#  访问时使用服务端 vhost_http_port 参数设置的端口进行访问
[web]                   #  代理名称
type = http             #  协议类型
local_ip = 127.0.0.1
local_port = 80         #  需代理的本地端口(需能正常访问)
custom_domains = 192.168.0.190  #  服务端 IP
  • 3)服务端使用浏览器访问
3、基于域名访问 http
  • 1)配置服务端 frps.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000    #  frp 监听的端口
vhost_http_port = 2333      #  为代理的 http 设置一个监听端口(通过域名访问网页时须使用此处设置的端口访问)

启动服务:sudo ./frps -c ./frps.ini

  • 2)配置客户端 frpc.ini
[common]        #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)

[web]                   #  代理名称
type = http             #  协议类型
local_ip = 127.0.0.1
local_port = 80         #  需代理的本地端口(需能正常访问)
remote_port = 7890      #  远程端口(通过 IP 访问网页时须使用此处设置的端口访问)
custom_domains = www.test.com   #  设置需代理的域名(需能正常访问)

启动服务:sudo ./frps -c ./frps.ini

  • 3)由于是基于域名访问的所以须在服务端创建相应的域名记录

  • 4)服务端使用浏览器访问

4、基于域名访问 https

此处环境更改为:
VMware 15

  • kali-1(服务端) IP:192.168.0.190(桥接模式,代替公网)
  • Centos(客户端,搭建了 DNS、https 服务) IP:192.168.201.152(NAT模式,内网)

  • 1)配置服务端 frps.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000            #  服务端 frp 监听的端口
vhost_https_port = 4433     #  为代理的 https 设置一个监听端口(通过域名访问网页时须使用此处设置的端口访问)

启动服务:sudo ./frps -c ./frps.ini

  • 2)配置客户端 frpc.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)

[https]                         #  代理名称
type = https                    #  协议类型
custom_domains = www.test.com   #  设置需代理的域名(需能正常访问)
plugin = https2http             #  加载 https2http 插件
plugin_local_addr = 127.0.0.1
plugin_crt_path = /etc/pki/tls/certs/localhost.crt      #  设置本地证书
plugin_key_path = /etc/pki/tls/private/localhost.key    #  设置本地密钥
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

启动服务:sudo ./frpc -c ./frpc.ini

  • 3)由于是基于域名访问的所以须在服务端创建相应的域名记录

  • 4)在服务端使用浏览器进行访问

5、仪表盘(检查 frp 状态和代理信息的统计)
  • 1)配置服务端 frps.ini
[common]       #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000            #  服务端 frp 监听的端口
dashboard_port = 7500       #  仪表盘监听的端口
dashboard_user = admin      #  仪表盘的用户名
dashboard_pwd = passwd      #  仪表盘的密码
max_pool_count = 5          #  创建地址池连接上限
vhost_http_port = 2333      #  为代理的 http 设置一个监听端口

启动服务:sudo ./frps -c ./frps.ini

  • 2)使用浏览器访问并输入用户名跟密码

6、管理界面(用于管理客户端,可实现热加载)
  • 1)配置服务端 frps.ini
[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000    #  frp 监听的端口

启动服务 sudo ./frps -c ./frps.ini

  • 2)配置客户端 frpc.ini
[common]        #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)
admin_addr = 127.0.0.1          #  管理地址
admin_port = 7400               #  监听的端口
admin_user = admin              #  访问时的用户名
admin_pwd = passwd              #  访问时的密码

#  管理界面默认只能本地访问,所以需将端口代理出去实现公网访问
[web_admin]                   #  代理名称
type = tcp                    #  协议类型
local_ip = 127.0.0.1      
local_port = 7400             #  需代理的本地端口(需能正常访问)
remote_port = 7400            #  远程端口(访问时使用的端口)

启动服务 sudo ./frpc -c ./frpc.ini

  • 3) 在服务端使用浏览器进行访问

五、基于 DNS

1、配置服务端 frps.ini

[common]        #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000        #  服务端 frp 监听的端口

启动服务:sudo ./frps -c ./frps.ini

2、配置客户端 frpc.ini

[common]            #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190     #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000              #  服务端端口(需和服务端的端口配置为一致)

[ssh]                   #  代理名称
type = tcp              #  协议类型
local_ip = 127.0.0.1
local_port = 22         #  需代理的本地端口(需能正常访问)
remote_port = 6000      #  远程端口(访问时使用的端口)

[DNS]                   #  代理名称
type = udp              #  协议类型
local_ip = 127.0.0.1
local_port = 53         #  需代理的本地端口(需能正常访问)
remote_port = 5333      #  远程端口(访问时使用的端口)

启动服务:sudo ./frpc -c ./frpc.ini

3、在服务端使用 dig @192.168.0.190 -p 5333 -x 192.168.201.147 查看与 192.168.201.147 相关的域名解析


六、socks5

1、配置服务端 frps.ini

[common]            #  共同配置,必需有该配置(请勿修改该代理名)
bind_port = 7000    #  frp 监听的端口

启动服务:sudo ./frps -c ./frps.ini

2、配置客户端 frpc.ini

[common]                  #  共同配置,必需有该配置(请勿修改该代理名)
server_addr = 192.168.0.190 #  服务端 IP(需和服务端的 IP 配置为一致)
server_port = 7000          #  服务端端口(需和服务端的端口配置为一致)

[plugin_socks]              #  代理名称
type = tcp                  #  协议类型
remote_port = 8899          #  远程端口(服务端连接时使用此端口,如为 0 则服务端随机分配一个端口)
plugin = socks5             #  加载 socks5 插件
plugin_user = admin         #  用户名
plugin_passwd = passwd      #  密码
use_encryption = true       #  如为 true 则与服务端的通信会被加密(默认为 false)
use_compression = true      #  如为 true 则消息将被压缩

启动服务:sudo ./frpc -c ./frpc.ini

3、使用 Proxifier 进行连接

4、点击检查测试是否能正常连接

5、代理完成

posted @ 2020-09-10 13:30  Anonymous_1  阅读(8262)  评论(0编辑  收藏  举报