快速概覽【快速上手手冊】 【三方視頻教學- B站】
平臺適配,支持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的數據轉發
安全性
手機客戶端作為主要的訪問入口,按需開放,及時關閉。
支持服務端間端口映射組網(v0.31及以后版本)。
電腦可以接入手機熱點或wifi環境下通過訪問手機開放的端口穿透到內網進行訪問(客戶端會顯示手機ip)。
手機網絡一般為私有網段別人無法訪問。
用戶間隔離。
擴展性
基于內網網段代理,可以配合眾多工具實現各種網絡服務能力(telnet、ssh、http服務、內網攝像頭、遠程桌面等)
面向極客,可訪問自定義的內網服務(rpc)
便利性
手機客戶端一點配置
服務能力動態增減
高性能
跨平臺實現 socket 多路復用,支持:poll、epoll、kqueue、port、select、IOCP 等模型
采用 lock-free 算法
線程池設計
socket 連接池
多級任務隊列
...
0.1.1版本開始采用自主網絡引擎,性能高,千元手機客戶端能支持1千以上的并發共享訪問
高性能設計:
附:交互示意圖
支持代理穿透
官方提供免費的代理服務器(共享帶寬,多人共用時比較慢,最佳實踐為啟用自有代理服務器)
如果自己有云服務器(具備公網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通道
服務端 NAT 客戶端 NAT P2P成功 NAT1-3 NAT1-3 YES NAT1-2 NAT4 YES NAT4 NAT1-2 YES NAT4 NAT3-4 NO NAT3-4 NAT4 NO 使用TCP協議進行p2p穿透,提升安全性
不是所有的網絡都支持p2p,取決于兩端NAT類型
v0.14以上版本,直接支持ipv6,且能提供防火墻穿透
P2P測試結論:一端是NAT4,另一端是NAT3或NAT4時無法打通
注:NAT1-〉Full Cone , NAT2-〉Restricted Cone , NAT3-〉Port Restricted Cone , NAT4-〉Symmetric支持外網發布(有違安全設計理念,v0.31版本開放)
其它內網穿透工具的主推模式,將內網服務直接映射到外網端口
支持服務端之間的P2P端口映射(v0.31及以后版本)
具體配置主要通過 ip@index方式支持
附:主要功能簡述
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):
配置樣例
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 && 配置端口映射 在客戶端中可以看到上線的服務端(“訪問點”),可以在客戶端上定義端口映射規則
展開圖示
所有版本已經打包了依賴,開箱即用.
系統將自動清除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: 客戶端不同顏色表示啥意思?
以下為推薦使用的最佳實踐,供參考:
1、android客戶端設置為“自動登錄”,免除每次輸入用戶名/密碼的麻煩;
2、android客戶端設置好后讓其在后臺運行,如果始終保持前臺會定時刷新,webview控件空耗電,你懂的;
3、服務端始終保持后臺運行,安全放心,只有你自己才能訪問;
...使用場景...
【家用攝像頭P2P直連】
請您仔細閱讀以下申明,您在使用smarGate工具軟件,表明您對以下內容的接受:
1、嚴禁使用本軟件從事計算機黑客以及其他任何危害計算機信息網絡安全的行為;
2、本軟件屬于正規網絡接入軟件,請合理,合法的使用;勿用于違反法律,道德及影響他人利益的活動;如果因用于非法用途,由此造成的不良后果,由用戶自行負責,本軟件開發者不承擔任何責任及損失。
捐助
如果您覺得 smarGate 對你有幫助,歡迎給予一定的捐助來維持項目的長期發展!
ps:捐贈建議附上注冊用戶名
微信捐贈
更新歷史
1、APP服務端模式新增“無障礙”服務,用戶自行打開,實現自動重啟
2、APP端操作優化:新增點擊操作自動填充功能,便于新增配置
3、修復mips路由器下安裝自定義代理無法提供服務的BUG
4、提供服務端自定義代理域名定時ip刷新功能(動態域名)
5、其它優化
1、APP服務端模式支持配置自定義代理及SSL加密
2、自定義代理服務器支持SSL自簽名證書下發
3、其它優化
1、提供一鍵版本升級功能,無需手動更新
此功能版本源指向github,如無法更新,請確認github連通性
更新后一般10-20秒左右恢復可用
服務端提供自動更新選項(每天檢測一次),默認關閉
<auto-update value="true" />
1、文件管理增加刪除文件功能
2、文件管理增加斷點續傳功能
3、文件管理增加文件時間
4、文件管理windows下增加切換磁盤操作
此功能僅在有P2P連接或自定義代理連接時激活
通過拖拽模式進行上傳和下載
通過雙擊彈出文件刪除確認框
1、修復自定義代理短間隔重連情況下連不上的BUG
2、新增了簡易文件上傳下載功能,可方便同步異地文檔
此功能僅在有P2P連接或自定義代理連接時激活
通過拖拽模式進行上傳和下載
3、版本更新到v0.31.5
1、解決自定義代理連接異常斷開BUG
2、版本保持不變
1、降低運行時虛擬內存占用
2、常規性優化
3、版本更新到v0.31.4
1、修復mips架構系統無法連接自定義代理的BUG
2、修復HTTP協議加載完成時間長的問題
3、版本更新到v0.31.3
1、修復Windows平臺偶發閃退BUG,增強穩定性
2、P2P連接及自定義代理進行keep-alive操作,盡可能避免重連時間窗口,提升可用性
3、其它可用性優化,降低app能耗
4、版本更新到v0.31.2
1、修復特定情況下,服務端重啟,組網配置不生效的BUG
2、修復NAT1服務器P2P協商BUG
3、版本更新到v0.31.1
1、提供服務端之間端口映射,服務端如有公網ip則可直接從公網訪問(僅需在app上配置)
配置方式,在原有映射配置“遠程ip”配置中支持:ip@idx方式進行配置(idx為不同“訪問點”的序號)
此種方式配置的“本地端口”實際是在當前“訪問點”所在主機上(注意:不在APP所在手機上)
服務端間如能P2P成功(或自定義代理連接成功)則配置的映射將生效,否則不生效
APP上只有在P2P連接時才會定時刷新服務端間代理狀態
配置成功后需要等待10秒左右才能在App上看到實際狀態
2、版本升級到v0.31
1、修復32位大端機器運行服務端,無法正常代理的BUG
2、版本暫保持不變
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)
1、支持riscv32/64架構,編譯時同mips架構使用musl庫進行鏈接
2、優化網絡傳輸層
3、版本暫保持不變
1、提供mips64el支持
2、增加app端系統圖標顯示
3、其它優化
1、修復app端內存占用只顯示jvm不包含native的BUG
2、優化網絡引擎,提升高并發下的穩定性及公平性
1、自定義代理支持ssl驗證
2、網絡P2P情況下,支持配置成ssl隧道( 要求服務端必須配置證書 )
<app-parameter> <ssl-tunnel-required value="first" /><!-- 取值有3個:none、first、only --> ... </app-parameter>
3、其他優化
1、提供了Android服務端開機自啟動支持(僅服務端模式,且需要自行手動授權)
2、網絡P2P情況下,Android服務端支持實時音頻(麥克風權限需要自行手動授權,必須打開SG界面才能錄音)
3、其他優化
1、修復Android高版本無法退出問題
2、優化網絡:修復了可能帶來網絡延遲的BUG,進一步提升網絡傳輸速度
3、提供版本號展示,便于客戶端及服務端版本管理
4、優化app cpu占用,降低能耗
1、修復ipv6與ipv4網絡切換存在的服務端core-dump問題
2、客戶端新增ipv4-only網絡模式選項,用于在ipv6網絡環境下由于特殊需求需要使用ipv4進行p2p連接的場景(強制使用ipv4進行網絡穿透)
3、其它一些bug修復
注意:特定場景下由于存在core-dump的致命問題,0.29版本需要同時更新客戶端及服務端
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兩分鐘空閑就斷開了。
1、去掉root權限獲取功能,保持最低權限要求。暫不開發支持配置1024以下端口的能力
2、由于自用樹莓派被孩子摔壞了,只能壓榨淘汰手機剩余價值,Android app端增加“服務端模式”支持,可以放在家中作為服務器
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、增加“官方代理”開關,默認打開。關閉時在任何情況下都不會走官方代理轉發數據
1、修復tcp-cork特定條件下丟失writable-event造成網絡延遲的BUG
2、提升內存池運行性能
3、增加 -f 命令行參數,可指定配置文件全路徑
4、其它優化,版本保持不變
1、修復 http代理失效 BUG
2、app端提供ipv6地址顯示
3、版本更新到0.25
1、花生殼支持UDP了?好吧,支持一下UDP端口轉發,游戲串流的朋友可以試用一下
2、支持 UDP over TCP 模式
3、其它小的優化
1、修復 memory leak BUG
2、其它小優化,版本保持不變
3、提升P2P重連可靠性
1、修復弱網絡環境下windows服務端高CPU占用BUG
2、整體提升網絡傳輸速度
1、提升P2P檢測可靠性
2、修復windows下特定情況無法進行P2P連接的BUG
3、客戶端提供了手動p2p重連功能(弱網絡環境下自動重連可能失敗,此時可以手動重連)
1、進一步降低在低速率下服務端cpu占用率
2、常規優化,版本保持不變
1、優化網絡性能
2、客戶端支持顯示實時網速
1、解決客戶端修改密碼后自動登錄失敗的BUG
2、提供自動登錄超時控制
1、優化連接檢查性能(提供并行異步檢測)
2、支持將HTTPS代理到HTTP(客戶端http訪問,服務端為https)
1、性能優化
2、解決特定條件下(自定義路由)無法可靠斷開服務端連接的BUG
3、進行靜態編譯,不再依賴inux系統gcc動態庫,可直接在alpine中運行(需要創建軟連接)
4、支持編譯為mini版本,不再靜態編譯openssl;對openssl庫從0.9.8~1.1.1的全系動態兼容,二進制包縮小為1M左右(已放入dynamic目錄,需配置ssl庫)
1、性能優化
2、提供ipv6 P2P開關機制:<ipv4-tunnel-first value="false"/> 如需關閉ipv6點對點則設置為“true”,默認值為“false”
3、增加客戶端ipv6標志及連接狀態提示
1、修復Raspbian jessie下無法檢測IPv6的BUG
1、性能優化
2、提供P2P斷開重連機制
1、修復服務端在掛載私有路由時當線程數量<4時偶發CPU高占用的BUG,版本保持不變
1、修復服務端在掛載私有路由時偶發core dump的BUG
1、修復IPV4/IPV6網絡切換,無法P2P的BUG
1、解決網絡切換重連失敗問題
2、引擎性能優化
3、新增對IPv6防火墻穿透支持(移動端支持ipv6,且內網服務端支持ipv6)
【重要提示】v0.14版本將于之前版本不兼容,請務必更新版本!!!