具體效果類似
具體原理如下,當你第一次抓某個遊戲時,因為cache server沒有此檔案,所以當你下載遊戲時,cache server也會複製一份出來
(我自己用起來的感覺比較像是,cache server抓資料,然後上傳給pc)

當你如果空間不足,移除遊戲,但哪天想把它裝回來,由於cache server有此遊戲,所以直接從cache server抓,此時就是透過區域網路直接抓資料

ref: https://arstechnica.com/gaming/2017/01/building-a-local-steam-caching-server-to-ease-the-bandwidth-blues/
網路上的教學通常是以linux電腦來實作,但透過NAS時會發現有許多奇奇怪怪的問題,故寫下此教學文,供大家參考外,也是給我自己一個備份
以下以synology NAS為例,注意需要一定的linux基礎
開始之前,要先去控制台設定好NAS的區域網路IP

==============================================
go
==============================================
1. 在套裝軟體安裝docker
沒用過docker的可以參考下面教學文
https://www.ithome.com.tw/tech/96500
2. 在倉庫伺服器搜尋lancachenet

3. 下載lancachenet/monolithic (這邊和網路上教學文不同,此為最新all in one版本,可以支援steam/origin等等)
注1: 這邊可以根據其他教學文,一起下載lancache-dns與sniproxy
lancache-dns的目的是當steam或origin之類的發起需求時,直接將下載目標導向至cache server,此部分我自己是改用synology DNS server代替,使用lancache-dns的優點是都幫你弄到好,使用synology DNS server優點是可以自己決定哪些要透過cache server,那些不要,不過要自己設定
注2: sniproxy目的是要將https的目的地替換掉(比如說origin)
注3:如果只是要給steam用,則只需安裝monolithic
4. 容器 (圖可能會不一樣,因為我直接截圖我目前的設定)
(1) 新增資料夾,我自己是在docker下面新增cache_server,裡面有logs和data
(2) 新增容器

(3) 進階設定
設定儲存空間,左邊設你新增的資料夾,右邊要照著寫

設定port,本機 自動設定-->443,2280-->80
2280可以自己改其他沒有被synology預留port的,不懂的話照著做
443用不到,就不管他 (如果是origin,會使用sniproxy來取代)
其他不用動,直接套用後新增

5. DNS設定
以下case1 或 case2選一個做,只給steam用就做case1,反之case2 (不可以同時做)
case1. (只給steam用)
在套件中心搜尋DNS server並安裝
操作方式類似https://blhttps://blog.tomy168.com/2019/08/synology-nas-dns-server.htmlog.tomy168.com/2019/08/synology-nas-dns-server.html
新增master-->steamcontent.com->DNS寫上NAS自己的虛擬IP,我是寫192.168.2.10
注意,192.168.2.10要改成NAS自己的虛擬IP,不可以照抄
新增完成後,右鍵資源紀錄resource record-->新增A type

再來要將除了被設定以外網址,要轉給外面的dns server
我自己是用google的dns server,可以依照自己喜歡自己改,不懂的人照抄

case2. (以下如果不只給steam用,才需要執行) ------
如果你想使用lancache-dns,而不是synology DNS server
需要再port那邊,設定53-->53 (53是dns再用的port)
在環境變數environment Variable修改(沒有的話自己新增)
注意,192.168.2.10要改成NAS自己的虛擬IP,不可以照抄
除此之外都不用改,直接新增

如果你裝了lancache-dns,那sniproxy也順手裝一下吧
只需要修改port,20443-->443
20443可以改成自己喜歡的port,只要不要跟synology預留port衝突就好

------
6. 啟動容器container
如果走case2的,記得lancache-dns和sniproxy也要開

7. 設定NAS port轉給docker port
還記得剛剛有設兩個神祕數字
NAS的port 2280轉給monolithic的port 80
NAS的port 20443轉給sniproxy的port 443 (case 2的人)
現在要想辦法將PC的port 80丟給NAS時,要能轉到monolithic
然而synology雖然沒再用port 80/443,但是會持續竊聽,導致被占用
參考
http://tonylawrence.com/posts/unix/synology/freeing-port-80/
注意此方法會使synology photo失效,如果需要photo的人請放棄
所以我們需要把port 80與443釋放,先去下面網址抓free_ports.sh
直接右上角,download zip後解壓縮,注意不要用複製貼上的方式,linux與windows再換行上處理方式有差
https://gist.github.com/hjbotha/f64ef2e0cd1e8ba5ec526dcd6e937dd7
將解壓縮後的直接丟到NAS,我自己是丟到我自己創的documents下,位置自己喜歡放那就放哪
使用putty透過ssh連到NAS
參考教學文
https://www.synology.com/zh-tw/knowledgebase/DSM/tutorial/General_Setup/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet
首先,根據free_ports.sh前面的提示步驟,我們需要先備份/usr/syno/re/nginx/,避免如果出問題還可以還原
透過putty連線與登入後,直接輸入
cd /usr/syno/share/
tar cvf ~/nginx.tar nginx
-----
如果出問題要還原,則一樣透過putty連線登入後,直接輸入
cd ~/
tar xvf nginx.tar
sudo rsync -avP ~/nginx/ /usr/syno/share/nginx/
輸入密碼
----
備份完成後,我們需要到synology DSM下
打開控制台-->工作排程->新增觸發任務-->使用者自訂

我自己是放在我自己新增的共享資料夾Documents下,寫自己的位置
如果是共享資料夾,記得前面要加/volume1

用完之後,直接按上面的執行,記得要把打勾取消

執行完重開機確認是否有問題,有問題跑上面的還原,沒問題把打勾打開
--- 進階確認方法 (執行完+NAS重開機前)
利用putty連到NAS登入後
vim /usr/syno/share/nginx/server.mustache
利用方向鍵往下移動到約47%位置,看是否有看到81這個數字,如果看到80代表沒成功

再按 :q!
Note : 分號q! 代表不存檔離開
----
重開機沒問題之後,我們已經將port 80與port443釋放了
再來要將steam打過來的信號,通過我們的DNS server解出來的位置,指向monolithic
先從控制台-->應用程式-->反向代理新增
port 80雖然我們釋放掉的,但是這邊預設不允許讓所有port80轉走,我們先寫12345,之後改

同樣case2的人,https設定,先寫12346

注意,這邊的2280與20443就是剛剛設的,如果你有換掉,這邊要記得改
再利用putty連到NAS登入後,輸入
sudo vim /usr/syno/etc/www/ReverseProxy.json
會看到很亂的東西
參考http://tonylawrence.com/posts/unix/synology/freeing-port-80/
雖然很亂,但如果被整理之後是看得懂的
類似

我們先輸入i,切換到修改模式,再利用左右鍵移動浮標,移動到12345的地方,改成80,移動到12346的地方,改成443
按esc離開修改模式
在按
:wq
(分號wq代表存檔,如果改錯了,記得輸入:q!取消,再重新修改一次)
再來回到synology DSM,我們點其他的控制台,再切回反向代理,應該會看到原本寫12345改成80了

8. 我們NAS部分設定差不多了,我們切回PC的部分,我們要將網卡的DNS server指向我們NAS
參考https://www.cool3c.com/article/9232
不過我們要改的是下面的慣用DNS伺服器,改成NAS的IP,比如我的話是192.168.2.10
備用DNS伺服器先不要改,等之後都沒問題了在寫上8.8.8.8
改完後,我們要將電腦上DNS cache先清掉
win+R,輸入cmd,輸入ipconfig /flushdns

我們先上網,點點網頁確認還可以上網,代表都沒問題了
9. 確認cache server是否正常連上
打開google chrome的無痕模式,到下面網址
http://diagnostics.lancache.net/
如果是case1的人,會看到

case2的人會看到一堆綠色的,到此就完成了
只要重新開啟steam,就可以開始抓了
第一次下載的時候,速度一樣不會變快,移除掉重裝會看到神速
其中,第一次下載時,可以看看NAS的下載與上傳,會發現速度跟電腦下載遊戲速度一樣
記得把NAS的ssh功能關閉,沒事不需要打開
另外是電腦的備用DNS server也可以寫上去,比如8.8.8.8
這是我遊戲抓好,移除重抓,嘗試看看結果如何

===========================================================
附錄
1. 一些我自己debug的經驗
如果第8步不能上網,代表DNS server相關設定錯誤
如果case2的人覺得網路讀取太久,可以把lancache-dns與sniproxy關閉,改走case1
如果第9步全部都是紅色的,要檢查看看DNS server是否有正確導向monolithic
可以利用win+R -> 輸入CMD,打開後輸入nslookup
然後輸入lancache.steamcontent.com
case1的人會看到

case2的人會看到

192.168.2.10是我的NAS ip address,這裡應該顯示你自己的
如果這步是沒問題的,那問題可能出在反向代理伺服器
可以嘗試點一下diagnostics.lancache.net的steam小方塊

嘗試將你看到的一個一個輸入到反向代理伺服器
通常反向代理lancache.steamcontent.com就夠用了
2. 為什麼lancache.steamcontent.com這麼重要?
根據這篇steam的1/21更新
https://store.steampowered.com/news/57829/?l=tchinese
Support a LAN event using DNS injection on lancache.steamcontent.com to set up a local explicit caching proxy for downloads.
只要lancache.steamcontent.com被導向cache server,它會自動切換成 local caching mode
以下為lancache的discord大神解說

3. 其他教學文,如果有疑問的,或是非synology nas的,可以參考
https://linustechtips.com/main/topic/962655-steam-caching-tutorial/
https://hoerli.net/steam-origin-battle-net-riot-games-frontier-launchpad-windows-cache-server/
lancache官方文件
https://lancache.net/docs/containers/monolithic/
https://lancache.net/docs/containers/dns/
https://lancache.net/docs/containers/sniproxy/