Steam Cache-Proxy Server

Heute gibt es ein auch für mich neues Tutorial. Ein Proxy-Server zum cachen von Steam-Games. Nützlich ist sowas auf LAN-Parties, auf denen man viele Teilnehmer hat und nur wenig Internetkapazitäten. So wird ein Update nur einmal über das Internet heruntergeladen und jeder weitere Download läuft über den Cache-Server.

folgende Systeme werden benötigt:
– Server mit viel Bums für den Cache
– BIND DNS-Server
– dnsspoof aus dsniff-suite
– nginx-Webserver

Vogehen:
1. normalen DNS-Server aufsetzen sofern nicht vorhanden
2. nginx installieren/konfigurieren
3. dnsspoof einrichten
4. testen

1. DNS-Server

dieses Tutorial funktioniert aktuell nur, wenn man einen eigenen DNS-Server hat, auf dem man Einträge manipulieren kann. Wenn ihr einen normalen DSL-Router wie eine Fritzbox habt, funktioniert das nur bedingt, da die DNS-Anfragen in dieser Methode mit dns-spoof abgefangen werden müssen. Wenn Freizeit vorhanden ist, beschäftige ich mich mal mit wildcards in BIND, um die DNS-Anfragen direkt im DNS-Server umzuleiten ohne dnsspoof zu nutzen.

Wie man eigenen DNS-Server aufsetzt wird es in einem anderen tutorial gegeben. Für  kleinere Lösungen sei hier das Tool dnsmasq empfohlen, für größere Netze eher BIND.

2. nginx installieren

nginx installieren mit „apt-get install nginx“

folgende Verzeichnisse auf dem Cache-Server erstellen:

mkdir -p /var/www/steamproxy
mkdir -p /var/www/logs

Als nächstes erstellen wir die nginx-config in /etc/nginx/nginx.conf mit folgendem Inhalt:

user root root;
worker_processes  4;

error_log  /var/log/nginx-error.log;

events {
     worker_connections 8192;
     multi_accept on;
}

http {
   include mime.types;
   access_log  /var/log/nginx-access.log;
   keepalive_timeout 65;

    # steam mirror
   server {
        listen 80;
        server_name _;
        access_log /var/log/steam-access.log;
        error_log /var/log/steam-error.log;
        root /var/www/steamproxy;
        index index.html;
        resolver 8.8.8.8;

        location /depot/ {
             try_files $uri @mirror;
             access_log /var/log/depot-local.log;
        }

        location / {
            proxy_next_upstream error timeout http_404;
            proxy_pass http://$host$uri;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header X-Mirror-Upstream-Status $upstream_status;
            add_header X-Mirror-Upstream-Response-Time $upstream_response_time;
            add_header X-Mirror-Status $upstream_cache_status;
        }

        location @mirror {
            proxy_store on;
            proxy_store_access user:rw group:rw all:r;
            proxy_next_upstream error timeout http_404;
            proxy_pass http://$host$uri;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header X-Mirror-Upstream-Status $upstream_status;
            add_header X-Mirror-Upstream-Response-Time $upstream_response_time;
            add_header X-Mirror-Status $upstream_cache_status;
            access_log /var/log/depot-remote.log;
        }
   }
}

Wichtige Infos über die config wären:

* als user wird in diesem Fall „root“ verwendet

* die Files werden im Pfad /var/www/steamproxy abgelegt

* als DNS-Server für den Cache nutzen wir die 8.8.8.8 (google-DNS)

3. dns-spoof einrichten

Im nächsten Schritt leiten wir sämtliche Anfragen an die Content-Server von Steam auf unseren Cache-Server um. Dazu nutzen wir dns-spoof, damit normale Anfragen an Steam (wie der login) weiterhin ins Internet gehen und sämtliche Anfragen an die Content-Server (*.cs.steampowered.com) im LAN bleiben. Die folgenden Schritte müssen auf dem host ausgeführt werden, auf dem der DNS-Server läuft.

dnsspoof installieren:

apt-get install dsniff

config erstellen/bearbeiten in /etc/dnsspoof.conf

Der Inhalt der Config ist recht simpel. Pro Zeile kann man einen spoof-Eintrag erstellen. Als erstes wird das neue Ziel genannt und dann die Adresse, die umgeleitet werden soll wie im folgenden Beispiel:

192.168.2.4 *.cs.steampowered.com

Abschließend starten wir dns-spoof auf dem host (empfohlen wird, dieses in einem screen zu tun):

dnsspoof starten mit

dnsspoof -f /etc/dnsspoof.conf

4. testen

startet Steam, der login sollte normal funktionieren
Wenn nun ein Spiel im LAN von einem PC, der auf unseren eigenen DNS-Server zugreift installiert wird, seht ihr bei dnsspoof die Anfragen an die Content-Server und wie sie umgeleitet werden. Bei der ersten Installation ist auf dem Cache-Server der eingehende gleich dem ausgehenden Traffic und die Dateien werden in /var/www/steamproxy/depot/ abgelegt. Bei der nächsten Installation sollte nurnoch TX-Traffic vorahnden sein.

MfG Støertebeker

Veröffentlicht unter Linux, Tutorials

Schreibe einen Kommentar