diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..86af95d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +scripts/output diff --git a/scripts/config.example.json b/scripts/config.example.json new file mode 100644 index 0000000..6d58ee4 --- /dev/null +++ b/scripts/config.example.json @@ -0,0 +1,19 @@ +{ + "ips": { + "steam": "10.10.3.11", + "origin": "10.10.3.12", + "blizzard": "10.10.3.13", + "windows": "10.10.3.14", + "riot": "10.10.3.15", + "generic": "10.10.3.16" + }, + "cache_domains": { + "default": "generic", + "blizzard": "blizzard", + "origin": "origin", + "riot": "riot", + "steam": "steam", + "wsus": "windows", + "xboxlive": "windows" + } +} diff --git a/scripts/create-unbound.sh b/scripts/create-unbound.sh new file mode 100755 index 0000000..c0d4c0e --- /dev/null +++ b/scripts/create-unbound.sh @@ -0,0 +1,63 @@ +#!/bin/bash +basedir=".." +outputdir="output/unbound" +path="${basedir}/cache_domains.json" + +export IFS=' ' + +test=$(which jq); +out=$? +if [ $out -gt 0 ] ; then + echo "This script requires jq to be installed." + echo "Your package manager should be able to find it" + exit 1 +fi + +cachenamedefault="disabled" + +while read line; do + ip=$(jq -r ".ips[\"${line}\"]" config.json) + declare "cacheip$line"="$ip" +done <<< $(jq -r '.ips | to_entries[] | .key' config.json) + +while read line; do + name=$(jq -r ".cache_domains[\"${line}\"]" config.json) + declare "cachename$line"="$name" +done <<< $(jq -r '.cache_domains | to_entries[] | .key' config.json) + +rm -rf ${outputdir} +mkdir -p ${outputdir} +while read entry; do + unset cacheip + unset cachename + key=$(jq -r ".cache_domains[$entry].name" $path) + cachename="cachename${key}" + if [ -z "${!cachename}" ]; then + cachename="cachenamedefault" + fi + if [[ ${!cachename} == "disabled" ]]; then + continue; + fi + cacheipname="cacheip${!cachename}" + cacheip=${!cacheipname} + while read fileid; do + while read filename; do + destfilename=$(echo $filename | sed -e 's/txt/conf/') + outputfile=${outputdir}/${destfilename} + touch $outputfile + echo "server:" >> $outputfile + while read fileentry; do + # Ignore comments + if [[ $fileentry == \#* ]]; then + continue + fi + parsed=$(echo $fileentry | sed -e "s/^\*\.//") + if grep -q "$parsed" $outputfile; then + continue + fi + echo " local-zone: \"${parsed}\" redirect" >> $outputfile + echo " local-data: \"${parsed} 30 IN A ${cacheip}\"" >> $outputfile + done <<< $(cat ${basedir}/$filename); + done <<< $(jq -r ".cache_domains[$entry].domain_files[$fileid]" $path) + done <<< $(jq -r ".cache_domains[$entry].domain_files | to_entries[] | .key" $path) +done <<< $(jq -r '.cache_domains | to_entries[] | .key' $path)