Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
forked from lazy-luo/smarGate

A mobile gateway that exposes the intranet service points.It contains a Android client app and server program.

Notifications You must be signed in to change notification settings

isunty/smarGate

Repository files navigation

中文 | English

重要的事情说三遍!

(很多人反馈连接闪断,请务必按本说明后面"补充说明"章节进行设置!!) X 3

欢迎大家发布smarGate使用心得及实践,如果你觉得好用请推荐给你的朋友;你的认可是产品持续发展的动力。

移动网关

  • 无需公网IP,提供内网穿透能力,通过加密隧道,能安全的将内网服务暴露出来.
  • 支持p2p通讯(p2p通道可用时显示为绿色)
  • 支持自定义代理服务器
    免费,测试稳定后考虑开源.
    包含一个android客户端和需内网安装的服务端.

samrGate是什么?

官方命名为"移动网关",通过手机客户端将位于内网的服务端网络进行按需暴露,核心引擎采用c++实现。

"移动网关"是用户私有网关,所有共享访问入口都在客户端,不是类似其它穿透工具主推的面向域名的公共访问入口。打个比方:smarGate是将防盗门随身携带,其它穿透产品是将防盗门放到公共场所,额...虽然需要钥匙,但有种职业叫开锁匠

具备如下特点:

  • 安全性
    • 手机客户端作为唯一的访问入口,按需开放,及时关闭。
    • 电脑可以接入手机热点或wifi环境下通过访问手机开放的端口穿透到内网进行访问(客户端会显示手机ip)。
    • 手机网络一般为私有网段别人无法访问。
    • 用户间隔离。
  • 扩展性
    • 基于内网网段代理,可以配合众多工具实现各种网络服务能力(telnet、ssh、http服务、内网摄像头、远程桌面等)
    • 面向极客,可访问自定义的内网服务(rpc)
  • 便利性
    • 手机客户端一点配置
    • 服务能力动态增减
  • 高性能
    • 0.1.1版本开始采用自主网络引擎,性能高,千元手机客户端能支持1千以上的并发共享访问
    • 引擎稳定性正处于测试期,新增-x参数选项用于压测小报文QPS,欢迎大家在不同硬件环境自测,测试方法:./proxy_server -i10000 -o10000 -wnn(nn建议为cpu数量)-xhttp-port (http-port自定义,如果支持SSL则http-port+1为https端口。然后用wrk工具测试)

samrGate有什么技术特点?

  • 交互示意图
    operator

  • 支持代理穿透

    • 官方提供免费的代理服务器(共享带宽,多人共用时比较慢,最佳实践为启用自有代理服务器)
    • 如果自己有云服务器(具备公网ip),用户可自定义自己的代理服务器,且在代理服务器上安装proxy_server。所有数据传输走用户配置的代理服务器(为了防止中间人攻击,代理服务器需要用户生成自签名证书) 。"代理服务器"配置如下:
 <?xml version="1.0" encoding="GBK"?>
 <app-config code="PROXY" name="proxy-server">
 <app-parameter>
	 <proxy-service-port value="9001"/><!--自定义代理端口 -->
 <!-- 如果自己有证书及私钥,则配置如下项,启动安全的SSL通道,其中文件名需要配置正确;没有证书则不需要配置,启用普通tcp连接
	 <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>
 服务端中增加如下配置:
......
 <moudle-parameter>
 ......
 </moudle-parameter>
 <!-- 配置上述代理服务器的ip或域名+端口,注意:ip必须为公网IP。ssl选项必须配置正确,如果代理服务器有证书且生效则配置为true否则为false -->
 <channel address="xxx.xxx.xxx.xxx:9001" ssl="false" />
  • 支持p2p通道
    • 使用TCP协议进行p2p穿透,提升安全性
    • 不是所有的网络都支持p2p,取决于两端NAT类型
    • v0.14以上版本,直接支持ipv6,且能提供防火墙穿透
  • 支持外网发布(有违安全设计理念,免费版不提供支持)
    • 其它内网穿透工具的主推模式,将内网服务直接映射到外网端口

已知问题

  1. 客户端采用webview控件,在android下启动时内存占用较多,后续版本计划用native界面,预计内存占用可降低到50m左右
  2. 部分机型android8.0下可能闪退,原因是webview版本BUG,可以尝试升级系统或升级webview组件

使用指南:

1、下载android客户端(app-release.apk)支持armv7及arm64 cpu架构

2、注册新用户(邀请码必填,为数字,可任意填。ps:如果必填信息未填完整,或包含中文字符,会注册失败)

login
register

3、注册成功后请务必记住返回的服务ID(N)

register result

4、下载内网服务器适合的服务端版本(目前支持linux-x86-32/64,windows,及linux-arm【树莓派、群晖】)

5、解压服务端压缩包,修改配置文件(conf-proxy.xml):

 <?xml version="1.0" encoding="GBK"?>
 <app-config code="PROXY" name="proxy-server">
 <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 value="N:index"/><!-- need modify (N 为注册成功返回的服务ID,index为自定义的服务端实例序号,建议从1开始,不能重复. 例如:[12345:1])-->
 </moudle-parameter>
 </app-config>

