grs-通过REALITY协议实现的内网穿透工具
字数 2893 2025-08-22 12:23:07

GRS 内网穿透工具使用指南

1. 工具概述

GRS (Golang Reverse SOCKS5) 是一个基于 REALITY 协议实现的反向 SOCKS5 代理工具,由三个组件组成:

  1. grss (Golang Reverse SOCKS5 Server) - 服务端,需运行在具有公网 IP 的机器上
  2. grsc (Golang Reverse SOCKS5 Client) - 客户端,需运行在内网机器上
  3. grsu (Golang Reverse SOCKS5 User) - 用户端,需运行在用户机器上,提供 SOCKS5 服务

2. 主要特点

  • 完美消除网络特征,防止服务端被主动探测
  • 客户端和用户端内嵌配置,无需命令行或额外配置文件
  • 使用 REALITY 协议进行通信
  • 相比 frp、nps 等传统内网穿透工具更具隐蔽性

3. 使用步骤

3.1 生成配置、客户端和用户端

grss gen www.qq.com:443 127.0.0.1:443

参数说明:

  • www.qq.com:443 - 被模拟的目标
  • 127.0.0.1:443 - 服务器监听地址(应填写公网 IP,端口最好与模拟目标一致)

可选参数:

  • -d - 调试模式
  • -f=[chrome|firefox|safari|ios|android|edge|360|qq] - 客户端指纹(默认:chrome)
  • -e= - 过期时间(秒,默认:30)
  • -o= - 服务器配置文件输出路径(默认:config.json)
  • --dir= - 客户端输出目录(默认:当前目录)

3.2 启动服务端

grss serv

可选参数:

  • -o= - 服务器配置文件路径(默认:config.json)

3.3 启动客户端

grsc

3.4 启动用户端

grsu -l 127.0.0.1:61080

参数说明:

  • -l - SOCKS5 监听地址(默认:"127.0.0.1:61080")

4. 常见问题

4.1 服务端被探测时使用的证书

  • 服务端被探测时相当于一个端口转发,证书与被模拟的目标完全一致
  • 验证方法:
    • 修改本地 hosts 文件后通过浏览器访问验证
    • 使用 curl 验证:curl -v -I --resolve "www.qq.com:443:127.0.0.1" https://www.qq.com

4.2 客户端/用户端提示 verify failed

可能原因:

  1. 服务端时间和客户端时间相差超过 expire second(默认30秒)
    • 解决方案:生成时修改最大超时时间 grss gen -e 60 www.qq.com:443 127.0.0.1:443
    • 或使用 NTP 同步时间
  2. 服务端配置重新生成后未使用最新的 grsc 和 grsu(预共享密钥不匹配)
  3. 客户端的网络可能被劫持

5. REALITY 协议详解

5.1 基本概念

