qq远程协助 qq远程协助会泄露吗
内网穿透介绍
内网穿透是一种将内部网络中的应用程序通过公共网络访问的技术。它可以帮助用户轻松地在外部网络访问内部网络中运行的应用程序,而无需在路由器上进行端口转发或使用VPN。
内网穿透的实现方式有多种,其中较为常见的是基于反向代理服务器的方式。反向代理服务器可以将公共网络请求转发到内部网络中的应用程序,并将响应返回给客户端。这种方式需要在公共网络上配置反向代理服务器,并在内部网络中配置相应的应用程序和端口转发规则。
另一种实现方式是使用专门的内网穿透软件。这些软件通常需要在内部网络中安装代理客户端,并在公共网络上安装代理服务器。用户可以通过代理客户端连接到代理服务器,然后访问内部网络中运行的应用程序。这种方式相对比较简单,但需要额外安装和配置软件。
内网穿透的使用场景非常广泛,例如远程桌面、文件共享、监控系统等。特别是在疫情期间,远程办公成为了趋势,内网穿透技术也因此得到了更广泛的应用。
然而,内网穿透也存在一些安全风险。由于内网穿透技术可以将内部网络中的应用程序暴露在公共网络上,如果没有正确的安全措施,可能会导致网络攻击和数据泄露等问题。因此,在使用内网穿透技术时需要注意加强网络安全,例如限制访问IP地址、加密数据传输等。
frp介绍
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, http等协议。
frp 项目官网是 http://github.com/origin/fatedier/frp,中文官方文档地址:http://gofrp.org/docs/。除了安装过程,中文文档对使用过程已经介绍的非常详细,如遇到问题,建议先查看官方文档。
frp工作原理为:
- 服务端运行,监听一个主端口,等待客户端的连接;
- 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
- 服务端fork新的进程监听客户端指定的端口;
- 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
- 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
其他内网穿透工具
除了开源的frp,还有如下内网穿透/远控工具:
- ngrok:ngrok 也是很知名的内网穿透工具,自从2.x版本不再开源,名气在下降。ngrok官网也提供免费穿透隧道,但国内连接速度较慢。NATAPP、Sunny-Ngrok等工具基于ngrok二次开发而来;
- ZeroTier:号称零配置的内网穿透工具,提供与企业 SDN 交换机同等的高级网络虚拟化和管理功能,可以跨本地和广域网连接任何设备和程序。然而由于ZeroTier的服务器在国外,国内连接速度经常很感人,需要自行搭建Moon来解决;
- V2ray:V2ray是一个功能强大的网络平台,提供代理、反向代理、内网穿透等功能。本站之前已有V2ray相关资源: V2ray教程、V2ray高级教程:流量伪装 和 V2ray客户端下载;
- 花生壳/向日葵:相信大部分折腾过路由器的人都听说过花生壳DDNS,可能也知道向日葵远控软件。花生壳和向日葵是贝锐科技旗下的产品,注册账户后可免费体验内网穿透功能;
- TeamViewer:TeamViewer是国内外知名的远程控制、远程会议软件,额外提供文件上传下载等实用功能,比QQ远程协助好用一万遍。虽然个人版免费,但是现在TeamViewer商业化道路一去不复往,用起来越来越恶心;
- SAKURA FRP:基于frp的免费内网穿透工具,也有收费服务。对于这家的行为,网民褒贬不一。如果你没有自己的服务器,可以尝试一下这家。
frp内网穿透教程
1、部署前需准备
1.1、准备一台能被公网访问到的(通过ip能够直接访问得到服务器)服务器,一台内网的测试机(你自己电脑就行),本人用的服务器是华为云的linux服务器,ip为124.5.23.6,测试机为win10系统。
1.2、访问官方项目地址:Releases · fatedier/frp · GitHub 下载最新的包:
根据系统类型下载对应的包
2、部署服务端
2.1、把 frp_0.48.0_linux_386.tar.gz(如果服务器为window,解压frp_0.48.0_windows_386.zip) 解压出来保留以下三个文件
2.2、修改配置文件,用编辑器打开frps.ini文件,做如下修改
[common]
服务器监听穿口
bind_port = 15000
身份认证 后面客户端连接也需配置这个token 还有另一种oidc验证比较复杂,可以参考官方文档
token=332361857
web界面端口
dashboard_port = 15001
dashboard 用户名密码,可选,默认为空
dashboard_user = admin
dashboard_pwd = admin332361857
设置每个代理可以创建的连接池上限,避免大量资源占用,客户端设置超过此配置后会被调整到当前值
max_pool_count = 5
端口白名单
allow_ports = 15000,15001,15002-15009
http监听的端口
vhost_http_port = 15003
日志文件配置
log_file = ./frps.log
日志级别配置
log_level = info
以上是本次测试需要用到的参数,详细参数如下:
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
bind_addr | string | 服务端监听地址 | 0.0.0.0 | ||
bind_port | int | 服务端监听端口 | 7000 | 接收 frpc 的连接 | |
bind_udp_port | int | 服务端监听 UDP 端口 | 0 | 用于辅助创建 P2P 连接 | |
kcp_bind_port | int | 服务端监听 KCP 协议端口 | 0 | 用于接收采用 KCP 连接的 frpc | |
quic_bind_port | int | 服务端监听 QUIC 协议端口 | 0 | 用于接收采用 QUIC 连接的 frpc | |
quic_keepalive_period | int | quic 协议 keepalive 间隔,单位: 秒 | 10 | ||
quic_max_idle_timeout | int | quic 协议的最大空闲超时时间,单位: 秒 | 30 | ||
quic_max_incoming_streams | int | quic 协议最大并发 stream 数 | 100000 | ||
proxy_bind_addr | string | 代理监听地址 | 同 bind_addr | 可以使代理监听在不同的网卡地址 | |
log_file | string | 日志文件地址 | ./frps.log | 如果设置为 console,会将日志打印在标准输出中 | |
log_level | string | 日志等级 | info | trace, debug, info, warn, error | |
log_max_days | int | 日志文件保留天数 | 3 | ||
disable_log_color | bool | 禁用标准输出中的日志颜色 | false | ||
detailed_errors_to_client | bool | 服务端返回详细错误信息给客户端 | true | ||
tcp_mux_keepalive_interval | int | tcp_mux 的心跳检查间隔时间 | 60 | 单位:秒 | |
tcp_keepalive | int | 和客户端底层 TCP 连接的 keepalive 间隔时间,单位秒 | 7200 | 负数不启用 | |
heartbeat_timeout | int | 服务端和客户端心跳连接的超时时间 | 90 | 单位:秒 | |
user_conn_timeout | int | 用户建立连接后等待客户端响应的超时时间 | 10 | 单位:秒 | |
udp_packet_size | int | 代理 UDP 服务时支持的最大包长度 | 1500 | 服务端和客户端的值需要一致 | |
tls_cert_file | string | TLS 服务端证书文件路径 | |||
tls_key_file | string | TLS 服务端密钥文件路径 | |||
tls_trusted_ca_file | string | TLS CA 证书路径 |
2.3、把三个文件上传至服务器指定目录,运行命令
./frps -c frps.ini
输出如下命令说明服务端运行成功
2023/03/31 10:59:01 [I] [root.go:206] frps uses config file: /home/web/frp/frps.ini
2023/03/31 10:59:01 [I] [service.go:200] frps tcp listen on 0.0.0.0:15000
2023/03/31 10:59:01 [I] [service.go:261] http service listen on 0.0.0.0:15003
2023/03/31 10:59:01 [I] [service.go:317] Dashboard listen on 0.0.0.0:15001
2023/03/31 10:59:01 [I] [root.go:215] frps started successfully
2.4、访问web界面 124.5.23.6:15001,如下:
2.5、至此服务端配置成功
3、客户端基础配置
3.1、把 frp_0.48.0_windows_386.zip(如果服务器为window,解压frp_0.48.0_linux_386.tar.gz) 解压出来保留以下三个文件
3.2、修改配置文件,用编辑器打开frpc.ini文件,做如下修改
[common]
外网-服务器端ip
server_addr = 124.5.23.6
外网-服务器端监听的端口(必须与frps.ini中的配置一致)
server_port = 15000
token验证需与服务端配置的一致
token=332361857
日志文件配置
log_file = ./frps.log
日志级别配置
log_level = info
连接池大小
pool_count=5
客户端的web界面
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
以上是本次测试需要用到的参数,详细参数如下:
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
server_addr | string | 连接服务端的地址 | 0.0.0.0 | ||
server_port | int | 连接服务端的端口 | 7000 | ||
connect_server_local_ip | string | 连接服务端时所绑定的本地 IP | |||
dial_server_timeout | int | 连接服务端的超时时间 | 10 | ||
dial_server_keepalive | int | 和服务端底层 TCP 连接的 keepalive 间隔时间,单位秒 | 7200 | 负数不启用 | |
http_proxy | string | 连接服务端使用的代理地址 | 格式为 {protocol}://user:passwd@192.168.1.128:8080 protocol 目前支持 http、socks5、ntlm | ||
log_file | string | 日志文件地址 | ./frpc.log | 如果设置为 console,会将日志打印在标准输出中 | |
log_level | string | 日志等级 | info | trace, debug, info, warn, error | |
log_max_days | int | 日志文件保留天数 | 3 | ||
disable_log_color | bool | 禁用标准输出中的日志颜色 | false | ||
pool_count | int | 连接池大小 | 0 | ||
user | string | 用户名 | 设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突 | ||
dns_server | string | 使用 DNS 服务器地址 | 默认使用系统配置的 DNS 服务器,指定此参数可以强制替换为自定义的 DNS 服务器地址 | ||
login_fail_exit | bool | 第一次登陆失败后是否退出 | true | ||
protocol | string | 连接服务端的通信协议 | tcp | tcp, kcp, quic, websocket | |
quic_keepalive_period | int | quic 协议 keepalive 间隔,单位: 秒 | 10 | ||
quic_max_idle_timeout | int | quic 协议的最大空闲超时时间,单位: 秒 | 30 | ||
quic_max_incoming_streams | int | quic 协议最大并发 stream 数 | 100000 | ||
tls_enable | bool | 启用 TLS 协议加密连接 | false | ||
tls_cert_file | string | TLS 客户端证书文件路径 | |||
tls_key_file | string | TLS 客户端密钥文件路径 | |||
tls_trusted_ca_file | string | TLS CA 证书路径 | |||
tls_server_name | string | TLS Server 名称 | 为空则使用 server_addr | ||
disable_custom_tls_first_byte | bool | TLS 不发送 0x17 | false | 当为 true 时,不能端口复用 | |
tcp_mux_keepalive_interval | int | tcp_mux 的心跳检查间隔时间 | 60 | 单位:秒 | |
heartbeat_interval | int | 向服务端发送心跳包的间隔时间 | 30 | 建议启用 tcp_mux_keepalive_interval,将此值设置为 -1 | |
heartbeat_timeout | int | 和服务端心跳的超时时间 | 90 | ||
udp_packet_size | int | 代理 UDP 服务时支持的最大包长度 | 1500 | 服务端和客户端的值需要一致 | |
start | string | 指定启用部分代理 | 当配置了较多代理,但是只希望启用其中部分时可以通过此参数指定,默认为全部启用 | ||
meta_xxx | map | 附加元数据 | 会传递给服务端插件,提供附加能力 |
3.3、用cmd运行
frpc -c frpc.ini
3.4、访问管理端 :7400/,出现如下说明配置成功
4、代理配置
4.1、代理的基础配置如下:
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
type | string | 代理类型 | 是 | tcp | tcp, udp, http, http, stcp, sudp, xtcp, tcpmux | |
use_encryption | bool | 是否启用加密功能 | 否 | false | 启用后该代理和服务端之间的通信内容都会被加密传输 | |
use_compression | bool | 是否启用压缩功能 | 否 | false | 启用后该代理和服务端之间的通信内容都会被压缩传输 | |
proxy_protocol_version | string | 启用 proxy protocol 协议的版本 | 否 | v1, v2 | 如果启用,则 frpc 和本地服务建立连接后会发送 proxy protocol 的协议,包含了原请求的 IP 地址和端口等内容 | |
bandwidth_limit | string | 设置单个 proxy 的带宽限流 | 否 | 单位为 MB 或 KB,0 表示不限制,如果启用,会作用于对应的 frpc | ||
bandwidth_limit_mode | string | 限流类型,客户端限流或服务端限流 | 否 | client | client, server |
4.2、代理的本地服务配置
local_ip 和 plugin 的配置必须配置一个,且只能生效一个,如果配置了 plugin,则 local_ip 配置无效。
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
local_ip | string | 本地服务 IP | 是 | 127.0.0.1 | 需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址 | |
local_port | int | 本地服务端口 | 是 | 配合 local_ip | ||
plugin | string | 客户端插件名称 | 否 | 见客户端插件的功能说明 | 用于扩展 frpc 的能力,能够提供一些简单的本地服务,如果配置了 plugin,则 local_ip 和 local_port 无效,两者只能配置一个 | |
plugin_params | map | 客户端插件参数 | 否 | map 结构,key 需要都以 “plugin_” 开头,每一个 plugin 需要的参数也不一样,具体见客户端插件参数中的内容 |
4.3、代理的负载均衡和健康检查
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
group | string | 负载均衡分组名称 | 否 | 用户请求会以轮询的方式发送给同一个 group 中的代理 | ||
group_key | string | 负载均衡分组密钥 | 否 | 用于对负载均衡分组进行鉴权,group_key 相同的代理才会被加入到同一个分组中 | ||
health_check_type | string | 健康检查类型 | 否 | tcp,http | 配置后启用健康检查功能,tcp 是连接成功则认为服务健康,http 要求借口返回 2xx 的状态码则认为服务健康 | |
health_check_timeout_s | int | 健康检查超时时间(秒) | 否 | 3 | 执行检查任务的超时时间 | |
health_check_max_failed | int | 健康检查连续错误次数 | 否 | 1 | 连续检查错误多少次认为服务不健康 | |
health_check_interval_s | int | 健康检查周期(秒) | 否 | 10 | 每隔多长时间进行一次健康检查 | |
health_check_url | string | 健康检查的 HTTP 接口 | 否 | 如果 health_check_type 类型是 http,则需要配置此参数,指定发送 http 请求的 url,例如 “/health” |
4.4、代理的TCP配置,在下面我们配置访问内网的SSH。
4.4.1、接上一节继续修改配置文件frpc.ini,在前面的基础上加入
代理名称 注意代理名称不能重复,配置多个需要区分,如[ssh] [ssh1] [ssh2]
[ssh]
配置类型为http协议
type = tcp
内网机器的IP
local_ip = 127.0.0.1
内网需要监听的端口(win10所启服务端口)
local_port = 22
remote_port = 15002
是否开启加密
use_encryption = true
是否开启压缩
use_compression = true
4.4.2、运行客户端后
ssh -p 15002 name@124.5.23.6
4.4.3、成功访问
4.5、代理的Http配置,下面我们配置一个访问内网web的例子
4.5.1、接上一节继续修改配置文件frpc.ini,在前面的基础上加入
[web]
type = http
本地端口
local_port = 8080
服务器绑定自定义域名,需把域名解析到服务器ip
custom_domains = proxy.test.com
4.5.2、运行客户端后,即可访问到本地的http服务了,15003是服务端配置的http监听端口
4.6、frp还可以代理STCP\SUDP\XTCP\TCPMUX\UDP,由于本人暂时没用到,等用到时候再给大家分享,有问题可以评论区提出,谢谢!
最后分享下配置过程中会涉及到的一些技术:
1、如果需要frp开机自启动可以参考:frp开机自启动
2、配置中所有配置的端口服务端都需要开放防火墙,参考:linux防火墙配置
1