profile picture

ゲームをローカル環境にキャッシュする

January 03, 2024 - game lancache

概要

LanCache.NET を導入してゲームをローカル環境にキャッシュすることで、ゲームのインストールを高速化します。
今回は Steam のゲームをキャッシュしますが、他にもさまざまなゲームをキャッシュすることができます。
サポートされているサービスについては、 uklans/cache-domains を参照してください。

前提条件

環境

ホストマシン

LanCache.NET を導入してゲームをキャッシュする PC です。

ハードウェア

ソフトウェア

クライアントマシン

ゲームをインストールしてプレイする PC です。

ハードウェア

ソフトウェア

導入手順

ホストマシン

公式ドキュメントの The Simplest Method を参考に導入します。

  1. 次のコマンドで docker-compose を lancache フォルダにダウンロードします。

    git clone https://github.com/lancachenet/docker-compose/ lancache
    
  2. lancache フォルダの .env をエディターで開いて編集します。今回は vim で編集します。

    cd lancache
    vim .env
    
  3. More Detail を参考に .env を編集します。

    • LANCACHE_IP: LanCache.NET の IP アドレスです。通常はホストマシンの IP アドレスを設定します。
    • DNS_BIND_IP: DNSコンテナの IP アドレスです。LANCACHE_IP と同じ値を設定します。
    • UPSTREAM_DNS: 上流の DNS サーバーです。複数のアップストリーム DNS サーバーをセミコロン (またはスペース) で区切って設定できます。
    • CACHE_ROOT: キャッシュデータを保存する場所です。
    • CACHE_DISK_SIZE: キャッシュするボリュームのサイズです。
    • TZ: Docker コンテナのタイムゾーンです。日本にする場合は Asia/Tokyo を設定します。
  4. 次のコマンドで LanCache.NET(lancache-dns, monolithic) を起動します。

    sudo docker-compose up -d
    

    LanCache.NET を終了する場合は次のコマンドを実行します。

    sudo docker-compose down
    

ルーター

DNS ポイズニングを行うために lancache-dns の IP アドレスを渡すようにルーターを設定します。
ルーターによって設定方法は異なりますが、多くの場合は LAN 設定から DNS サーバーの IP を変更することができます。
詳細は公式ドキュメントの Configuring your firewall を参照してください。
今回はクライアント側で DNS 設定を変更するためこの手順はスキップします。

クライアントマシン

DNS を lancache-dns の IP アドレスに設定します。

  1. 設定画面を開きます。

  2. サイドメニューの「ネットワークとインターネット」から「イーサーネット」を開きます。

  3. 「DNS サーバーの割り当て」の 編集 ボタンを押下します。

  4. 「DNS 設定の編集」を 手動 に変更し次の設定を行います。

    • IPv4: オンにします。
    • 優先 DNS: lancache-dns の IP アドレスに設定します。

検証

Steam で Left 4 Dead 2 (8.5GB) のインストールにかかる時間をキャッシュ前とキャッシュ後で比較します。

テスト結果最大ダウンロード速度インストール時間
キャッシュ前11.8 MB/s29分30秒
キャッシュ後102.6MB/s02分05秒

キャッシュ後は大幅にインストール時間が短縮されました。

トラブルシューティング

LanCache.NET が起動しない

詳細

次のエラーが発生して起動に失敗します。

st-little@ap-server:~/lancache$ sudo docker-compose up -d
[+] Running 2/3
  Network lancache_default         Created                                                                                                                                                                                                                    0.1s 
  Container lancache-monolithic-1  Started                                                                                                                                                                                                                    0.7s 
  Container lancache-dns-1         Starting                                                                                                                                                                                                                   0.7s 
Error response from daemon: driver failed programming external connectivity on endpoint lancache-dns-1 (4b1ad8818c8767b6bc7d398368294be9e1a1cbd38a2e54ba7d96bdb6396ff446): Error starting userland proxy: listen tcp4 192.168.210.110:53: bind: cannot assign requested address

原因

既にポート 53 が systemd-resolved に使用されています。

st-little@ap-server:~/lancache$ sudo lsof -i :53
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 571 systemd-resolve   13u  IPv4  23945      0t0  UDP localhost:domain 
systemd-r 571 systemd-resolve   14u  IPv4  23946      0t0  TCP localhost:domain (LISTEN)

解決方法

次のコマンドで systemd-resolved を無効にします。

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved