Coder Social home page Coder Social logo

lazy-luo / smargate Goto Github PK

View Code? Open in Web Editor NEW
3.9K 68.0 442.0 995.74 MB

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

JavaScript 100.00%
nat proxy p2p tools free android ipv6

smargate's Introduction

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并注册
  • 下载合适的服务端版本,根据用户ID进行配置并运行
  • 登录APP进行端口映射配置
  • 使用配置的映射进行访问

有兴趣再细看

查看详细

  • 平台适配,支持linux、windows、macos、android、(tob,小型机:hp-unix、solaris、AIX)
  • cpu架构,支持x86、arm、mips、riscv(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、“代理服务器”配置如下(代理服务器必须允许任意端口“入站”连接):
  <?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通道

    • 使用TCP协议进行p2p穿透,提升安全性
    • 不是所有的网络都支持p2p,取决于两端NAT类型
    • v0.14以上版本,直接支持ipv6,且能提供防火墙穿透
    • P2P测试结论:一端是NAT4,另一端是NAT3或NAT4时无法打通
      注:NAT1-〉Full Cone , NAT2-〉Restricted Cone , NAT3-〉Port Restricted Cone , NAT4-〉Symmetric
    服务端 NAT客户端 NATP2P成功
    NAT1-3NAT1-3YES
    NAT1-2NAT4YES
    NAT4NAT1-2YES
    NAT4NAT3-4NO
    NAT3-4NAT4NO
  • 支持外网发布(有违安全设计理念,v0.31版本开放)

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

    • 具体配置主要通过 ip@index方式支持
附:主要功能简述
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
。。。待续
	

使用指南:

三方视频教学- 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):
配置样例
  <?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>

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标识为:
    ipv4 p2p
    A:ipv6下P2P标识为:
    ipv6 p2p
    A:自定义路由标识为:
    userdefineproxyer p2p

最佳实践

  • 以下为推荐使用的最佳实践,供参考:
    1、android客户端设置为“自动登录”,免除每次输入用户名/密码的麻烦;
    2、android客户端设置好后让其在后台运行,如果始终保持前台会定时刷新,webview控件空耗电,你懂的;
    3、服务端始终保持后台运行,安全放心,只有你自己才能访问;
    ...使用场景...
    【家用摄像头P2P直连】

免责申明

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

捐助

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

微信捐赠

附录

更新历史

2024-04-18:

1、收藏夹BUG修复
2、新增服务备注功能,便于服务识别及打标

2024-04-10:

1、VIP支持百度地图定位

  • APP服务端支持GPS定位
  • 百度地图开放平台,自行申请“浏览器端”AK,然后将AK配置到SG客户端中,即可正常使用地图定位功能

2、版本更新到v0.40.1

2024-02-02:

1、APP易用性更新,后续版本将采用全新界面
2、修复特定情况无法创建ipv6隧道的BUG
3、APP增加收藏夹功能,常用连接一览无余
4、版本更新到v0.32.3

2023-11-28:

1、老幼安全防护,支持GPS定位,便于掌握关怀对象所在经纬度(自行手动授权)

  • 此功能仅支持Android服务端
  • 坐标获取成功,则经纬度坐标将会自动复制到剪贴板

2、其它优化

2023-11-17更新到v0.32.2:

1、socks协议支持用户名/密码验证
2、支持保存及播放录音(VIP)
3、版本更新到v0.32.2

2023-10-25更新到v0.32.1:

1、修复bug
2、完善支持socks协议(仅支持ipv4 tcp)
3、完善支持HTTP proxy协议
4、APP支持VIP功能许可
5、版本更新到v0.32.1

2023-09-08更新到v0.31.12:

1、修复bug
2、试验性支持socks协议(仅支持ipv4 tcp)
3、新增内置支持HTTP proxy协议
4、内存回收(适用于内存限制设备)
5、全异步方式提升响应速度
6、版本更新到v0.31.12

2023-08-29更新到v0.31.11:

1、文件管理支持默认按时间排序
2、新增macos M1/M2支持
3、版本更新到v0.31.11

2023-06-03更新到v0.31.10:

1、网络可靠性优化
2、优化网络传输效率
3、版本更新到v0.31.10

2023-03-04更新到v0.31.9:

1、APP服务端模式新增“无障碍”服务,用户自行打开,实现自动重启
2、APP端操作优化:新增点击操作自动填充功能,便于新增配置
3、修复mips路由器下安装自定义代理无法提供服务的BUG
4、提供服务端自定义代理域名定时ip刷新功能(动态域名)
5、其它优化

2022-12-14更新到v0.31.8:

1、APP服务端模式支持配置自定义代理及SSL加密
2、自定义代理服务器支持SSL自签名证书下发
3、其它优化

2022-11-04更新到v0.31.7:

1、提供一键版本升级功能,无需手动更新

  • 此功能版本源指向github,如无法更新,请确认github连通性
  • 更新后一般10-20秒左右恢复可用
  • 服务端提供自动更新选项(每天检测一次),默认关闭
<auto-update value="true" />

2022-10-20更新到v0.31.6:

1、文件管理增加删除文件功能
2、文件管理增加断点续传功能
3、文件管理增加文件时间
4、文件管理windows下增加切换磁盘操作

  • 此功能仅在有P2P连接或自定义代理连接时激活
  • 通过拖拽模式进行上传和下载
  • 通过双击弹出文件删除确认框

2022-10-14更新到v0.31.5:

1、修复自定义代理短间隔重连情况下连不上的BUG
2、新增了简易文件上传下载功能,可方便同步异地文档

  • 此功能仅在有P2P连接或自定义代理连接时激活
  • 通过拖拽模式进行上传和下载

3、版本更新到v0.31.5

2022-09-05:

1、解决自定义代理连接异常断开BUG
2、版本保持不变

2022-08-30更新到v0.31.4:

1、降低运行时虚拟内存占用
2、常规性优化
3、版本更新到v0.31.4

2022-08-14更新到v0.31.3:

1、修复mips架构系统无法连接自定义代理的BUG
2、修复HTTP协议加载完成时间长的问题
3、版本更新到v0.31.3

2022-08-06更新到v0.31.2:

1、修复Windows平台偶发闪退BUG,增强稳定性
2、P2P连接及自定义代理进行keep-alive操作,尽可能避免重连时间窗口,提升可用性
3、其它可用性优化,降低app能耗
4、版本更新到v0.31.2

2022-07-28更新到v0.31.1:

1、修复特定情况下,服务端重启,组网配置不生效的BUG
2、修复NAT1服务器P2P协商BUG
3、版本更新到v0.31.1

2022-07-22更新到v0.31:

1、提供服务端之间端口映射,服务端如有公网ip则可直接从公网访问(仅需在app上配置)

  • 配置方式,在原有映射配置“远程ip”配置中支持:ip@idx方式进行配置(idx为不同“访问点”的序号)
  • 此种方式配置的“本地端口”实际是在当前“访问点”所在主机上(注意:不在APP所在手机上)
  • 服务端间如能P2P成功(或自定义代理连接成功)则配置的映射将生效,否则不生效
  • APP上只有在P2P连接时才会定时刷新服务端间代理状态
  • 配置成功后需要等待10秒左右才能在App上看到实际状态

2、版本升级到v0.31

2022-06-30:

1、修复32位大端机器运行服务端,无法正常代理的BUG
2、版本暂保持不变

2022-05-17:

1、服务端支持自动生成自签名证书(默认文件名为server.xxx)
-->a、配置ssl-create-certfile选项

<app-parameter>	
  <ssl-create-certfile value="true" />
...
</app-parameter>

-->b、确保安装openssl
-->c、不要指定证书文件(不配置 ssl-cacert-file 及 ssl-privatekey-file)

2022-05-04:

1、支持riscv32/64架构,编译时同mips架构使用musl库进行链接
2、优化网络传输层
3、版本暂保持不变

2022-02-07更新到v0.30.4:

1、提供mips64el支持
2、增加app端系统图标显示
3、其它优化

2021-11-06更新到v0.30.3:

1、修复app端内存占用只显示jvm不包含native的BUG
2、优化网络引擎,提升高并发下的稳定性及公平性

2021-10-17更新到v0.30.2:

