SmarGate
内网穿透,c++实现,无需公网IP,小巧,易用,快速,安全,最好的多链路聚合(p2p+proxy)模式,不做之一...这才是你真正想要的内网穿透工具!
Install / Use
/learn @lazy-luo/SmarGateREADME
samrGate(SG) 中文 | English
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怎么使用?
- 下载APP并注册
- 由于APP没有上应用市场,华为手机会被默认识别为“诈骗程序”,需首先关闭纯净模式,下载后设置手机为“飞行模式”后再安装。其它手机类似问题自行搜索解决办法。
- 下载合适的服务端版本,根据用户ID进行配置并运行
- 登录APP进行端口映射配置
- 使用配置的映射进行访问
有兴趣再细看
<details> <summary> <mark><font size=3 color=darkred>查看详细</font></mark> </summary>快速概览<a href=https://github.com/lazy-luo/smarGate/wiki/快速上手手册>【快速上手手册】</a> <a href="https://www.bilibili.com/video/BV1LM411k7Rf">【三方视频教学- B站】</a><br>
- 平台适配,支持linux、windows、macos、android(tob,小型机:hp-unix、solaris、AIX)<br>
- cpu架构,支持x86、arm、mips、riscv、LoongArch64(tob:alpha、PowerPC、SPRAC)<br>
- 注重安全,“内网”到“内网”的穿透,无需映射任何端口到外网,不更改任何防火墙配置<br>
- 注重带宽,”4G手机+v6宽带“采用P2P方式访问内网服务(基于TCP协议,v4支持NAT1-3穿透)<br>
- 注重节约,无需购买vps、无需公网IP;家中淘汰Android手机可做服务器<br>
- 注重可靠,随用随有,可7*24不间断服务,且不受UDP协议Qos之苦<br>
- 注重可控,客户端一点配置,且随时随地控制服务开启/关闭<br>
- 注重环保,免安装,体量小巧(mini版1MB左右) allinone,高性能且资源占用最少<br>
- 注重便携,无论工作或是度假,不管在任何地方,只要手机有网络,一切尽在掌控<br>
- ......如果这都是你想要的!请耐心继续往下看;如果你还想要...请提issue,【更新历史】也有看头哦<br>
- 免费,测试稳定后考虑开源. <br>
- 包含一个android客户端和需内网安装的服务端.<br>
APP端配置(必须)--- 无法正常使用典型情况
- 必须配置“允许后台运行”权限,否则切后台即被系统断连
- 必须配置“休眠时始终保持网络连接”,否则一旦休眠则被系统断连
- 可以配置“允许自启动”权限,否则Android服务端模式下无法开机启动(v0.30及后续版本)
- 可以配置“麦克风”权限,否则Android服务端无法提供语音监听功能(v0.30及后续版本)
- 注意:SG官方代理不提供到港澳台及国外IP的数据转发
smarGate是什么?<br>
官方命名为“移动网关”,通过手机客户端将位于内网的服务端网络进行按需暴露,核心引擎采用c++实现。<br>
“移动网关”是用户私有网关,所有共享访问入口都在客户端,不是类似其它穿透工具主推的面向域名的公共访问入口。打个比方:smarGate是将防盗门随身携带,其它穿透产品是将防盗门放到公共场所,额...虽然需要钥匙,但有种职业叫开锁匠<br>
具备如下技术特点:<br>
- 安全性 <br>
- 手机客户端作为主要的访问入口,按需开放,及时关闭。<br>
- 支持服务端间端口映射组网(v0.31及以后版本)。<br>
- 电脑可以接入手机热点或wifi环境下通过访问手机开放的端口穿透到内网进行访问(客户端会显示手机ip)。<br>
- 手机网络一般为私有网段别人无法访问。<br>
- 用户间隔离。<br>
- 扩展性<br>
- 基于内网网段代理,可以配合众多工具实现各种网络服务能力(telnet、ssh、http服务、内网摄像头、远程桌面等)<br>
- 面向极客,可访问自定义的内网服务(rpc)<br>
- 便利性<br>
- 手机客户端一点配置<br>
- 服务能力动态增减<br>
- 高性能<br>
- 0.1.1版本开始采用自主网络引擎,性能高,千元手机客户端能支持1千以上的并发共享访问<br>
- 高性能设计:<br>
- 跨平台实现 socket 多路复用,支持:poll、epoll、kqueue、port、select、IOCP 等模型<br>
- 采用 lock-free 算法<br>
- 线程池设计<br>
- socket 连接池<br>
- 多级任务队列 <br>
- ...<br>
smarGate有什么主要功能?<br>
- 支持代理穿透<br>
- 官方提供免费的代理服务器(共享带宽,多人共用时比较慢,最佳实践为启用自有代理服务器)<br>
- <I>如果自己有云服务器(具备公网ip),用户可自定义自己的代理服务器,且在代理服务器上安装proxy_server。所有数据传输走用户配置的代理服务器(代理服务器需要证书,可自动生成也可配置已有证书)</I> <br>
1、“代理服务器”配置如下(代理服务器必须允许任意端口“入站”连接):
<?xml version="1.0" encoding="GBK"?>
<app-config code="PROXY" name="proxy-server">
<app-parameter>
<proxy-service-port value="9001"/><!--自定义代理端口 -->
<owner-id value="xxxx" /><!-- xxxx 为注册成功返回的用户ID -->
<access-token value="nnnnn"/><!--访问token,必须为数字【可选配】 -->
<ssl-create-certfile value="true" /><!-- 如未用如下选项指定证书,则自动生成证书【必须确保安装openssl】,默认为 false 代表无需自动生成 -->
<!-- 如果自己有证书及私钥,则配置如下项,启动安全的SSL通道,其中文件名需要配置正确;没有证书则不需要配置,可启用上面自动生成证书选项
<ssl-cacert-file value="xxx.crt"/>
<ssl-privatekey-file value="xxx.key"/>
-->
</app-parameter>
<moudle-parameter>
<log-level value="LOG_ERROR"/>
<log-write-mode value="CONSOLE_ONLY"/>
</moudle-parameter>
</app-config>
2、"服务端"中增加如下配置:
......
<app-parameter>
<ssl-create-certfile value="true" />
<!-- 如果代理服务器启动安全的SSL通道,这里必须配置证书及私钥
<ssl-cacert-file value="xxx.crt"/>
<ssl-privatekey-file value="xxx.key"/>
-->
</app-parameter>
<moudle-parameter>
......
</moudle-parameter>
<!-- 配置上述代理服务器的ip或域名+端口,注意:ip必须为公网IP。ssl选项必须配置正确,如果代理服务器有证书(包括自动生成证书)且生效则配置为true否则为false -->
<channel address="xxx.xxx.xxx.xxx:9001" ssl="true" token="nnnnn" /><!--访问token,必须与代理服务器一致,如果没有则不配 -->
-
支持p2p通道<br>
- 使用TCP协议进行p2p穿透,提升安全性<br>
- 不是所有的网络都支持p2p,取决于两端NAT类型
- v0.14以上版本,直接支持ipv6,且能提供防火墙穿透
- P2P测试结论:一端是NAT4,另一端是NAT3或NAT4时无法打通<br> 注:NAT1-〉Full Cone , NAT2-〉Restricted Cone , NAT3-〉Port Restricted Cone , NAT4-〉Symmetric<br>
-
支持外网发布(有违安全设计理念,v0.31版本开放)<br>
- 其它内网穿透工具的主推模式,将内网服务直接映射到外网端口<br>
-
支持服务端之间的P2P端口映射(v0.31及以后版本) <br>
- 具体配置主要通过 ip@index方式支持<br>
1、支持基于tcp的P2P连接隧道
。安全可靠,避免Qos
2、支持所有基于tcp的各类协议”透明代理”
。可代理所有内网tcp服务(ssh、rdp、smb、vnc、摄像头、数据库服务等)
3、支持HTTP、HTTPS to HTTP
。支持http-head rewrite,支持将https服务代理成http
4、支持udp over tcp
。支持udp协议的服务代理
5、透明方式(无需关注ipv6地址)支持ipv6隧道
。自动建立v6隧道,访问时始终使用v4地址
6、支持自定义代理(需外网ip),接管所有数据转发
。无法p2p时,自动连接自定义代理,实现数据转发
7、自定义代理支持token及白名单配置
。支持安全机制
8、支持多级级联代理
。支持链式代理,支持多级无环代理
9、支持手机作为访问唯一入口 —— 安全 + 移动便捷
。手机在手、随用随有
10、端口映射全动态配置,支持映射配置“热拔插”
。代理增、删及时生效,无需重启
11、所有功能app端“一点配置”
。客户端一点配置,服务端运行时免配
12、支持P2P隧道及自定义代理隧道自动探测及连接
。无需干预,app自动连接,自动重试
13、支持动态协商端口,支持指定协商端口
。默认动态端口协商,支持配合防火墙配置协商端口
14、支持隧道连接优先级(P2P—>自定义代理-->官网代理)
。数据传输时,支持优先级隧道
15、支持ssl加密隧道
。支持P2P及代理隧道ssl加密,确保数据传输不泄密
16、支持流量限制
。支持进行网络带宽限制,默认不限流
17、支持网络切换(如:移动<—>wifi)自动识别+自动连接
。app端智能重连,始终确保服务可用性
18、支持不同局域网主机间端口映射 —— 如有一端主机有外网ip则可直接外网访问(version > v0.31)
。支持服务端组网映射,流量无需通过手机app(传统穿透模式)
19、app支持服务端模式,可以将手机配置成服务端
。android手机可作为服务端
20、支持远程文件管理功能:浏览、上传、下载、删除,支持断点续传(version >= v0.31.6)
。在有p2p或自定义代理时,激活文件管理功能,可对手机和服务端电脑文件进行基本操作
21、支持内置socks5、http代理(version >= v0.32.1)
。毕竟有三方专业工具如ss5、squid等,因此socks5及http代理是可选的功能
22、socks5、http代理支持域名和IP白名单(version >= v0.32.1)
。域名白名单支持四种模式匹配(完全匹配、向前匹配、向后匹配、中间匹配),默认配置文件名.white_list
。IP白名单支持CIDR格式ip-range配置,默认配置文件名.ipchecks
。。。待续
</details>
使用指南:<br>
<a href="https://www.bilibili.com/video/BV1LM411k7Rf">三方视频教学- B站</a><br><br> <a href="https://www.baidu.com/s?wd=smargate%20内网穿透">使用实践-度娘</a><br><br> <a href="https://www.google.com/search?q=smargate+内网穿透">使用实践-google</a>
1、下载app && 注册新用户
- 下载android app(app-release.apk包含客户端和服务端)支持armv7及arm64 cpu架构<br>
- 注册新用户(邀请码必填,为数字,可任意填。ps:如果必填信息未填完整,或包含中文字符,会注册失败)<br>
- 注册成功后请务必记住返回的服务ID(N) 【重要】:注册成功后务必在1小时内完成首次登录<br>
2、下载服务端 && 配置
- 下载内网服务器适合的服务端版本(目前支持linux-x86-32/64,windows,及linux-arm【树莓派、群晖】,另:Android app自带服务端模式)<br>
- 解压服务端压缩包,修改配置文件(conf-proxy.xml):<br>
<?xml version="1.0" encoding="GBK"?>
<app-config code="PROXY" name="proxy-server">
<app-parameter>
<!-- [ none | first | only ] ,none is default. 为P2P连接启用SSL加密,only代表只接受加密连接 -->
<ssl-tunnel-required value="first" />
<!-- 如未用如下选项指定证书,则自动生成证书【必须确保安装openssl】,默认为 false 代表无需自动生成 -->
<ssl-create-certfile value="true" />
<!-- 以下选项仅适用dynamic下的mini版本,指定ssl库及crypto库实际文件,linux下可由:ldd $(which openssl)|grep -E "libssl|libcrypto"|awk '{print $1}' 获取
<libssl value="libssl.so" />
<libcrypto value="libcrypto.so" />
-->
</app-parameter>
<moudle-parameter>
<log-level value="LOG_ERROR"/>
<log-write-mode value="CONSOLE_ONLY"/>
<app-name value="xxxxx [name of service points]." /><!-- need modify -->
<app-description value="yyyyy [description of service points]" /><!-- need modify -->
<!-- user-audit need modify (N 为注册成功返回的服务ID,index为自定义的服务端实例序号,建议从1开始,不能重复. 例如:[12345:1])-->
<user-audit value="N:index"/>
</moudle-parameter>
</app-config>
</details>
3、运行内网服务端(命令参数说明 i:最大接入连接数,o:最大接出连接数,w:最大线程数)<br>
- linux下执行命令:chmod +x proxy_server && nohup ./proxy_server -i1000 -o1000 -w8 >/dev/null & <br>
- windows下执行命令:proxy_server.exe -i1000 -o1000 -w8 <br>
- Android 手机/设备:运行app -〉编辑模式下,配置服务端信息 -〉打开“服务端”开关 -〉重启app <br>
- OpenWrt mips设备安装请见:<a href=https://github.com/lazy-luo/smarGate/issues/65>【MIPS linux下正确使用方式】</a><br>
4、登陆手机app && 配置端口映射 <a href="https://github.com/lazy-luo/smarGate/wiki/常用服务穿透配置">【常用服务配置】</a><br>
- 在客户端中可以看到上线的服务端(“访问点”),可以在客户端上定义端口映射规则<br>
5、电脑或手机可以直接访问手机客户端设置的服务(如ssh、http等)<br>
</details>补充说明:<br>
- 所有版本已经打包了依赖,开箱即用.<br>
- 系统将自动清除30天以上未使用的“僵尸账号”.<br>
- Android 客户端需要权限:<br>
1、后台执行权限(如果不允许,则app进入后台会断开连接)<br> 2、网络访问权限(基本权限)<br>
- 手机设置 (Android):<br>
<details> <summary>1、设置 -> 无线及网络 -> WLAN -> 系统休眠保持连接 "允许" (否则,系统休眠会被断连)<br> 2、设置 -> 无线及网络 -> 移动网络 -> 高级 ->始终保持数据连接 "允许"<br>
Related Skills
node-connect
338.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.6kCommit, push, and open a PR
