者:codercao
轉發鏈接:https://segmentfault.com/a/1190000023306810
我是艾西,今天給大家分享一份詳細的原神服務端結構資料教程,從服務端的獲取到端口的使用以及安卓和ios的DAIL簽名等一文讓你明白怎么架設原神服務端,哪些工具資料又代表著什么意思(保姆級教學)
Grasscutter
項目: xxxxx://github.XXX/Grasscutters/Grasscutter
GuanFWiki文檔: xxxxx://github.XXX/Grasscutters/Grasscutter/wiki
基本原理:就是抓包攔截了GuanF游戲的網絡請求,然后分析請求和返回值,然后模擬這些請求返回寫了一個服務端。類似的東西還有很多, Grasscutter只是其中的一個。
MITM即中間人GJ(Man-in-the-middle attack)。用于中間人GJ的DAIL首先會向正常的DAIL一樣轉發請求,保障服務端與客戶端的通信,其次會適時的查看、記錄其截獲的數據,或篡改數據,引發服務端或客戶端特定的行為。
Fiddler是位于客戶端和服務器端的xxxxDAIL,也是目前最常用的xxxx抓包工具之一。它能夠記錄客戶端和服務器之間的所有xxxx請求,可以針對特定的xxxx請求,分析請求數據、設置斷點、調試web應用、修改請求的數據,甚至可以修改服務器返回的數據,功能非常強大,是web調試的利器。
小火箭是iOS/iPadOS平臺上較早出現的支持SSR協議的客戶端,坊間稱作"小火箭”。在大陸區已被下架,請使用M區賬號在AppStore下載
Docker是一個用于開發, 交付和運行應用程序的開放平臺??梢詫贸绦蚺c基礎架構分開,從而可以快速交付軟件。作用:將-整套環境打包封裝成鏡像,無需重復配置環境,解決環境帶來的種種問題。Docker容器間是進程隔離的,誰也不會影響誰。
方文檔: xxxxx://docs.docker.XXX/get-started/
Shadowrochket
注冊M區Apple ID并將其激活
使用DAIL:打開SSR軟件,選擇一個USA節點, 將DAIL規則更改為”全局DAIL”
(注冊和激活全程要使用DAIL)
注冊M區Apple ID:開appleid.apple.XXX一創建 您的Apple ID一填寫GR信息(注意“GJ和地區”選擇USA,”DHHM” 使用Temporary SMS and Disposable Numbers獲取一個虛擬的USADHHM)一郵箱驗證和DIANHUA號 碼驗證(DHHM的驗證碼由上述的那個網站獲得)一注冊成功后再登錄M區Apple ID把“受信任的DHHM”換成自己的國內SHOUJ號
激活M區Apple ID:打開手機的App Store,輸入剛剛注冊好的M區Apple ID,會提示this apple id has not yet been used in the itunes store (此Apple ID尚未在iTunes商店中使用),點擊Review--借助USA虛擬GR信息生成填寫信息(Street是街道的意思,Zip是郵編的意思, 尤其注意要選擇一個免SUI區的州: Alaska、 Delaware、 Montana、 New Hampshire、Oregon否則GOUMApp時會收SUI)
使用M區禮品卡CQGOUM
如果你有PayPal,那么將其綁定上去即可。沒有它的話GOUMM區App Store的收費軟件就需要去淘寶GOUMM區gift cardCQ。
去淘寶GOUMM區gift card (可疊加使用)一打開M區App Store點擊Redeem Gift Card or Code將買到的卡密信息輸入進去即可CQ成功
在M區App Store搜索小火箭軟件,它的基本使用方式不再贅述。
申請泛域名SSLzhengs
下面將使用acme.sh開源項目申請免費的Let' S Encrypt泛域名SSLzhengs。
安裝acme.sh .
普通用戶和root用戶都可以安裝使用,安裝過程進行了以幾步:
把acme.sh安裝到你的root目錄下,并創建一個bash的alias, 方便你的使用。
自動為你創建cronjob,飫0:00點自動檢測所有的zhengs,如果快過期了,需要更新,則會自動更新zhengs。
注:安裝過程不會污染已有的系統任何功能和文件,所有的修改都限制在安裝目錄中。那個socat未安裝的問題不用管,那是xxxx驗證無Web Server時才需要的。
生成SSL泛域名zhengs
acme.sh實現了acme協議支持的所有驗證協議,-般有兩種方式驗證: xxxx 和dns驗證。
xxxx驗證: xxxx 方式需要在你的網站根目錄下放置一個文件, 來驗證你的域名所有權。
dns驗證: dns 式,在域名上添加一條txt解析記錄,驗證域名所有權。
dns方式的可以使用域名解析商提供的API自動添加txt記錄完成驗證,下面我們將采用這種方法申請Namesilo的泛域名zhengs。
Step1:打開xxxxx://www.namesilo.XXX/account/api-manager申請NameSilo API,勾選第2個復選框,點擊Generate, 即可生成。
注:務必不要勾選上Generate key for read-only access的哪個復選框,否則會導致Unable to add the DNS record. Error add txt for domain的問題。另外,生成的API只出現一次,如果沒記下來只能重置。
Step2:在服務器輸入以下命令,實現自動dns驗證生成泛域名zhengs。
等待1 800s即可看到申請下來的SSLzhengs(NameSilo的驗證比較慢, GuanF文檔上寫的900s有時不足以驗證完)
生成文件都放在root/.acme.sh/example.XXX/目錄下,其中 example.XXX.key 是密鑰文件,Fulichain.cer是zhengs文件。
注:如果你的域名不是NameSilo的,上述操作有所不同, 具體請參考: xxxxx://github.XXX/acmesh-official/acme.sh/wiki/dnsapi
項目依賴環境搭建
搭建Docker環境
創建Docker network
正式環境使用docker network對Docker容器進行統-管理,像MongoDB數據庫這種提供服務的,就不對外提供端口了,各容器之間通過hostname進行內部通信,保護系統安全。
Docker-MongoDB環境搭建
不需要設置密碼驗證,也不需要暴露端口,與Grasscutter的容器加到同一個docker network里,在內部通過hostname進行通信。
注:由于沒有對外暴露,要想訪問MongoDB數據庫只能進入容器通過命令查看,可視化管理工具在外面連不上。
Docker JDK環境搭建
搭建Docker-JDK17環境(不可使用其他版本),下面Grasscutter使用的是漢化版本。
注:創建容器時需要映射22102、443端口, 這是為了后續搭建GrasscutterSIF用的。22102是游戲服務器(GameServer)的端口,用來處理一些傳送、 傷害數值計算等信息,如果是在服務器部署的話記得在安全組放開這個端口的UDP協議,防止出現4206錯誤無法進入游戲。443是用來處理登錄、 游戲更新的端口(DispatchServer,默認的443大概率被占用,可以更換成別的。
使用Grasscutter措建SIF
準備Grasscutter服務端及資源
服務端配置文件使用的是: xxxxx://github.XXX/Grasscutters/Grasscutter.
xxxxx://github.XXX/Grasscutters/Grasscutter-Protos
服務端jar包使用的是: xxxxx://t.me/genkitCN/37
資源包使用的是: xxxxx://github.XXX/Dimbreath/GenshinData.
xxxxx://github.XXX/radioegor146/gi-bin-output
搭建Grasscutter服務端
第一次啟動肯定是會失敗的,為的是讓jar包執行時自動生成一個configjson (如果有就不會重新生成),下面我們需要修改里面的配置:
配置含義說明:
如果是本地運行的話里面的兩個Publiclp不用動,如果是放在服務器上的話需要把兩個Publiclp改為服務器的公網IP。
上面的”Port" :22102是游戲服務器(GameServer) 的端口,用來處理一些傳送、 傷害數值計算等信息,如果是在服務器部署的話記得在安全組放開這個端口的UDP協議。防止出現4206錯誤無法進入游戲。除了安全組外,還要檢查一下防火墻有沒有開放。
下面的" Port" :443是用來處理登錄、游戲更新的端口(DispatchServer), 默認的443端口服務器可能不太好搞,國內可能需要備案才能使用,或者被nginx等服務占用了。而windows也可能會被VMWare的Share共享服務或者Steam占用,所以可以改為別的端口。改好之后如果是服務器的話記得在安全組放行該端口的TCP協議。除了安全組外,還要檢查一下防火墻有沒有開放。
"WelcomeMotd" : "Welcome to Grasscutter emu" ,這個是進服務器之后Server發給你的歡迎語句,可以改成好玩的,"歡迎來到XXXSIF”之類的。
"KeystorePassword" : "123456" ,這個是那個zhengs文件的密碼(不需要修改),最新版的zhengs是有密碼的,記得填上。
"AutomaticallyCreateAccounts" : false,這個是控制自動創建賬號的,改為true之后,如果登錄SIF的時候 沒有那個賬號的話會自動創建一個并登 錄進去,然后分配默認的uid,從10001開始往后順延。
"MaxAvatarsInTeam" :4 "MaxAvatarsInTeamMultiplayer" :4,聯機隊伍中最多角色數,更改之后可以切換聯機數量。
修改后的配置示例
(如果是按照我上面的操作,這里只需要把如下配置修改一下IP和域名即可) :
注:即便你的443端口被占用,而像我一樣把它給改成了444, DispatchServer里的PublicPort也要填443,否則會出現4206錯誤。
以后更新的時候只用替換掉grasscutterjar就行,config.json也要重新生成并進行修改。
先不帶nohup進行啟動,全程不報錯并出現類似下圖的日志,即為啟動成功。
4.3添加反向DAIL并開啟xxxxx
添加反向DAIL:寶塔面板一網站一 設置一 反向DAIL一 添加反向DAIL一 填寫DAIL名稱和目 標URL ( xxxxx://127.0.0.1.444 )
開啟xxxxx:寶塔面板一網站---設置----SSL---- 其他zhengs,把example.com.key密鑰文件、
fullchain.cerzhengs文件復制上去,強制xxxxx.
注意事項:添加反向DAIL時的目標URL必須是xxxxx://.而不能是xxxx://.否則不能正確反向DAIL,配置成功后瀏覽器訪問xxxxx://域名可以看到”hello" 字樣。
5.客戶端的基本配置
5.1 Win10客戶端的基本配置
Win1 0端建議使用Fiddler 作為流量劫持工具,打開Fiddler是SIF,關掉Fiddler就是官服。
Fiddler下載: xxxxx://www.telerik.XXX/fiddler/filddler-classic
配置說明:
Step1:選擇左上角Tools-Options,在xxxxx里面選擇Decrypt xxxxx trafic.
Step2:選擇Connections, 然后選擇一個端口, 要避開8888端口,我這里用的是8181端口,點擊OK。
Step3:在Fiddler右側找到FiddlerScript, 把原來的代碼全部刪掉,然后把下面的這一段代碼放進去(把host改- -下即可),然后點擊左上角的Save Script保存腳本使其生效。
注:之后就可以打開Genshin Impact Game里面的YuanShen.exe啟動游戲了。期間會彈出一個信任zhengs的選項,選擇Yes即可。
iOS客戶端的基本配置
iOS端建議使用小火箭作為流量劫持工具,開啟DAIL再運行游戲便進入SIF,不開啟DAIL運行游戲就是官服。
Step1: 小火箭 >配置>模塊>新建模塊,寫入以下內容(把域名換成實際值)
Step2:開啟并配置MitM
小火箭 >配置>本地文件>選中活躍配置右側的i圖標> xxxxx解密,啟用、生成并信任zhengs。別忘了到設置>通用>關于最下方信任根zhengs>啟動小火箭
原神SIF的基本使用
原神SIF通過向管理員發送命令來獲得資源,具體指令詳見: Dev分支中文指令列表
由于敲指令不夠方便,群友們制作的各類小工具,如下就是一個命令生成器。
項目地址: xxxxx://github.XXX/jie65535/GrasscutterXXXmandGenerator
我是艾西,今天的分享就到這里啦我們下期見