SkillAgentSearch skills...

SmarGate

内网穿透,c++实现,无需公网IP,小巧,易用,快速,安全,最好的多链路聚合(p2p+proxy)模式,不做之一...这才是你真正想要的内网穿透工具!

Install / Use

/learn @lazy-luo/SmarGate
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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>
<details> <summary> <mark><font size=6 color=darkred>附:交互示意图</font></mark> </summary> <img src="https://github.com/lazy-luo/smarGate/blob/master/res/smarGateArch.png" /><br> </details>

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>
    <table> <th>服务端 NAT</th><th>客户端 NAT</th><th>P2P成功</th> <tr><td>NAT1-3</td><td>NAT1-3</td><td>YES</td></tr> <tr><td>NAT1-2</td><td>NAT4</td><td>YES</td></tr> <tr><td>NAT4</td><td>NAT1-2</td><td>YES</td></tr> <tr><td>NAT4</td><td>NAT3-4</td><td>NO</td></tr> <tr><td>NAT3-4</td><td>NAT4</td><td>NO</td></tr> </table>
  • 支持外网发布(有违安全设计理念,v0.31版本开放)<br>

    • 其它内网穿透工具的主推模式,将内网服务直接映射到外网端口<br>
  • 支持服务端之间的P2P端口映射(v0.31及以后版本) <br>

    • 具体配置主要通过 ip@index方式支持<br>
<details> <summary> <mark><font size=6 color=darkred>附:主要功能简述</font></mark> </summary>
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>
<details> <summary> <mark><font size=5 color=darkred>展开图示</font></mark> </summary> <img src="https://github.com/lazy-luo/smarGate/blob/master/res/login.png" /><br> <img src="https://github.com/lazy-luo/smarGate/blob/master/res/reg.png" /><br> </details>

2、下载服务端 && 配置

  • 下载内网服务器适合的服务端版本(目前支持linux-x86-32/64,windows,及linux-arm【树莓派、群晖】,另:Android app自带服务端模式)<br>
  • 解压服务端压缩包,修改配置文件(conf-proxy.xml):<br>
<details> <summary> <mark><font size=5 color=darkred>配置样例</font></mark> </summary>
  <?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>
<details> <summary> <mark><font size=5 color=darkred>展开图示</font></mark> </summary> <img src="https://github.com/lazy-luo/smarGate/blob/master/res/proxy.png" /><br> <b>服务端间端口映射配置需要在ip后加上服务端index序号,格式为:ip@idx</b> <img src="https://github.com/lazy-luo/smarGate/blob/master/res/server-proxy.png" /><br> </details>

5、电脑或手机可以直接访问手机客户端设置的服务(如ssh、http等)<br>

</details>

补充说明:<br>

  • 所有版本已经打包了依赖,开箱即用.<br>
  • 系统将自动清除30天以上未使用的“僵尸账号”.<br>
  • Android 客户端需要权限:<br>

1、后台执行权限(如果不允许,则app进入后台会断开连接)<br> 2、网络访问权限(基本权限)<br>

  • 手机设置 (Android):<br>

1、设置 -> 无线及网络 -> WLAN -> 系统休眠保持连接 "允许" (否则,系统休眠会被断连)<br> 2、设置 -> 无线及网络 -> 移动网络 -> 高级 ->始终保持数据连接 "允许"<br>

<details> <summary>

Related Skills

View on GitHub
GitHub Stars4.4k
CategoryDevelopment
Updated4d ago
Forks475

Languages

JavaScript

Security Score

85/100

Audited on Mar 23, 2026

No findings