内网穿透,使用 C++ 实现,不需要公网 IP,体积小巧,易用,快速,安全,采用最佳的多链路聚合(P2P+Proxy)模式,无需任何配置…这就是你真正想要的内网穿透工具!
# samrGate(SG) 中文 | [English](https://github.com/lazy-luo/smarGate/blob/master/README_en.md)
## SG是什么?
* 是个跨网段远程端口映射工具
* 支持内网到内网、内网到外网映射
* 是个随身携带可灵活控制访问入口的工具
* 所有配置操作都在app客户端,一眼看全、高度安全可控
* 访问入口既可配置到app所在手机上,也能配置到任意SG服务端电脑上
* 是个简单的远程文件管理工具
* 可对手机及服务端所在服务器进行文件管理操作
* 是个简单的socks代理工具
* 是个简单的http(s)代理工具
* ......
## SG有什么特点?
* 所有映射都通过app客户端进行配置,服务端运行时免配置
* 支持服务端到APP及服务端到服务端的端口映射
* 可以将服务端所在内网任意机器任意端口映射到app所在手机上,通过访问手机本地端口进行穿透访问
* 可以通过app客户端配置,将A服务端内网任意主机任意端口映射到B服务端所在主机上
* 支持链式代理
* 支持多用户隔离
* 支持ipv4/6,基于TCP进行P2P穿透
* 支持自建代理进行数据转发
* 支持数据隧道加密(TLS)
* 支持自动数据隧道选择
* 优先P2P,次选自定义代理,官方代理兜底
* 支持自动版本升级及APP客户端上一键升级
* socks及http(s)代理支持自定义ip白名单及域名白名单,支持CIDR格式IP段及域名统配符
* 支持TCP协议服务,也支持UDP协议
* UDP采用UDP over TCP模式
* ......
## SG能解决什么问题?
* 无视内外网,安全访问内网资源的场景
* 需要P2P高带宽安全传输的场景
* 有公网IP,需要将内网服务发布出去的场景
* ......
## SG版本说明
Android 提供 **Base** 和 **Advance** 两个构建变体(Product Flavor),共用同一代码库,通过编译时功能开关 + R8死代码消除实现差异化:
| 功能 | Base | Advance |
|------|:----:|:-------:|
| 代理隧道 | ✓ | ✓ |
| 文件管理 | ✓ | ✓ |
| 音频采集/传输 | ✗ | ✓ |
| GPS 定位追踪 | ✗ | ✓ |
| 应用升级 | ✗ | ✓ |
| 屏幕/摄像头监控 | ✗ | ✗ |
- **Base** — 轻量版。仅保留核心代理隧道和文件管理,裁剪掉音频、定位、升级、监控等高权限/高风险功能模块。APK体积更小,权限更少,适合只需基础代理和文件访问的用户。
- **Advance** — 完整版。包含除监控外的全部功能模块,支持远程音频、位置追踪、应用升级等高级特性。适合需要完整远程管理能力的用户。
* 完整版华为手机会被默认识别为“诈骗程序”,需首先关闭纯净模式,下载后设置手机为“飞行模式”后再安装。其它手机类似问题自行搜索解决办法。
## SG怎么使用?
* 下载APP并注册
* 下载合适的服务端版本,根据用户ID进行配置并运行
* 登录APP进行端口映射配置
* 使用配置的映射进行访问
## 有兴趣再细看
查看详细
#
## 快速概览
【快速上手手册】 【三方视频教学- B站】
* 平台适配,支持linux、windows、macos、android(tob,小型机:hp-unix、solaris、AIX)
* cpu架构,支持x86、arm、mips、riscv、LoongArch64(tob:alpha、PowerPC、SPRAC)
* 注重安全,“内网”到“内网”的穿透,无需映射任何端口到外网,不更改任何防火墙配置
* 注重带宽,”4G手机+v6宽带“采用P2P方式访问内网服务(基于TCP协议,v4支持NAT1-3穿透)
* 注重节约,无需购买vps、无需公网IP;家中淘汰Android手机可做服务器
* 注重可靠,随用随有,可7*24不间断服务,且不受UDP协议Qos之苦
* 注重可控,客户端一点配置,且随时随地控制服务开启/关闭
* 注重环保,免安装,体量小巧(mini版1MB左右) allinone,高性能且资源占用最少
* 注重便携,无论工作或是度假,不管在任何地方,只要手机有网络,一切尽在掌控
* ......如果这都是你想要的!请耐心继续往下看;如果你还想要...请提issue,【更新历史】也有看头哦
* 免费,测试稳定后考虑开源.
* 包含一个android客户端和需内网安装的服务端.
## APP端配置(必须)--- 无法正常使用典型情况
* 必须配置“允许后台运行”权限,否则切后台即被系统断连
* 必须配置“休眠时始终保持网络连接”,否则一旦休眠则被系统断连
* 可以配置“允许自启动”权限,否则Android服务端模式下无法开机启动(v0.30及后续版本)
* 可以配置“麦克风”权限,否则Android服务端无法提供语音监听功能(v0.30及后续版本)
* 注意:SG官方代理不提供到港澳台及国外IP的数据转发
## smarGate是什么?
#### 官方命名为“移动网关”,通过手机客户端将位于内网的服务端网络进行按需暴露,核心引擎采用c++实现。
#### “移动网关”是用户私有网关,所有共享访问入口都在客户端,不是类似其它穿透工具主推的面向域名的公共访问入口。打个比方:smarGate是将防盗门随身携带,其它穿透产品是将防盗门放到公共场所,额...虽然需要钥匙,但有种职业叫开锁匠
##### 具备如下技术特点:
* 安全性
* 手机客户端作为主要的访问入口,按需开放,及时关闭。
* 支持服务端间端口映射组网(v0.31及以后版本)。
* 电脑可以接入手机热点或wifi环境下通过访问手机开放的端口穿透到内网进行访问(客户端会显示手机ip)。
* 手机网络一般为私有网段别人无法访问。
* 用户间隔离。
* 扩展性
* 基于内网网段代理,可以配合众多工具实现各种网络服务能力(telnet、ssh、http服务、内网摄像头、远程桌面等)
* 面向极客,可访问自定义的内网服务(rpc)
* 便利性
* 手机客户端一点配置
* 服务能力动态增减
* 高性能
* 0.1.1版本开始采用自主网络引擎,性能高,千元手机客户端能支持1千以上的并发共享访问
* 高性能设计:
* 跨平台实现 socket 多路复用,支持:poll、epoll、kqueue、port、select、IOCP 等模型
* 采用 lock-free 算法
* 线程池设计
* socket 连接池
* 多级任务队列
* ...
附:交互示意图
## smarGate有什么主要功能?
* 支持代理穿透
* 官方提供免费的代理服务器(共享带宽,多人共用时比较慢,最佳实践为启用自有代理服务器)
*
如果自己有云服务器(具备公网ip),用户可自定义自己的代理服务器,且在代理服务器上安装proxy_server。所有数据传输走用户配置的代理服务器(代理服务器需要证书,可自动生成也可配置已有证书)
```
1、“代理服务器”配置如下(代理服务器必须允许任意端口“入站”连接):
```
```
```
```
2、"服务端"中增加如下配置:
```
```
......
......
```
* 支持p2p通道
* 使用TCP协议进行p2p穿透,提升安全性
* 不是所有的网络都支持p2p,取决于两端NAT类型
* v0.14以上版本,直接支持ipv6,且能提供防火墙穿透
* P2P测试结论:一端是NAT4,另一端是NAT3或NAT4时无法打通
注:NAT1-〉Full Cone , NAT2-〉Restricted Cone , NAT3-〉Port Restricted Cone , NAT4-〉Symmetric
| 服务端 NAT | 客户端 NAT | P2P成功 |
| NAT1-3 | NAT1-3 | YES |
| NAT1-2 | NAT4 | YES |
| NAT4 | NAT1-2 | YES |
| NAT4 | NAT3-4 | NO |
| NAT3-4 | NAT4 | NO |
* 支持外网发布(有违安全设计理念,v0.31版本开放)
* 其它内网穿透工具的主推模式,将内网服务直接映射到外网端口
* 支持服务端之间的P2P端口映射(v0.31及以后版本)
* 具体配置主要通过 ip@index方式支持
附:主要功能简述
```
…
```
## 使用指南:
三方视频教学- B站
使用实践-度娘
使用实践-google
### 1、下载app && 注册新用户
* 下载android app(app-release.apk包含客户端和服务端)支持armv7及arm64 cpu架构
* 注册新用户(邀请码必填,为数字,可任意填。ps:如果必填信息未填完整,或包含中文字符,会注册失败)
* 注册成功后请务必记住返回的服务ID(N) 【重要】:注册成功后务必在1小时内完成首次登录
展开图示
### 2、下载服务端 && 配置
* 下载内网服务器适合的服务端版本(目前支持linux-x86-32/64,windows,及linux-arm【树莓派、群晖】,另:Android app自带服务端模式)
* 解压服务端压缩包,修改配置文件(conf-proxy.xml):
配置样例
```
```
### 3、运行内网服务端(命令参数说明 i:最大接入连接数,o:最大接出连接数,w:最大线程数)
* linux下执行命令:chmod +x proxy_server && nohup ./proxy_server -i1000 -o1000 -w8 >/dev/null &
* windows下执行命令:proxy_server.exe -i1000 -o1000 -w8
* Android 手机/设备:运行app -〉编辑模式下,配置服务端信息 -〉打开“服务端”开关 -〉重启app
* OpenWrt mips设备安装请见:
【MIPS linux下正确使用方式】
### 4、登陆手机app && 配置端口映射
【常用服务配置】
* 在客户端中可以看到上线的服务端(“访问点”),可以在客户端上定义端口映射规则
展开图示
服务端间端口映射配置需要在ip后加上服务端index序号,格式为:ip@idx
### 5、电脑或手机可以直接访问手机客户端设置的服务(如ssh、http等)
## 补充说明:
* 所有版本已经打包了依赖,开箱即用.
* 系统将自动清除30天以上未使用的“僵尸账号”.
* Android 客户端需要权限:
>> 1、后台执行权限(如果不允许,则app进入后台会断开连接)
>> 2、网络访问权限(基本权限)
* 手机设置 (Android):
>> 1、设置 -> 无线及网络 -> WLAN -> 系统休眠保持连接 "允许" (否则,系统休眠会被断连)
>> 2、设置 -> 无线及网络 -> 移动网络 -> 高级 ->始终保持数据连接 "允许"
常见问题答疑
* Q:如何下载安装 android app?
>> 1、用android手机浏览器打开 https://github.com/lazy-luo/smarGate/raw/master/app-release.apk
>> 2、弹出框中下载安装
>> 网盘链接为最新测试版本,github上版本稍有滞后
>> 附网盘下载地址: https://pan.baidu.com/s/14Iq60kxHW711NVoCVKWySg
>> gitee地址(速度快些,不会有图片无法显示问题):https://gitee.com/lazy-luo/smarGate
>> 如有需要请添加微信:ws_lzy008 注明:smarGate ,视情况组建技术讨论群
* Q:需要访问家中局域网多台设备,是否每台都需要安装服务端?
>> A:不需要,只需选择任意一台设备安装服务端即可。
* Q:为何有时连接不上?
>> A:服务端空闲约2-3分钟,会自动断开,须等待10秒左右重连。
* Q:ipv6为何无法P2P?
>> A:请将客户端及服务端更新到最新版本;确保手机与内网电脑能获取到全局ipv6地址;确保没被防火墙拦截(windows);排查两个ipv6是否能路由出去;查看hosts文件确保hostname能解析到ipv6地址。
* Q:IPv4及IPv6的P2P连接为何没有UDP端口?
>> A:smarGate基于TCP协议进行P2P穿透,具备更好的安全性,及连接可靠性。
* Q:手机NAS客户端为何无法登录?
>> A:确保手机NAS客户端ip黑名单中没有localhost(127.0.0.1)。
* Q:如何将异地公司内网机器共享给多地团队?
>> A:手机连接wifi,让团队成员电脑连接手机IP:PORT,直接通过手机代理进行访问。实测,2k以上的手机,可以带上百人团队共享访问。
* Q:为何windows服务端没有控制台黑框?
>> A:为了防止误操作关闭服务端,新版本windows服务端采用后台方式运行。如需关闭,请用“任务管理器”
* Q:P2P时流量是否还需要走中间代理?
>> A:不需要,直接点对点连接,网速取决于你的客户端及服务端所在网络。
* Q:smarGate后台运行是否很耗电?
>> A:经过长时间测试,按偶尔使用的频次,耗电量和任意一个系统进程相近,极低;频繁后台使用情况,长时间“后台”使用,整体耗电量等同于偶尔使用微信的耗电量。电源管理提示“后台频繁刷新。。。”,不用管它,后台传输数据都会有此提示,关键看耗电排名
* Q:smarGate连接优先级规则?
>> A:首选P2P连接,无P2P时使用自定义代理连接,无前两者连接时使用官方代理连接。
* Q: 同一个用户能否多处登录 ?
>> A: 可以多点登录,但同一时刻只能有一个客户端可以进行P2P;服务端单台机器只能启1个实例,服务端各实例配置确保序号不重复,否则将无法正常使用。
* Q: 服务端能否支持Android手机 ?
>> A:v0.27版本Android app加入了“服务端模式”的支持。
* Q: 客户端不同颜色表示啥意思?
>> A:ipv4下P2P标识为:
>> A:ipv6下P2P标识为:
>> A:自定义路由标识为:
## 最佳实践
* 以下为推荐使用的最佳实践,供参考:
1、android客户端设置为“自动登录”,免除每次输入用户名/密码的麻烦;
2、android客户端设置好后让其在后台运行,如果始终保持前台会定时刷新,webview控件空耗电,你懂的;
3、服务端始终保持后台运行,安全放心,只有你自己才能访问;
...使用场景...
【家用摄像头P2P直连】
## 免责申明
* 请您仔细阅读以下申明,您在使用smarGate工具软件,表明您对以下内容的接受:
1、严禁使用本软件从事计算机黑客以及其他任何危害计算机信息网络安全的行为;
2、本软件属于正规网络接入软件,请合理,合法的使用;勿用于违反法律,道德及影响他人利益的活动;如果因用于非法用途,由此造成的不良后果,由用户自行负责,本软件开发者不承担任何责任及损失。
## 捐助
如果您觉得 smarGate 对你有帮助,欢迎给予一定的捐助来维持项目的长期发展!
ps:捐赠建议附上注册用户名
微信捐赠
## 附录
更新历史
### 2026-07-24更新到v0.41.1
1、新增三种服务展示布局,顶部工具栏一键切换:
- **卡片模式(Card)**:经典卡片视图,服务信息一目了然
- **标签模式(Tab)**:顶部Tab栏横向滚动,按访问点分组切换,滚动位置自动记忆
- **紧凑模式(Compact)**:列表式压缩展示,点击展开查看详情,适合大批量服务管理
2、支持主题选择,布局偏好自动持久化(localStorage),下次启动恢复上次选择
3、网络引擎优化,提示性能及稳定性
4、新增”波斯语“、“韩语”、“俄罗斯语”的多语言支持
5、版本更新到v0.41.1
### 2026-03-03更新到v0.40.6
1、解决tcp连接延迟断开的问题
2、调整网络引擎,提升性能
3、版本更新到v0.40.6
### 2025-09-26更新到v0.40.5
1、解决代理模式下连接概率性断开的BUG
2、增强稳定性,提升性能
3、增加开机自启动脚本,使用方式如下:
* windows
```
windows下,确保 enable_autostart.bat 和 enable_autostart.ps1 文件与服务端在同一个目录
打开cmd窗口,开启自启动输入:
enable_autostart.bat on
关闭自启动输入:
enable_autostart.bat off
过程中要求脚本以管理员方式运行
```
* linux/macOS
```
确保 enable_autostart.sh 文件与服务端在同一个目录
开启自启动输入:
enable_autostart.sh on
关闭自启动输入:
enable_autostart.sh off
```
4、版本更新到v0.40.5
### 2025-03-25
1、文件管理新增空目录删除功能
2、服务端间连接增加使用时连接功能(20秒内重连1次)
3、增强稳定性,修复异常退出问题
### 2024-10-12更新到v0.40.4:
1、新增PROXY协议,单端口同时支持socks5及http代理
2、新增http代理用户/密码认证
```
...
...
```
3、其它优化
### 2024-08-20
1、提升文件传输速度
2、其它优化
### 2024-08-17
1、修复网络出口变化时服务端长时间丢失的BUG
2、改进P2P连接机制,提升P2P连接成功率
### 2024-08-06更新到v0.40.3
1、修复windows下代理连接偶发断开的BUG
2、修复windows下低带