/lancache

Improve download speeds and reduce strain on your Internet connection at LAN parties. Locally cache game installs and updates from the largest distributors: Steam, RIOT, Blizard, Hirez, Origin, Sony, Microsoft, Tera, GOG, ArenaNetworks, WarGaming, and Uplay. Super easy to setup with auto installer script!

Primary LanguageShell

LAN-Cache v1.3-unbound

Based off work of https://gitlab.com/frag-o-matic/lan-cache So credits go to Bruno Gysels and MultiPlay.co.uk for the base they made!

Come visit us @ www.cu-lan.be | www.gunsnbits.de | www.discoverpc.net/ | https://lanfest.intel.com/netwar

Facebook @ https://www.facebook.com/groups/434599530274923/?notif_id=1509019697563943

Twitter @ https://twitter.com/search?q=%40LAN_CACHE&src=typd

OS: Debian 9.4 amd64 (Stretch)

Short Changelog

  • 03-14-2018 imac
    • Minor changes in Readme.md to provide a more hassle free installation.
  • 6-30-2017 saambd
    • Added missing } on line 56 of Microsoft conf
  • 8-03-2017 bn_
    • Added 2 Steam URLs to Unbound.Conf as posted in Multiplay Github
  • 10-17-2017 bn_
    • Added Sony DNS to Unbound.Conf as posted by Muffeee in issues
    • Added Glyph Support (Still needs testing)
  • 10-25-2017 Nagilum99 & Nexusofdoom
    • Merged the pull request from nagilum99 to correct / standardize the layout (Issue #65)
    • Changed Steamconfig as problem and solution posted by Nexusofdoom (Issue #61)
  • 10-28-2017 nexusofdoom
    • Added 2 Battlenet URLs to Unbound.Conf
    • Added New Origins URLs to Unbound.Conf
    • Did some magic in lancache-origin.conf to make it work :-)
  • 12-4-2017 nexusofdoom
    • Added Warframe and ESO/Elder Scrolls Online to Config.

Important!

If you already have an installation of nginx installed via apt-get install nginx, it is necessary that you remove it, the configuration files and all recommended packagaes via: apt-get purge nginx apt-get autoremove

Otherwise nginx may not start with lancache start script, instead run as wrong user and load /etc/nginx/nginx.conf. It results in not proxying and leaving entries in /var/log/nginx/...

Manual installation

If you want to install it manually, please follow the instructions below:

0) Configure proper network interface in your /etc/network/interfaces file, go for static IP address, take notes about all IPs you'll assign, as you need to refer to them during this installation by A LOT!

    	1) Install the required utilities
	   	apt-get install curl git unbound build-essential libpcre3 zlib1g-dev libreadline-dev libncurses5-dev libssl-dev httpry libudns0 libudns-dev libev4 libev-dev devscripts automake libtool autoconf autotools-dev cdbs debhelper dh-autoreconf dpkg-dev gettext pkg-config fakeroot libpcre3-dev libgd2-xpm-dev libgeoip-dev -y

    	2) NGINX + Pre Req
		2.1) Get Nginx from web
			curl http://nginx.org/download/nginx-1.13.4.tar.gz | tar zx
	   		cd ngnix-1.13.4
		2.2) Get Nginx Cache Purge from Frickle Labs:
			curl "http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz" | tar zx	
    		2.3) Get the Range Cache Plugin from Multiplay Github
			git clone https://github.com/multiplay/nginx-range-cache/ $PWD/nginx-range-cache
		2.4) Get Wandenberg NGINX Stream Module
			curl "https://codeload.github.com/wandenberg/nginx-push-stream-module/tar.gz/0.5.1?dummy=/wandenberg-nginx-push-stream-module-0.5.1_GH0.tar.gz" | tar zx

	3) Clone the git repo
		   	git clone -b master http://github.com/bntjah/lancache
	4) Install NGINX 
           		4.1) Patching NGINX for Range Cache from Multiplay
			patch -p1 <$PWD/nginx-range-cache/range_filter.patch
		4.2) Configure NGINX with the previously downloaded addons
   			./configure --modules-path=$PWD --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --with-file-aio --add-module=$PWD/ngx_cache_purge-2.3 --with-http_flv_module --with-http_geoip_module=dynamic --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --add-module=$PWD/nginx-range-cache --with-http_realip_module --with-http_slice_module --with-http_stub_status_module --with-pcre --with-http_v2_module --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module --add-module=$PWD/nginx-push-stream-module-0.5.1 --with-threads
   			make
   			make install

	5) Add the virtual interfaces (used for caching in nginx) to /etc/network/interfaces		

	6) Create the user lancache
		adduser --system --no-create-home lancache
		addgroup --system lancache
		usermod -aG lancache lancache

	7) Just create the folders:
		mkdir -p /srv/lancache/data/{microsoft,installs,other,tmp,hirez,origin,riot,gog,sony,steam,wargaming,arenanetworks,uplay,glyph,zenimax,digitalextremes,pearlabyss}
		mkdir -p /srv/lancache/logs/{Errors,Keys,Access}

	8) chown the folder:
		chown -R lancache:lancache /srv/lancache

	9) Copy the conf folder and contents (where you originally git cloned it to in step 3) to /usr/local/nginx/conf/
		cp -R ~/lancache/conf /usr/local/nginx/
		
	10) Replace the proxy_bind variable with your primary IP address (not one of the virtual ones)

	11) Copy the Lancache file from ~/lancache/init.d/ to /etc/init.d/ by:
		cp ~/lancache/init.d/lancache /etc/init.d/

	12) Make it an executable:
		chmod +x /etc/init.d/lancache

	13) Put it in the standard Boot:
		update-rc.d lancache defaults

	14) cp ~/lancache/limits.conf /etc/security/

	15) Edit ~/lancache/hosts to your needs, placing all your virtual IP's next to the appropriate caching service
		15.1) cp ~/lancache/hosts /etc/
		
	16) Disable IPv6
		echo "net.ipv6.conf.all.disable_ipv6=1" >/etc/sysctl.d/disable-ipv6.conf
    		sysctl -p /etc/sysctl.d/disable-ipv6.conf

	16) Install sniproxy for passing through HTTPS traffic (cannot be cached)
		16.1) git clone https://github.com/dlundquist/sniproxy
		16.2) curl https://raw.githubusercontent.com/OpenSourceLAN/origin-docker/master/sniproxy/sniproxy.conf -o /etc/sniproxy.conf
		16.3) cd sniproxy
		16.4) ./autogen.sh && ./configure && make check && make install
		# If there are problems during test procedures, you can try to skip the checks by leaving out "&&make check" 
		16.5) Start sniproxy with /usr/local/sbin/sniproxy -c /etc/sniproxy.conf

	17) Copy the unbound configuration from ~/lancache/unbound/unbound.conf to /etc/unbound/unbound.conf
		17.1) Replace the interfaces: section with the normal ip (not the virtual ones)
			17.2) Replace all "A records" with the appropriate IPs (the virtual IPs for the appropriate caching service)

Traffic Monitoring on CLI

A) Monitor through nload
   apt-get install nload -y
   nload -U G -u M -i 102400 -o 102400 (shows bandwith in MByte/s)
   or
   nload -U G -u m -i 1024000 -o 1024000 (shows bandwith in Mbit/s, scales graph to 1 Gbit/s)
   
B) Monitor network usage through iftop
   apt-get install iftop -y
   iftop -i eth0
   (Instead of eth0 just use your physical interface)

Optionals

DHCPd

If your lancache server is a DHCP client, please add public resolvers (not the ones who you use for your LAN party guests) to dhclient.conf to avoid resolving issues for the cache server. This can be achieved like this: - Add to /etc/dhclient.conf: prepend domain-name-servers 8.8.8.8, 8.8.4.4;

Alternatively you can use one of those mechanism to avoid resolv.conf being overwritten by DHCP or other services: https://www.cyberciti.biz/faq/dhclient-etcresolvconf-hooks/