1、自定义代理支持ssl验证
2、网络P2P情况下,支持配置成ssl隧道( 要求服务端必须配置证书

<app-parameter>
  <ssl-tunnel-required value="first" /><!-- 取值有3个:none、first、only -->
  ...
</app-parameter>

3、其他优化

2021-09-24更新到v0.30:

1、提供了Android服务端开机自启动支持(仅服务端模式,且需要自行手动授权)
2、网络P2P情况下,Android服务端支持实时音频(麦克风权限需要自行手动授权,必须打开SG界面才能录音)
3、其他优化

2021-05-03更新到v0.29.2:

1、修复Android高版本无法退出问题
2、优化网络:修复了可能带来网络延迟的BUG,进一步提升网络传输速度
3、提供版本号展示,便于客户端及服务端版本管理
4、优化app cpu占用,降低能耗

2021-03-05更新到v0.29:

1、修复ipv6与ipv4网络切换存在的服务端core-dump问题
2、客户端新增ipv4-only网络模式选项,用于在ipv6网络环境下由于特殊需求需要使用ipv4进行p2p连接的场景(强制使用ipv4进行网络穿透)
3、其它一些bug修复
注意:特定场景下由于存在core-dump的致命问题,0.29版本需要同时更新客户端及服务端

2020-12-13更新到v0.28:

1、自定义代理增加token支持,防止非法访问。同时支持配置访问许可列表(access-token只能输入数字,access-restricting可输入允许的SID,多个SID用“:”分隔,access-restricting可不配)
A、代理服务器配置:

<app-parameter>
 <proxy-service-port value="9001"/>
 <access-token value="nnnnn”"/>
 <access-restricting value="xxxxx"/>
 …
</app-parameter>

B、服务端配置(token必须与代理服务器一致):

<channel address="x.x.x.x:9001" ssl="true" token="nnnnn" />

2、对于隧道超时断开机制做了优化(仅针对P2P隧道及用户代理隧道):只要有连接接入且连接正常情况下客户端会随机时延发送心跳,尽量防止超时断开。
场景:ssh访问时,较长时间不输入会保持心跳,不至于1两分钟空闲就断开了。

2020-05-23更新到v0.27:

1、去掉root权限获取功能,保持最低权限要求。暂不开发支持配置1024以下端口的能力
2、由于自用树莓派被孩子摔坏了,只能压榨淘汰手机剩余价值,Android app端增加“服务端模式”支持,可以放在家中作为服务器

2020-04-30更新到v0.26:

1、修复IP切换时配置的HTTP服务可能不可用的问题
2、对已root手机,尝试获取root权限,支持配置1024以下的保留端口
3、解决绝对路径执行(多为开机启动脚本)且不指定-f参数时无法定位默认配置文件问题
4、服务端增加HTTP基于内容替换选项(影响效率,忽略压缩数据。对于部分js中将ip端口返回到浏览器的不规范内网web应用),默认不过滤内容

	……
	<moudle-parameter>
		<http-content-type-filter value="application/javascript" />
		……
	<moudle-parameter/>
	……

5、服务端增加指定P2P协商端口选项,默认选择随机端口

	……
	<moudle-parameter>
		<negotiation-port value="xxxxx" />
		……
	<moudle-parameter/>
	……

6、增加“官方代理”开关,默认打开。关闭时在任何情况下都不会走官方代理转发数据

2020-03-13:

1、修复tcp-cork特定条件下丢失writable-event造成网络延迟的BUG
2、提升内存池运行性能
3、增加 -f 命令行参数,可指定配置文件全路径
4、其它优化,版本保持不变

2020-01-18更新到v0.25:

1、修复 http代理失效 BUG
2、app端提供ipv6地址显示
3、版本更新到0.25

2019-11-30更新到v0.24:

1、花生壳支持UDP了?好吧,支持一下UDP端口转发,游戏串流的朋友可以试用一下
2、支持 UDP over TCP 模式
3、其它小的优化

2019-11-03:

1、修复 memory leak BUG
2、其它小优化,版本保持不变
3、提升P2P重连可靠性

2019-09-30更新到v0.23:

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

2019-09-20更新到v0.22:

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

2019-09-15:

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

2019-09-10更新到v0.21:

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

2019-09-05:

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

2019-09-01更新到v0.20:

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

2019-08-18更新到v0.19:

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

2019-05-27更新到v0.18:

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

2019-05-21:

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

2019-05-16更新到v0.17:

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

2019-05-04:

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

2019-04-23更新到v0.16:

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

2019-04-16更新到v0.15:

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

2019-04-15更新到v0.14:

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

....初始版本v0.13

smargate's People

Contributors

lazy-luo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smargate's Issues

ios客户端能有吗

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

MIUI11 android8.0下大概率闪退,用户无法升级webview

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

希望增加手机的服务端

我家的电脑由于不会一直开着,所以,如果有Android的服务端,闲置的手机就可以用上了,当然,能增加路由器的服务端就更好了,比如梅林固件就觉得自己很需要。

关于通过代理上网情况下的使用

我遇到这样的情况:服务器所在网络是通过http代理连接外网的,就是需要设置IE全局代理才能上外网,请问smarGate可以增加此种方式的连接功能吗?谢谢

在 OpenWrt 中安装 smarGate 如何解决依赖文件不存在问题?

我根据 #32 中方法,在 OpenWrt(cpu 是x86_64) 中安装 smartGate,在安装过程中遇到了依赖缺失的问题,通过 ldd 查看动态依赖库,结果如下:

root@OpenWrt:/opt/smargate# ldd ./proxy_server
        /lib64/ld-linux-x86-64.so.2 (0x7fc4ed20d000)
        libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fc4ed20d000)
        libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7fc4ed20d000)
        libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fc4ed20d000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by ./proxy_server)

我发现 OpenWrt 根本没有对应的库,于是进入到 lib64 目录查看了下,内容如下:

root@OpenWrt:/lib# ls
config               libatomic.so.1.2.0   libjson_script.so    libustream-ssl.so    preinit
firmware             libblkid-tiny.so     librpc.so            libvalidate.so       upgrade
functions            libblobmsg_json.so   libsetlbf.so         modules              wifi
functions.sh         libc.so              libubox.so           mwan3
ld-musl-x86_64.so.1  libfstools.so        libubus.so           netifd
libatomic.so.1       libgcc_s.so.1        libuci.so            network

不知道要如何解决这个问题呢?
谢谢!

楼主编一个Armbian 的客户端吧

可以考虑用GO+WEBGUI

手机屏幕长亮撑不住

现在各种随身带的电视盒子 矿渣都能刷armbian了,

所以如果有arm版会很方便。

有些地方理解不了

比如readme里写的4g+ipv6,那么手机必须使用移动数据网络才可以吗?

目前我的状况是这样:家中黑群,单位手机可以连宽带的wifi,电脑是使用宽带,和手机是一个局域网,另有一个公网IP的VPS,这种情况如何环境如何搭建?

家里和单位均为NAT,没有公网IP,且运营商不同。

望回复。

Windows or macOS设备的客户端

每次都要带着安卓机 有点奇怪 前提办公室设备都可以分配ipv6 现在使用都是用电脑去访问同一局域网下的安卓设备的ip+端口 可不可以直接适配一套 macOS/Windows的客户端?

客户端可以请求root权限了,作者给解释一下呗。

是不是快能映射smb了?
另外之前的版本映射ftp成功了,使用的被动模式,但有些许问题,filezilla会卡在mlcd时错误,服务端局域网是没有问题的,flashfxp可以登录,但是传文件卡在100%的地方且强制结束后文件错误。
我是被动模式映射了5个数据端口和ftp端口。

另外最近一黑屏客户端就退出了,电池模式什么的设置无效,手机上只有webview最近升级过。

MIUI11 android8.0下大概率闪退,用户无法升级webview日志

Describe the bug
MIUI11 android8.0下大概率闪退,用户无法升级webview

To Reproduce
Steps to reproduce the behavior:

  1. 自动登录后闪退日志如下:
    2019-10-14 21:57:12App Version: 1.01_1OS Version: 8.0.0_26Vendor: XiaomiModel: MI 5s PlusCPU ABI: arm64-v8aarmeabi-v7aarmeabijava.util.IllegalFormatConversionException: f != java.lang.Integerat java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4402)at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2897)at java.util.Formatter$FormatSpecifier.print(Formatter.java:2844)at java.util.Formatter.format(Formatter.java:2523)at java.util.Formatter.format(Formatter.java:2458)at java.lang.String.format(String.java:2770)at com.smarGate.MainActivity.setStatus(MainActivity.java:774)at com.smarGate.MyTimeTask.run(MainActivity.java:59)at java.util.TimerThread.mainLoop(Timer.java:555)at java.util.TimerThread.run(Timer.java:505)

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

能开发支持openwrt吗?

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

可以考虑windows10开机无需登陆自启吗

目前尝试在windows10下开机未登录自启动程序,尽管程序可以启动,但是在手机上面并不能搜索到这台机器,开机之后手动执行bat脚本程序可以正常启动使用。

目前windows10开机自启动是这样,其他系统没有测试过

启动命令里必须加-u才可以启动

如这样:

/root/smargate/proxy_server -i1000 -o1000 -w8 -u xxxxxxxxxxxxx:y

另外代理服务端也必须这样启动,但代理服务器带上-u参数后会被识别成服务端。

直接运行不带参数比如/root/smargate/proxy_server会报错:

root@fqdn:~# /root/smargate/proxy_server
no environment-variable "SMS_HOME" define.
Server config file is: /root/conf-proxy.xml
[INFO]  plugin path is:/root/plugin/
[WARNING]       NOT-FOUND library in :/root/plugin/
[ERROR] load plugin module error.

