发布于12月5日12月5日 1。什么是玻璃钢 frp是一款专注于内网渗透的高性能反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。内网服务通过公网IP节点中转暴露到公网,安全便捷2。 VPS linux服务器端安装服务器端frps cd /optwget wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gztar-zxvf frp_0.48.0_linux_amd64.tar.gzmvfrp_0.48.0_linux_amd64 frpcd frp 3。配置服务器端frps的frps.ini cd frp vim frps.ini : [common]# frp 监听的端口,默认为7000,可改为其他bind_port=7000# HTTP 端口vhost_http_port=54321# HTTPS 端口vhost_https_port=54322# 用于认证,请自行修改,确保服务端与客户端一致token=123456 # Dashboard(服务端配置)# frp 管理后台端口,请更改dashboard_port=7002 根据自己的需要# frp管理后台用户名和密码,请修改为自己的dashboard_user=admindashboard_pwd=adminenable_prometheus=true # frp日志配置log_file=/var/log/frps.loglog_level=infolog_max_days=3 防火墙开放端口# 添加监听端口sudofirewall-cmd --permanent --add-port=7000/tcp# 添加管理后端端口sudofirewall-cmd --permanent --add-port=7002/tcpsudofirewall-cmd --reload 4。客户端配置frpc的frpc.ini cd frp vim frpc.ini :[common]#公网VPS IPserver_addr=106.13.218.47#外网-服务器监听端口(必须与frps.ini中的配置一致) server_port=7000#认证请自行修改,保证服务器和客户端一致token=123456 # AdminUI(客户端配置) #使用真实地址内网可以访问测试admin_addr=127.0.0.1 admin_port=7400admin_user=adminadmin_pwd=admin[web]type=httplocal_ip=127.0.0.1local_port=80remote_port=54321custom_domains=106.13.218.47 # 建议使用域名区分[mysql]type=tcplocal_ip=127.0.0.1local_port=3306remote_port=9000[ssh]#配置类型为tcp协议类型=tcp#内网机器的IP local_ip=127.0.0.1#内网机器的端口local_port=22remote_port=9001 [rdp]type=tcplocal_ip=127.0.0.1local_port=3389remote_port=9002 5。在公网服务器上启动frps 后台启动frpsnohup ./frps -c ./frps.ini 后台启动frps,并将日志输出到frps.lognohup ./frps -c frps.ini 21 frps.log 开始监听日志:2019/03/23 17:27:41 [I] [service.go:136] frps tcp 监听0.0.0.0:70002019/03/23 17:27:41 [I] [root.go:204] 启动frps成功表示服务器已经启动了frp服务,监听端口为7000 6。内网主机启动客户端frpc #启动linux客户端./frpc -c ./frpc.ini #后台启动linux客户端nohup ./frpc -c frpc.ininohup ./frpc -c frpc.ini frpc.log #启动windows客户端frpc.exe -c ./frpc.ini 4。 Linux系统下使用systemd控制frps并配置开机自动启动 1.在/etc/systemd/system目录下创建frps.service文件(centos系统自带systemd服务) vim /etc/systemd/system/frps.servicefrps.service: [Unit]#服务名称,可自定义Description=frp serverAfter=network.target syslog.targetWants=network.target [Service]Type=simple#启动frps的命令需要修改为你frps的安装路径ExecStart=/opt/frp/frps -c /opt/frp/frps.ini [安装]WantedBy=多用户.target4。使用systemd命令管理frps#启动frpsystemctl start frps#停止frpsystemctl stop frps#重启frpsystemctl restart frps#查看frp状态systemctl status frps5.配置frps开机自启动systemctl enable frps 6。代理类型 frp支持多种代理类型,适应不同的使用场景。类型说明tcp 简单的TCP 端口映射,服务器会根据不同的端口路由到不同的内网服务。 UDP是简单的UDP端口映射。服务器会根据不同的端口路由到不同的内网服务。 http为HTTP应用程序定制了一些附加功能,例如修改Host Header、添加身份验证等。 https 有一些为HTTPS 应用程序定制的附加功能。 stcp是一种安全的TCP内网代理,需要在访问者和访问者的机器上都部署frpc。无需在服务器端公开端口。 sudp是一个安全的UDP内网代理,需要在访问者和访问者的机器上都部署frpc。无需在服务器端公开端口。 xtcp点对点内网穿透代理,功能与stcp相同,但流量不需要通过服务器中转。 tcpmux支持服务器端TCP端口复用,允许用户通过同一端口访问不同的内网服务。7。使用场景 1。通过SSH访问内网机器 本示例允许用户通过简单配置TCP类型代理来访问内网服务器。在有公网IP的机器上部署frps,并修改frps.ini文件。这里使用最简单的配置来设置frp服务器用户接收客户端连接的端口:【常用】 绑定端口=7000 在需要访问的内网机器上部署frpc(SSH服务一般监听22端口),修改frpc.ini文件,假设frps所在服务器的公网IP为106.13.218.47【通用】 服务器地址=106.13.218.47 服务器端口=7000 [SSH] 类型=tcp 本地IP=127.0.0.1 本地端口=22 远程端口=6000 local_ip和local_port配置为需要暴露到公网的本地服务地址和端口。 remote_port表示frp服务器监听的端口。访问该端口的流量将被转发到本地服务对应的端口。 分别启动frps和frpc ./frps -c ./frps.ini ./frpc -c ./frpc.ini 4、通过SSH访问内网机器,假设用户名为test:ssh -oPort=6000 [email protected] 5.frp会将请求x.x.x.x:6000的流量转发到内网机器的22端口。 2.通过自定义域名访问内网Web服务 该示例允许用户通过简单配置HTTP类型代理来访问内网Web服务。与TCP类型相比,HTTP类型代理不仅需要监听服务器端额外的端口vhost_http_port来接收HTTP请求,而且还基于HTTP协议提供了很多附加功能。 1、修改frps.ini文件,设置监听HTTP请求端口为8080:【常用】 绑定端口=7000 虚拟主机http_端口=8080 2、修改frpc.ini文件。假设frps所在服务器的IP为106.13.218.47,local_port为本机Web服务的监听端口,绑定的自定义域名为custom_domains。 [常见] 服务器地址=106.13.218.47 服务器端口=7000 [网络] 类型=http 本地端口=80 自定义域=www.yourdomain.com [网络2] 类型=http 本地端口=8080 自定义域=www.yourdomain2.com 3、分别启动frps和frpc。 4、将www.yourdomain.com和www.yourdomain2.com的域名A记录解析为IP106.13.218.47。如果服务器已经有对应的域名,也可以将CNAME记录解析为服务器原有的域名。或者通过修改HTTP请求的Host字段也可以达到同样的效果。 5、通过浏览器访问http://www.yourdomain.com:8080来访问内网机器80端口的服务,通过访问http://www.yourdomain2.com:8080来访问内网机器8080端口的服务。3。转发DNS查询请求 本示例通过简单配置UDP类型代理来转发DNS查询请求。 DNS查询请求通常使用UDP协议。 frp支持内网UDP服务的穿透,配置方法与TCP基本相同。 frps.ini内容如下:【常用】 绑定端口=7000 frpc.ini内容如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [域名] 类型=udp 本地IP=8.8.8.8 本地端口=53 远程端口=6000 这里替换了Google的DNS查询服务器的地址。仅用于测试UDP代理,没有实际意义。 分别启动frps和frpc。 4. 使用dig测试UDP包转发是否成功。预计返回www.baidu.com域名的解析结果。挖@x.x.x.x -p 6000 www.baidu.com 4。转发 Unix 域套接字 本示例配置Unix域socket客户端插件,通过TCP端口访问内网Unix域socket服务,如Docker Daemon。 frps.ini内容如下:【常用】 绑定端口=7000 frpc.ini内容如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [unix_domain_socket] 类型=tcp 远程端口=6000 插件=unix_domain_socket plugin_unix_path=/var/run/docker.sock 分别启动frps和frpc。 4、通过curl命令查看docker版本信息curl http://x.x.x.x:6000/version 5。向外部提供简单的文件访问服务 此示例配置static_file 客户端插件,将本地文件公开到公共网络以供其他人访问。 static_file插件可以向外界提供简单的基于HTTP的文件访问服务。 frps.ini内容如下:【常用】 绑定端口=7000 frpc.ini内容如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [测试静态文件] 类型=tcp 远程端口=6000 插件=静态文件 # 对外暴露的文件目录 plugin_local_path=/tmp/文件 # 用户访问时会从URL中去掉前缀,剩下的内容就是要访问的文件路径。 plugin_strip_prefix=静态 插件_http_用户=abc 插件_http_passwd=abc 分别启动frps和frpc。 4、通过浏览器访问http://x.x.x.x:6000/static/,查看/tmp/file目录下的文件。系统将要求您输入已设置的用户名和密码。4。为本地 HTTP 服务启用 HTTPS https2http插件可以将本地HTTP服务转换为HTTPS服务并提供给外界。 frps.ini内容如下:【常用】 绑定端口=7000 frpc.ini内容如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [test_htts2http] 类型=https 自定义域=test.yourdomain.com 插件=https2http 插件本地地址=127.0.0.1:80 # HTTPS证书相关配置 plugin_crt_path=./server.crt 插件密钥路径=./server.key 插件_主机_标头_重写=127.0.0.1 plugin_header_X-From-Where=frp 分别启动frps和frpc。 4.通过浏览器访问https://test.yourdomain.com。5。安全公开内网服务 此示例将创建一个只有您可以访问的SSH 服务代理。对于某些服务,如果直接暴露在公网,就会存在安全风险。 使用stcp(秘密tcp)类型代理可以防止任何人能够访问被渗透的服务,但访问者还需要运行另一个frpc客户端。 frps.ini内容如下:【常用】 绑定端口=7000 在需要暴露外网的机器上部署frpc,配置如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [秘密_ssh] 类型=stcp # 只有具有相同sk的用户才能访问该服务 sk=abcdefg 本地IP=127.0.0.1 本地端口=22 同样在想要访问内网服务的机器上部署frpc,配置如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [secret_ssh_visitor] 类型=stcp # stcp 的访问者 角色=访客 # 要访问的stcp代理的名称 服务器名称=secret_ssh sk=abcdefg # 绑定本地端口以访问SSH服务 绑定地址=127.0.0.1 绑定端口=6000 4、通过SSH访问内网机器,假设用户名为test:ssh -oPort=6000 [email protected] 6。点对点内网穿透 此示例将演示一种无需通过服务器转发流量即可访问内联网服务的方法。 frp提供了一种新的代理类型xtcp来应对要传输大量数据且流量不经过服务器的场景。 使用方式与stcp类似,双方都需要部署frpc来建立直连。 目前处于发展初期,无法穿透所有类型的NAT设备,因此穿透成功率较低。当穿透失败时,可以尝试stcp。 frps.ini的内容如下。需要额外配置来侦听UDP 端口以支持此类客户端:[常见] 绑定端口=7000 绑定udp 端口=7000 在需要暴露外网的机器上部署frpc,配置如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [p2p_ssh] 类型=xtcp # 只有具有相同sk的用户才能访问该服务 sk=abcdefg 本地IP=127.0.0.1 本地端口=22 同样在想要访问内网服务的机器上部署frpc,配置如下:【常用】 服务器地址=x.x.x.x 服务器端口=7000 [p2p_ssh_visitor] 类型=xtcp # xtcp 的访问者 角色=访客 # 要访问的xtcp代理的名称 服务器名称=p2p_ssh sk=abcdefg # 绑定本地端口访问ssh服务 绑定地址=127.0.0.1 绑定端口=6000 4、通过SSH访问内网机器,假设用户名为test:ssh -oPort=6000 [email protected] 常用函数 仪表板 通过浏览器查看frp状态和代理统计信息显示。 注意:仪表板尚未针对显示大量代理数据进行优化。如果仪表板访问速度较慢,请不要启用此功能。需要在frps.ini中指定dashboard服务使用的端口来启用该功能: [常见] 仪表板端口=7500 #dashboard用户名和密码,默认是admin 仪表板用户=管理员 Dashboard_pwd=admin 打开浏览器,通过http://[server_addr]:7500访问仪表板界面。默认用户名和密码是admin。 加密和压缩 默认情况下,这两个功能未启用。您需要通过frpc.ini中的配置为指定代理启用加密和压缩。压缩算法使用snappy: #frpc.ini [SSH] 类型=tcp 本地端口=22 远程端口=6000 使用加密=true use_compression=true 如果公司内网防火墙识别并阻止外部网络访问,例如禁用SSH协议等,通过设置use_encryption=true,frpc和frps之间的通信内容将被加密传输,可以有效防止流量被拦截。 如果传输的报文长度较长,设置use_compression=true来压缩传输的内容可以有效减少frpc和frps之间的网络流量,加快流量转发速度,但会消耗一些额外的CPU资源。 TLS 从v0.25.0版本开始,frpc和frps之间支持通过TLS协议加密传输。通过在frpc.ini 中配置tls_enable=true 来启用此功能,以提高安全性。 为了端口复用,frp用来建立TLS连接的第一个字节是0x17。 注意:启用该功能后,除xtcp外,无需设置use_encryption。代理速度限制 目前支持在客户端的代理配置中设置代理级别的速度限制,以限制单个代理可以占用的带宽。 #frpc.ini [SSH] 类型=tcp 本地端口=22 远程端口=6000 bandwidth_limit=1MB 在代理配置中添加bandwidth_limit字段以启用此功能。目前仅支持MB 和KB 单位。 范围端口映射 frpc配置文件中可以指定映射多个端口。目前仅支持tcp 和udp 类型。 该功能是通过range:段落标签实现的。客户端会解析该标签中的配置,并将其拆分为多个代理。每个代理都以数字作为后缀命名。 例如映射6000-6005、6007这6个本地端口,主要配置如下: #frpc.ini [范围:test_tcp] 类型=tcp 本地IP=127.0.0.1 本地端口=6000-6006,6007 remote_port=6000-6006、6007实际连接成功后会创建8个代理,分别命名为test_tcp_0、test_tcp_1 . test_tcp_7
创建帐户或登录后发表意见