REALITY 是安全传输层的实现,与 TLS 类似但增加了 TLS 指纹伪装功能:

  • 确定一个伪装服务器目标(如 https://example.com)
  • 普通客户端访问时,代理到 example.com
  • 特殊客户端访问时,进行特定处理流程

5.2 工作原理

  1. 预共享密钥:服务端和特殊客户端预先共享一对公私密钥(x25519)
  2. 私有握手关键步骤
    • 特殊客户端生成临时公私密钥对(x25519)
    • 修改 Client Hello 中 Extension 的 key_share 为临时公钥
    • 通过临时私钥与预共享公钥及 hkdf 算法生成 authkey
    • 使用 authkey 加密版本号、时间戳等信息,替换 Client Hello 中的 Session ID 字段
  3. 服务端处理
    • 使用预共享私钥和客户端临时公钥生成 authkey
    • 解密 Session ID 字段,验证时间戳、版本号
    • 验证成功则生成临时可信证书(ed25519)
    • 验证失败则代理到伪装服务器
  4. 客户端证书验证
    • 使用 hmac 和 authkey 计算证书签名并与收到的签名对比
    • 签名一致:进行特定处理流程
    • 签名不一致但为真证书:进入爬虫模式
    • 否则发送 TLS alert

5.3 特点与限制

特点

  • 完美模拟伪装服务器的 TLS 指纹
  • 巧妙利用 TLS1.3 的 key_share 和 Session ID 字段进行私有握手
  • 不需要域名和证书

限制

  • 只能使用 TLS1.3,且必须使用 x25519
  • 伪装服务器目标必须使用 x25519,否则私有握手无法成功

5.4 与原版 REALITY 的区别

  1. 使用两组预共享公私钥(分别用于密钥交换/验签)
  2. 验签使用额外一次通信进行
  3. 模仿站必须是 TLS1.2,且最好使用 AEAD 套件:
    • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
    • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    • TLS_RSA_WITH_AES_128_GCM_SHA256
    • TLS_RSA_WITH_AES_256_GCM_SHA384
  4. 服务端代码实现更简单,不需要修改 TLS 库

6. 技术实现细节

  1. 服务端实现

    • 采用读写过滤方式判断握手是否完成
    • 不直接修改 TLS 库,降低实现复杂度
    • 返回的临时证书特征被 TLS1.3 的加密机制隐藏
  2. 客户端实现

    • 内嵌配置,减少外部依赖
    • 自动处理密钥交换和验证流程
    • 支持多种浏览器指纹模拟

7. 安全注意事项

  1. 定期更新预共享密钥
  2. 严格控制 expire second 参数,平衡安全性与可用性
  3. 确保服务端时间准确,避免验证失败
  4. 选择信誉良好的伪装目标,减少被识别的风险
  5. 监控服务端日志,及时发现异常连接尝试

8. 性能优化建议

  1. 选择地理位置接近的伪装服务器
  2. 根据网络条件调整 expire second 参数
  3. 在高延迟网络环境下考虑增加超时容忍度
  4. 选择性能较好的 AEAD 加密套件

9. 高级配置

  1. 多目标模拟:可配置多个伪装目标,根据客户端特征动态选择
  2. 负载均衡:在多台服务器部署 grss,实现高可用
  3. 自定义指纹:开发自定义指纹插件,模拟特定环境
  4. 日志定制:根据需要调整日志级别和输出格式

10. 故障排查指南

  1. 连接失败

    • 检查服务端端口是否开放
    • 验证伪装目标是否可达
    • 检查时间同步情况
  2. 性能问题

    • 检查网络延迟
    • 验证伪装目标的性能
    • 检查服务器资源使用情况
  3. 验证失败

    • 检查预共享密钥是否匹配
    • 验证时间戳是否在有效范围内
    • 检查网络中间件是否修改了流量

通过以上详细指南,用户可以全面了解 GRS 工具的使用方法、技术原理和最佳实践,实现安全、隐蔽的内网穿透。

GRS 内网穿透工具使用指南 1. 工具概述 GRS (Golang Reverse SOCKS5) 是一个基于 REALITY 协议实现的反向 SOCKS5 代理工具,由三个组件组成: grss (Golang Reverse SOCKS5 Server) - 服务端,需运行在具有公网 IP 的机器上 grsc (Golang Reverse SOCKS5 Client) - 客户端,需运行在内网机器上 grsu (Golang Reverse SOCKS5 User) - 用户端,需运行在用户机器上,提供 SOCKS5 服务 2. 主要特点 完美消除网络特征,防止服务端被主动探测 客户端和用户端内嵌配置,无需命令行或额外配置文件 使用 REALITY 协议进行通信 相比 frp、nps 等传统内网穿透工具更具隐蔽性 3. 使用步骤 3.1 生成配置、客户端和用户端 参数说明: www.qq.com:443 - 被模拟的目标 127.0.0.1:443 - 服务器监听地址(应填写公网 IP,端口最好与模拟目标一致) 可选参数: -d - 调试模式 -f=[chrome|firefox|safari|ios|android|edge|360|qq] - 客户端指纹(默认:chrome) -e= - 过期时间(秒,默认:30) -o= - 服务器配置文件输出路径(默认:config.json) --dir= - 客户端输出目录(默认:当前目录) 3.2 启动服务端 可选参数: -o= - 服务器配置文件路径(默认:config.json) 3.3 启动客户端 3.4 启动用户端 参数说明: -l - SOCKS5 监听地址(默认:"127.0.0.1:61080") 4. 常见问题 4.1 服务端被探测时使用的证书 服务端被探测时相当于一个端口转发,证书与被模拟的目标完全一致 验证方法: 修改本地 hosts 文件后通过浏览器访问验证 使用 curl 验证: curl -v -I --resolve "www.qq.com:443:127.0.0.1" https://www.qq.com 4.2 客户端/用户端提示 verify failed 可能原因: 服务端时间和客户端时间相差超过 expire second(默认30秒) 解决方案:生成时修改最大超时时间 grss gen -e 60 www.qq.com:443 127.0.0.1:443 或使用 NTP 同步时间 服务端配置重新生成后未使用最新的 grsc 和 grsu(预共享密钥不匹配) 客户端的网络可能被劫持 5. REALITY 协议详解 5.1 基本概念 REALITY 是安全传输层的实现,与 TLS 类似但增加了 TLS 指纹伪装功能: 确定一个伪装服务器目标(如 https://example.com) 普通客户端访问时,代理到 example.com 特殊客户端访问时,进行特定处理流程 5.2 工作原理 预共享密钥 :服务端和特殊客户端预先共享一对公私密钥(x25519) 私有握手关键步骤 : 特殊客户端生成临时公私密钥对(x25519) 修改 Client Hello 中 Extension 的 key_ share 为临时公钥 通过临时私钥与预共享公钥及 hkdf 算法生成 authkey 使用 authkey 加密版本号、时间戳等信息,替换 Client Hello 中的 Session ID 字段 服务端处理 : 使用预共享私钥和客户端临时公钥生成 authkey 解密 Session ID 字段,验证时间戳、版本号 验证成功则生成临时可信证书(ed25519) 验证失败则代理到伪装服务器 客户端证书验证 : 使用 hmac 和 authkey 计算证书签名并与收到的签名对比 签名一致:进行特定处理流程 签名不一致但为真证书:进入爬虫模式 否则发送 TLS alert 5.3 特点与限制 特点 : 完美模拟伪装服务器的 TLS 指纹 巧妙利用 TLS1.3 的 key_ share 和 Session ID 字段进行私有握手 不需要域名和证书 限制 : 只能使用 TLS1.3,且必须使用 x25519 伪装服务器目标必须使用 x25519,否则私有握手无法成功 5.4 与原版 REALITY 的区别 使用两组预共享公私钥(分别用于密钥交换/验签) 验签使用额外一次通信进行 模仿站必须是 TLS1.2,且最好使用 AEAD 套件: TLS_ ECDHE_ RSA_ WITH_ CHACHA20_ POLY1305 TLS_ ECDHE_ ECDSA_ WITH_ CHACHA20_ POLY1305 TLS_ ECDHE_ RSA_ WITH_ AES_ 128_ GCM_ SHA256 TLS_ ECDHE_ ECDSA_ WITH_ AES_ 128_ GCM_ SHA256 TLS_ ECDHE_ RSA_ WITH_ AES_ 256_ GCM_ SHA384 TLS_ ECDHE_ ECDSA_ WITH_ AES_ 256_ GCM_ SHA384 TLS_ RSA_ WITH_ AES_ 128_ GCM_ SHA256 TLS_ RSA_ WITH_ AES_ 256_ GCM_ SHA384 服务端代码实现更简单,不需要修改 TLS 库 6. 技术实现细节 服务端实现 : 采用读写过滤方式判断握手是否完成 不直接修改 TLS 库,降低实现复杂度 返回的临时证书特征被 TLS1.3 的加密机制隐藏 客户端实现 : 内嵌配置,减少外部依赖 自动处理密钥交换和验证流程 支持多种浏览器指纹模拟 7. 安全注意事项 定期更新预共享密钥 严格控制 expire second 参数,平衡安全性与可用性 确保服务端时间准确,避免验证失败 选择信誉良好的伪装目标,减少被识别的风险 监控服务端日志,及时发现异常连接尝试 8. 性能优化建议 选择地理位置接近的伪装服务器 根据网络条件调整 expire second 参数 在高延迟网络环境下考虑增加超时容忍度 选择性能较好的 AEAD 加密套件 9. 高级配置 多目标模拟 :可配置多个伪装目标,根据客户端特征动态选择 负载均衡 :在多台服务器部署 grss,实现高可用 自定义指纹 :开发自定义指纹插件,模拟特定环境 日志定制 :根据需要调整日志级别和输出格式 10. 故障排查指南 连接失败 : 检查服务端端口是否开放 验证伪装目标是否可达 检查时间同步情况 性能问题 : 检查网络延迟 验证伪装目标的性能 检查服务器资源使用情况 验证失败 : 检查预共享密钥是否匹配 验证时间戳是否在有效范围内 检查网络中间件是否修改了流量 通过以上详细指南,用户可以全面了解 GRS 工具的使用方法、技术原理和最佳实践,实现安全、隐蔽的内网穿透。