*****************************NO PLUGIN INFORMATION*****************************
[ERROR] you must assign user-name whith command option -u xxx:yyy


The module[MAINCONTROLER] has been exited!

[INFO]  Application has been exited!

the server stop.

附我的代理服务器配置:

<?xml version="1.0" encoding="GBK"?>
<app-config code="PROXY" name="proxy-server">
	<app-parameter>
		<proxy-service-port value="xxxxx"/>
		<!--
		<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>

服务端配置:

<?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="DiskStation" />
		<app-description value="DiskStation smarGate" />
		<user-audit value="xxxxxxxxxxxxx:y"/>
	</moudle-parameter>
	<channel address="服务器IP:端口" ssl="false" />
</app-config>

PS: 代理服务器从我一开始用的时候是可以的,大概3月份的时候的版本,最近跟进更新,才发现不能启动了。

另外手机上的访问点和描述都不正常,只显示
访问点:network entry.
描述:common entry of intern net.

开机启动需要设置延时,否则无法使用

树莓派设置开机运行smarGate,需要设置延时启动,否则会失败。
尝试了rc.local脚本和systemd,不设置延时的话,显示已经运行,但实际上无法使用。猜测可能跟默认服务器的通信有关。

可以在 OpenWRT 上安装吗?

家里是一个软路由,安装了 OpenWRT 系统,系统里面安装了一个网盘,想实现内网穿透,这样在任何地方都可以访问网盘了。
不知道要怎么在 OpenWRT 中安装使用呢?
谢谢!

怎么将日志输出到文件?

我在 OpenWrt 中配置 proxy_server,手机上有时可以看到访问点,有时又不行。
当可以看到访问点的时候,没有 v4 或者 v6 的图标,什么图标也没有。
所以,我想打印下日志找一下原因。
请问:

<log-level value="LOG_ERROR"/>
<log-write-mode value="FILE_ONLY"/>

上面这两个设置项目有哪些可选值呢?我要怎么才能实现将日志输出到文件呀?谢谢。

配置的私有代理服务器无法生效

请问大佬为啥我的私有代理服务器无法生效,网络端口都没问题,是配置文件的问题吗
代理服务器配置:

<?xml version="1.0" encoding="GBK"?>
<app-config code="PROXY" name="proxy-server">
	<app-parameter>
		<proxy-service-port value="9001"/>
		<!-- -->
		<ssl-cacert-file value="server.crt"/>
		<ssl-privatekey-file value="server.key"/>
	</app-parameter>
	<moudle-parameter>
		<log-level value="LOG_ERROR"/>
		<log-write-mode value="CONSOLE_ONLY"/>
	</moudle-parameter>
</app-config>

windows服务器配置

<?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="company" /><!-- need replace -->
		<app-description value="try it" /><!-- need replace -->
		<user-audit value="#########:3"/><!-- need replace and must is numeric-->
	</moudle-parameter>
	<channel address="公网ip:9001" ssl="true" />
</app-config>

手机上把官方代理关掉就连不上了

不太清楚我理解的对不对,请教使用方法。

我现在在云服务器上开启了服务端模式,手机上也成功连接了。看到了云服务器上线了。目前的想法是把手机的adb调试功能映射到服务器上去。路由指向写的127.0.0.1:5555 本地端口写了1234
然后通过手机的adb查看手机确实打开了1234和5555端口。但是云服务器上这两个端口都没有上线。我应该怎样通过云服务器来连接安卓机器的5555端口呢?readme的说明对这一块没有看太懂,还烦请指教一下。谢谢。

手机ipv6支持

服务端有ipv6,但是只出不进,ipv4 nat对称型,手机端ipv6全开放,ipv6不能直连走中转,作者似乎没有考虑到这种情况,所以提功能吧!

最近版本ipv6优先的问题

假设我的服务器是群晖,客户端为win10,打开wifi和手机在同一局域网

群晖是有ipv6的,且为fullcone
win10没有ipv6,但也是fullcone

此时,手机打开客户端后,不能使用p2p连接,只能中转。

但是如果把群晖的ipv6关掉后,就可以p2p连接了,问题就出在这里

手机关掉wifi,然后4g,是可以ipv6直通的。

正常来说两边fullcone的话,是完全可以p2p打通的,是不是有点过于依赖ipv6了。

正常情况下,不应该是如果检测不到ipv6,就利用服务器打洞吗?

另外测试过frp,xtcp是可以通p2p的,但是因为udp qos的关系,长时间传输会断掉。

远程投屏支持

下个版本计划支持原创投屏,如有类似需求的童鞋讨论一下各自需求。敬请期待。。。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.