6、执行服务端命令(参数说明 i:最大接入连接数,o:最大接出连接数,w:最大线程数)

  • linux下执行命令:"chmod +x proxy_server && nohup ./proxy_server -i1000 -o1000 -w8 >/dev/null &"
  • windows下执行命令:proxy_server -i1000 -o1000 -w8

7、使用注册时的用户名/密码登陆手机客户端

operator

8、在客户端中可以看到上线的服务端,可以在客户端上定义端口反弹规则

operator

配置中的"远程ip"为"访问点"对应内网中的某台主机ip(localhost或127.0.0.1代表内网server端所在机器本身)

operator

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

补充说明:

  • 所有版本已经打包了依赖,开箱即用.
  • 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

    如有需要请添加微信:ws_lzy008 注明:smarGate ,视情况组建技术讨论群

  • 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: 客户端不同颜色表示啥意思?

    A:ipv4下P2P标识为:
    ipv4 p2p
    A:ipv6下P2P标识为:
    ipv6 p2p
    A:自定义路由标识为:
    userdefineproxyer p2p

最佳实践

  • 以下为推荐使用的最佳实践,供参考:
    1、android客户端设置为"自动登录",免除每次输入用户名/密码的麻烦;
    2、android客户端设置好后让其在后台运行,如果始终保持前台会定时刷新,webview控件空耗电,你懂的;
    3、服务端始终保持后台运行,安全放心,只有你自己才能访问;
    4、确认网络能P2P访问的情况下,客户端会自动断开重连,在IPv6下如果服务端ip续租时有可能会失败,你只需重启一下android客户端;
    ...待补充...

免责申明

  • 请您仔细阅读以下申明,您在使用smarGate工具软件,表明您对以下内容的接受:
    1、严禁使用本软件从事计算机黑客行为以及其他任何危害计算机信息网络安全的;
    2、本软件属于正规网络接入软件,请合理,合法的使用;勿用于违反法律,道德及影响他人利益的活动;如果因用于非法用途,由此造成的不良后果,由用户自行负责,本软件开发者不承担任何责任及损失。

更新列表

....初始版本v0.13

2019年04月15日更新到v0.14:

1、解决网络切换重连失败问题
2、引擎性能优化
3、新增对IPv6防火墙穿透支持(移动端支持ipv6,且内网服务端支持ipv6)
【重要提示】v0.14版本将于之前版本不兼容,请务必更新版本!!!

2019年04月16日更新到v0.15:

1、修复IPV4/IPV6网络切换,无法P2P的BUG

2019年04月23日更新到v0.16:

1、修复服务端在挂载私有路由时偶发core dump的BUG

2019年05月04日:

1、修复服务端在挂载私有路由时当线程数量<4时偶发CPU高占用的BUG,版本保持不变

2019年05月16日更新到v0.17:

1、性能优化
2、提供P2P断开重连机制

2019年05月21日:

1、修复Raspbian jessie下无法检测IPv6的BUG

2019年05月27日更新到v0.18:

1、性能优化
2、提供ipv6 P2P开关机制:<ipv4-tunnel-first value="false"/> 如需关闭ipv6点对点则设置为"true",默认值为"false"
3、增加客户端ipv6标志及连接状态提示

2019年08月18日更新到v0.19:

1、性能优化
2、解决特定条件下(自定义路由)无法可靠断开服务端连接的BUG
3、进行静态编译,不再依赖inux系统gcc动态库,可直接在alpine中运行(需要创建软连接)
4、支持编译为mini版本,不再静态编译openssl;对openssl库从0.9.8~1.1.1的全系动态兼容,二进制包缩小为1M左右(如有需要请联系,单独下发mini版本)

2019年09月01日更新到v0.20:

1、优化连接检查性能(提供并行异步检测)
2、支持将HTTPS代理到HTTP(客户端http访问,服务端为https)

2019年09月05日:

1、解决客户端修改密码后自动登录失败的BUG
2、提供自动登录超时控制

2019年09月10日更新到v0.21:

1、优化网络性能
2、客户端支持显示实时网速

2019年09月15日:

1、进一步降低在低速率下服务端cpu占用率
2、常规优化,版本保持不变

2019年09月20日更新到v0.22:

1、提升P2P检测可靠性
2、修复windows下特定情况无法进行P2P连接的BUG
3、客户端提供了手动p2p重连功能(弱网络环境下自动重连可能失败,此时可以手动重连)

2019年09月30日更新到v0.23:

1、修复弱网络环境下windows服务端高CPU占用BUG
2、整体提升网络传输速度

捐助

如果您觉得 smarGate 对你有帮助,欢迎给予我们一定的捐助来维持项目的长期发展!
ps:捐赠建议附上注册用户名

微信捐赠

About

A mobile gateway that exposes the intranet service points.It contains a Android client app and server program.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /