大家好,我是飄雷。
春節假期裏,正在上大學的大侄子跟我抱怨,說現在大學還在使用流量扣費的校園網,宿舍裏幾個同學下載遊戲的時候都叫苦不迭,不僅流量費用貴,而且大家的下載速度還慢,很是不爽。
說起這個,我就想到自己家裏幾臺PC主機+筆記本下載遊戲的時候,也有類似的情況。
雖然steam遊戲有局域網內流式傳輸的功能,但是要使用的話得保持一臺設備通電開機,而且像是育碧的Uplay和暴雪的battle之類的平臺可沒這種功能。
所以我就趁着假期研究了一下,摸索出一套使用Lancache這個項目在本地搭建遊戲緩存服務器的教程,只需要有一臺設備下載過遊戲,局域網內其他設備再次下載時,就能從本地緩存中獲取內容。
這樣一方面可以大大減少外網帶寬的佔用,對使用流量的校園網或者CPE用戶很是友好,另一方面也能加快下載速度,減少等待的時間,希望能幫到用得上的朋友。
![]()
一、Lancache介紹
Lancache是一套在GitHub上開源免費的局域網緩存解決方案,它基於Nginx,通過DNS劫持技術,可以將Steam、EA app (原Origin)、育碧、拳頭、暴雪戰網等平臺的下載域名解析到本地緩存服務器的IP地址,而非直接訪問互聯網。
![]()
這樣當首次下載遊戲時,遊戲文件就會被緩存到本地的服務器中,後續在局域網中再次下載時,就能在本地服務器直接讀取內容,實現一次下載、多人共享。
具體來說,LanCache 的運行依賴於兩個核心組件:緩存服務器(Cache Server) 和 DNS 轉發器(DNS Redirector)。
![]()
它的工作步驟如下:
DNS 劫持:LanCache 充當了局域網內的 DNS 服務器。當你的電腦嘗試訪問 Steam 的內容服務器(如 content.steampowered.com)時,LanCache 的 DNS 轉發器會將該域名解析到本地緩存服務器的 IP,而不是互聯網 IP。
透明代理:遊戲客戶端(如 Steam 客戶端)認爲它在連接官方服務器,但實際上它連接的是你本地運行的 Nginx 實例。
智能緩存:
首次下載:本地沒有文件,Nginx 會從互聯網下載文件,並同步流式傳輸給你的電腦,同時在本地磁盤保留一份拷貝。
後續下載:當第二臺電腦請求相同文件時,Nginx 發現磁盤已有緩存,直接從本地以極速發送數據,完全不佔用外網流量。
二、Lancache部署方式
這裏我以家裏的威聯通Qu805爲例,爲大家展示Lancache的docker部署過程,操作步驟非常簡單,其他品牌的軟路由或者NAS也能輕鬆搞定。
首先我們要給Lancache新建一個保存配置文件的文件夾,這個位置大家可以自行決定,我是在Container新建了一個lancache文件夾,並在其中新建了cache和logs兩個文件夾用於目錄映射。
![]()
另外有一個折騰了我好幾天才部署成功的難點,我們也需要提前處理一下。
Lancache這個項目,使用的是GitHub中的cache-domains項目作爲配置生成器,從而創建配置數據,然後纔可以將其加載到本地網絡現有的 DNS 基礎架構中。
換句話說,如果沒有魔法飛棍來保證GitHub通暢的話,可能會出現Lancache的DNS服務無法正常運行的問題。
所以爲了保險,我們可以提前下載該項目,
![]()
然後將解壓後的所有文件都上傳到NAS裏,比如我存放在了/Container/lancache/domains文件夾裏。
![]()
接着我們登錄威聯通NAS後臺,打開Container Station容器工作站,點擊左側的”應用程序“,然後點擊右側黑色”創建“按鈕。
![]()
在彈出的代碼輸入框中,我們輸入以下YAML代碼,這裏需要注意代碼中的IP和文件夾部分,大家可以根據自己局域網和設備的實際情況進行修改。
x-restart-policy: &restart-policy "no"
services:
dns:
image: lancachenet/lancache-dns:latest
restart: *restart-policy
# DNS服務使用 monolithic 的共享 IP
network_mode: service:monolithic
# 目錄掛載,根據實際情況填寫。格式:NAS本地路徑:容器內路徑
volumes:
- /share/Container/lancache/domains:/data/cachedomains
# IP根據實際情況填寫
environment:
- USE_GENERIC_CACHE=true
- LANCACHE_IP=192.168.10.209
- DNS_BIND_IP=192.168.10.209
# 這裏使用阿里雲的公共DNS,如果所在地有更快的運營商DNS,也可以自行替換
- UPSTREAM_DNS=223.5.5.5
- TZ=Asia/Shanghai
monolithic:
image: lancachenet/monolithic:latest
restart: *restart-policy
ports:
- 80:80/tcp
- 443:443/tcp
# 目錄掛載,根據實際情況填寫。格式:NAS本地路徑:容器內路徑
volumes:
- /share/Container/lancache/domains:/data/cachedomains
- /share/Container/lancache/cache:/data/cache
- /share/Container/lancache/logs:/data/logs
networks:
lancache_net:
ipv4_address: 192.168.10.209
# IP根據實際情況填寫
environment:
- USE_GENERIC_CACHE=true
- LANCACHE_IP=192.168.10.209
- CACHE_DISK_SIZE=200g
- MIN_FREE_DISK=10g
- CACHE_INDEX_SIZE=250m
- CACHE_MAX_AGE=3650d
- TZ=Asia/Shanghai
## 定義網絡 (Macvlan 模式)
networks:
lancache_net:
driver: macvlan
driver_opts:
## 你的 QNAP 網卡名稱 (請確保 qvs0 是正確的虛擬交換機接口)
parent: qvs0
ipam:
config:
# 根據你的局域網實際網段和網關填寫
- subnet: 192.168.10.0/24
gateway: 192.168.10.1
這裏由於Lancache項目需要佔用80和443端口,所以我們通過Macvlan創建另外一個 IP,代碼中我使用的是192.168.10.209,大家不要直接照搬,先看看自己局域網的網段。
代碼粘貼無誤後,記得點擊下方的 “驗證”按鈕,確保YAML格式正確,最後點擊創建按鈕,系統就會自動拉取這個非常精簡的鏡像並啓動服務,咱們可以在容器列表中看到lancache-dns和lancache-monolithic這兩個容器正在運行,狀態顯示爲綠色小圓點。
![]()
三、Lancache使用方法
1.修改DNS
Lancache正確部署後,使用方法是非常簡單的,我們只需要將電腦的DNS指向剛纔我們給Lancache配置的網址即可,比如這裏我使用的就是代碼中的 192.168.10.209:
![]()
需要注意的是,如果這臺部署了Lancache的NAS關機或重啓,那電腦將會因爲解析不到DNS而無法上網,這種情況下把電腦DNS改回自動獲取即可。
2.初次下載
DNS設置好後,隨便打開個網頁,測試網絡通暢,說明Lancache已經可以正常工作了。
接下來我們就可以打開steam或者其他遊戲平臺,下載一個遊戲試試。
如下圖所示,可以看到在首次下載遊戲時,Qu805是處於邊接收、邊發送的狀態,說明遊戲文件已經流經了NAS,並且在NAS中進行了緩存。
![]()
3.二次下載
當我們二次下載Lancache緩存過的遊戲時,可以看到NAS網口的發送速度超過了100MB/s,此時文件完全從本地NAS的中獲取,不僅速度更快,而且也不用消耗外網流量。
![]()
4.補充
有朋友可能會說,每次都需要用電腦先下載一次遊戲後才能加速,還是有點兒繁瑣,那麼GitHub上一個叫做steam-lancache-prefill的項目可以代替steam客戶端來觸發這個下載緩存的操作,實現預填充功能,有興趣的朋友可以自行探索一下。
![]()
總結
本期爲大家分享的這套利用NAS構建本地遊戲緩存服務器的方法,非常適合宿舍、家庭或者公司這類多人下載相同遊戲的共享環境,也可以用來解決帶寬或者流量受限的問題,大家有需要的話可以嘗試一下,還是相當好用的。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com
