summaryrefslogtreecommitdiffstats
path: root/retiolum
diff options
context:
space:
mode:
Diffstat (limited to 'retiolum')
-rwxr-xr-xretiolum/Makefile32
-rw-r--r--retiolum/README52
-rwxr-xr-xretiolum/bin/announce_pubkey35
-rwxr-xr-xretiolum/bin/check-free-retiolum-v421
-rwxr-xr-xretiolum/bin/check-free-retiolum-v62
-rwxr-xr-xretiolum/bin/create-host-tar15
-rwxr-xr-xretiolum/bin/create-supernode-tar13
-rwxr-xr-xretiolum/bin/dump-graph9
-rwxr-xr-xretiolum/bin/fillxx6
-rwxr-xr-xretiolum/bin/find-active-nodes21
-rwxr-xr-xretiolum/bin/find-supernodes21
-rwxr-xr-xretiolum/bin/get-tinc-dir9
-rwxr-xr-xretiolum/bin/hosts13
-rwxr-xr-xretiolum/bin/install18
-rwxr-xr-xretiolum/bin/ipv635
-rwxr-xr-xretiolum/bin/list-known-public-addresses38
-rw-r--r--retiolum/bin/nodes-to-json37
-rwxr-xr-xretiolum/bin/patch-retiolum-hosts13
-rwxr-xr-xretiolum/bin/pgrep-retiolum-tincd-args2
-rwxr-xr-xretiolum/bin/restart-tincd14
-rwxr-xr-xretiolum/bin/supernode-update-hosts-and-hup44
-rwxr-xr-xretiolum/bin/tinc18
l---------retiolum/bin/tinc2json1
-rwxr-xr-xretiolum/bin/update-retiolum-hosts14
-rwxr-xr-xretiolum/bin/update_tinc_hosts56
-rw-r--r--retiolum/doc/cronjob7
-rw-r--r--retiolum/doc/device.c37
-rw-r--r--retiolum/doc/git_checkout_only_hosts11
-rw-r--r--retiolum/doc/highping2
-rw-r--r--retiolum/doc/install_dotcloud85
-rw-r--r--retiolum/doc/install_no.de16
-rw-r--r--retiolum/doc/routing/ip-ranges5
-rw-r--r--retiolum/doc/routing/tun30
-rw-r--r--retiolum/hosts/Discordius11
-rw-r--r--retiolum/hosts/Lassulus10
-rw-r--r--retiolum/hosts/Styx10
-rw-r--r--retiolum/hosts/ThinkArmageddon9
-rw-r--r--retiolum/hosts/UTART9
-rw-r--r--retiolum/hosts/ach11
-rw-r--r--retiolum/hosts/air11
-rw-r--r--retiolum/hosts/alarmpi11
-rw-r--r--retiolum/hosts/albi1011
-rw-r--r--retiolum/hosts/albi710
-rw-r--r--retiolum/hosts/alphalabs10
-rw-r--r--retiolum/hosts/bergwerk11
-rw-r--r--retiolum/hosts/box10
-rw-r--r--retiolum/hosts/c2ft10
-rw-r--r--retiolum/hosts/c2fthome10
-rw-r--r--retiolum/hosts/casino11
-rw-r--r--retiolum/hosts/cat111
-rw-r--r--retiolum/hosts/cband11
-rw-r--r--retiolum/hosts/cd12
-rw-r--r--retiolum/hosts/chinaman11
-rw-r--r--retiolum/hosts/chinapi11
-rw-r--r--retiolum/hosts/cloudkrebs12
-rw-r--r--retiolum/hosts/darth12
-rw-r--r--retiolum/hosts/destroy11
-rw-r--r--retiolum/hosts/devstar11
-rw-r--r--retiolum/hosts/eigenserv11
-rw-r--r--retiolum/hosts/euer12
-rw-r--r--retiolum/hosts/exile9
-rw-r--r--retiolum/hosts/exitium_mobilis10
-rw-r--r--retiolum/hosts/filebitch11
-rw-r--r--retiolum/hosts/filepimp11
-rw-r--r--retiolum/hosts/fuerkrebs10
-rw-r--r--retiolum/hosts/geisha11
-rw-r--r--retiolum/hosts/heidi10
-rw-r--r--retiolum/hosts/horreum_magnus15
-rw-r--r--retiolum/hosts/incept13
-rw-r--r--retiolum/hosts/ire12
-rw-r--r--retiolum/hosts/ire29
-rw-r--r--retiolum/hosts/juhulian11
-rw-r--r--retiolum/hosts/kaah10
-rw-r--r--retiolum/hosts/kabinett11
-rw-r--r--retiolum/hosts/karthus10
-rw-r--r--retiolum/hosts/khackplug11
-rw-r--r--retiolum/hosts/kheurop12
-rw-r--r--retiolum/hosts/kiosk11
-rw-r--r--retiolum/hosts/krebsplug10
-rw-r--r--retiolum/hosts/krebsplug_696c98da10
-rw-r--r--retiolum/hosts/kremium10
-rw-r--r--retiolum/hosts/kvasir10
-rw-r--r--retiolum/hosts/laqueus11
-rw-r--r--retiolum/hosts/luminos11
-rw-r--r--retiolum/hosts/machine11
-rw-r--r--retiolum/hosts/miefda11
-rw-r--r--retiolum/hosts/minikrebs10
-rw-r--r--retiolum/hosts/monitoring7
-rw-r--r--retiolum/hosts/muhbaasu13
-rw-r--r--retiolum/hosts/nfcgate_298dbf0710
-rw-r--r--retiolum/hosts/nomic10
-rw-r--r--retiolum/hosts/nomic210
-rw-r--r--retiolum/hosts/ohz10
-rw-r--r--retiolum/hosts/omo9
-rw-r--r--retiolum/hosts/pante_miner10
-rw-r--r--retiolum/hosts/pfleidi9
-rw-r--r--retiolum/hosts/pic11
-rw-r--r--retiolum/hosts/pico11
-rw-r--r--retiolum/hosts/pigstarter12
-rw-r--r--retiolum/hosts/pornocauster10
-rw-r--r--retiolum/hosts/radiotuxmini11
-rw-r--r--retiolum/hosts/random10
-rw-r--r--retiolum/hosts/raspafari11
-rw-r--r--retiolum/hosts/rtjure10
-rw-r--r--retiolum/hosts/rubus10
-rw-r--r--retiolum/hosts/senderechner10
-rw-r--r--retiolum/hosts/seruundroid12
-rw-r--r--retiolum/hosts/shabruecke_a0e95c2812
-rw-r--r--retiolum/hosts/sir_krebs_a_lot11
-rw-r--r--retiolum/hosts/skirfir11
-rw-r--r--retiolum/hosts/slowpoke13
-rw-r--r--retiolum/hosts/smove9
-rw-r--r--retiolum/hosts/soundflower11
-rw-r--r--retiolum/hosts/steve10
-rw-r--r--retiolum/hosts/supernode13
-rw-r--r--retiolum/hosts/tahoe11
-rw-r--r--retiolum/hosts/taschenkrebs11
-rw-r--r--retiolum/hosts/terrapi11
-rw-r--r--retiolum/hosts/tincdroid9
-rw-r--r--retiolum/hosts/upm9
-rw-r--r--retiolum/hosts/vault10
-rw-r--r--retiolum/hosts/ytart9
-rw-r--r--retiolum/scripts/README16
-rw-r--r--retiolum/scripts/adv_graphgen/DEPS4
-rw-r--r--retiolum/scripts/adv_graphgen/Makefile4
-rw-r--r--retiolum/scripts/adv_graphgen/README28
-rwxr-xr-xretiolum/scripts/adv_graphgen/all_the_graphs.sh20
-rwxr-xr-xretiolum/scripts/adv_graphgen/anonytize.sh30
-rw-r--r--retiolum/scripts/adv_graphgen/map.html88
-rwxr-xr-xretiolum/scripts/adv_graphgen/sanitize.sh32
-rwxr-xr-xretiolum/scripts/adv_graphgen/tinc_stats/Availability.py58
-rw-r--r--retiolum/scripts/adv_graphgen/tinc_stats/BackwardsReader.py35
-rwxr-xr-xretiolum/scripts/adv_graphgen/tinc_stats/Geo.py54
-rw-r--r--retiolum/scripts/adv_graphgen/tinc_stats/Graph.py231
-rw-r--r--retiolum/scripts/adv_graphgen/tinc_stats/Graphite.py24
-rwxr-xr-xretiolum/scripts/adv_graphgen/tinc_stats/Log2JSON.py166
-rw-r--r--retiolum/scripts/adv_graphgen/tinc_stats/Supernodes.py59
-rw-r--r--retiolum/scripts/adv_graphgen/tinc_stats/__init__.py7
-rwxr-xr-xretiolum/scripts/autostart/create-startup.sh22
-rwxr-xr-xretiolum/scripts/autostart/tinc94
-rw-r--r--retiolum/scripts/github_listener/INSTALL13
-rw-r--r--retiolum/scripts/github_listener/README22
-rw-r--r--retiolum/scripts/github_listener/github_listener.conf6
-rwxr-xr-xretiolum/scripts/github_listener/handle_request28
-rwxr-xr-xretiolum/scripts/routing/defaultroute.sh38
-rw-r--r--retiolum/scripts/tinc_setup/README18
-rw-r--r--retiolum/scripts/tinc_setup/autoupdate_cron.sh7
-rwxr-xr-xretiolum/scripts/tinc_setup/build_arch.sh14
-rwxr-xr-xretiolum/scripts/tinc_setup/build_debian.sh32
-rwxr-xr-xretiolum/scripts/tinc_setup/build_debian_clean.sh31
-rwxr-xr-xretiolum/scripts/tinc_setup/build_ec2.sh16
-rw-r--r--retiolum/scripts/tinc_setup/build_no.de.sh1
-rwxr-xr-xretiolum/scripts/tinc_setup/install.sh84
-rwxr-xr-xretiolum/scripts/tinc_setup/new_install.sh358
-rwxr-xr-xretiolum/scripts/tinc_setup/tinc-up25
155 files changed, 3344 insertions, 0 deletions
diff --git a/retiolum/Makefile b/retiolum/Makefile
new file mode 100755
index 00000000..b3a3c124
--- /dev/null
+++ b/retiolum/Makefile
@@ -0,0 +1,32 @@
+.PHONY: update all install hosts
+
+EXES := update_tinc_hosts fillxx update-retiolum-hosts
+
+all: update links
+
+links:
+ for x in $(EXES); do ln -snf ../retiolum/bin/$$x ../bin; done
+
+
+install: upgrade
+ ../punani/bin/punani install tinc python
+ scripts/tinc_setup/install.sh
+ sudo cp scripts/tinc_setup/tinc-up /etc/tinc/retiolum/tinc-up
+
+upgrade: update
+ if ! diff -u scripts/tinc_setup/tinc-up /etc/tinc/retiolum/tinc-up; then \
+ sudo cp scripts/tinc_setup/tinc-up /etc/tinc/retiolum/tinc-up; \
+ sudo bin/restart-tincd || :; \
+ fi
+
+update: hosts
+ bin/update_tinc_hosts "create magic" || :;
+ bin/update_tinc_hosts restart
+ sudo pkill -HUP tincd || :;
+
+startup:
+ scripts/autostart/create-startup.sh
+
+hosts:
+ bin/update-retiolum-hosts || :;
+ sudo bin/patch-retiolum-hosts
diff --git a/retiolum/README b/retiolum/README
new file mode 100644
index 00000000..6e39f1d5
--- /dev/null
+++ b/retiolum/README
@@ -0,0 +1,52 @@
+Retiolum Darknet Module for Krebs
+========================
+
+Enter the darknet with the help of tinc retiolum
+
+Getting Started
+-------------
+
+as root:
+
+ wget -O- http://tinc.krebsco.de | HOSTN=yourfavoritename sh
+
+( or use curl)
+
+Get the hosts
+-------------
+
+ wget http://euer.krebsco.de/retiolum/hosts.tar.gz # for all the hosts
+ wget http://euer.krebsco.de/retiolum/supernodes.tar.gz # only for supernodes, (deploy on wrt routers for example)
+
+ # quick update
+ curl http://euer.krebsco.de/retiolum/supernodes.tar.gz | gunzip | tar x -C /etc/tinc/retiolum/hosts
+
+Update your hosts file
+----------------------
+
+to resolve the krebs nodes in the darknet
+
+ make -C krebs/retiolum update
+
+
+Graphs
+------
+
+ # in the darknet
+ firefox http://pigstarter/graphs/retiolum
+ # in the internet,anonymous graphs
+ firefox http://pigstarter.de/graphs/retiolum/
+
+Other cool stuff
+---------------
+in bin/ there are some cool scripts which are partly needed and partly
+totally unnecessary to work with retiolum.
+
+As all the scripts are not too horribly long, be sure to use
+`cat bin/SCRIPTNAME` to get an understanding of what they do
+
+besides that in scripts/ there are 3 more scripts which perform pretty
+sophisticated tasks like finding instances via multicast or writing graphs
+of the current retiolum network. Try them if you dare :)
+
+
diff --git a/retiolum/bin/announce_pubkey b/retiolum/bin/announce_pubkey
new file mode 100755
index 00000000..ce5aed19
--- /dev/null
+++ b/retiolum/bin/announce_pubkey
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -euf
+HOST="${1:-}"
+
+usage (){
+cat <<EOF
+usage: $0 HOSTNAME
+
+also, you are made of stupid
+EOF
+exit 23
+}
+
+[ "x$HOST" = "x" ] && usage
+
+CHANNEL="#krebsco"
+IRCHOST="irc.freenode.net"
+PORT=6667
+RETIOLUM="/etc/tinc/retiolum"
+PUBFILE="$RETIOLUM/hosts/$HOST"
+
+if [ ! -e $PUBFILE ] ;then
+ echo "cannot find $PUBFILE - host $HOST wrong?" ;
+ echo
+ usage
+fi
+
+NICK="${HOST}_$((RANDOM%666))"
+
+( echo "NICK $NICK";
+ echo "USER $NICK $IRCHOST bla : $NICK";
+ echo "JOIN $CHANNEL";
+ sleep 23;
+ sed "s/^\(.*\)/PRIVMSG $CHANNEL : \1/" $PUBFILE;
+ sleep 5; ) | telnet $IRCHOST $PORT
diff --git a/retiolum/bin/check-free-retiolum-v4 b/retiolum/bin/check-free-retiolum-v4
new file mode 100755
index 00000000..3492f7f6
--- /dev/null
+++ b/retiolum/bin/check-free-retiolum-v4
@@ -0,0 +1,21 @@
+#! /bin/sh
+netname=retiolum
+myipv4=${1-10.243.0.-1}
+v4num=${myipv4##*.}
+printf "Retard check: "
+if [ "$v4num" -gt 0 -a "$v4num" -lt "256" ];
+then
+ printf "No retard detected\n"
+ cd /etc/tinc/$netname/hosts
+ printf "Check if ip is still free: "
+ for i in `ls -1`; do
+ if grep -q -e $myipv4\$ $i ;then
+ echo "Host IP already taken by $i! "
+ exit 1
+ fi
+ done
+ printf "Passed\n"
+else
+ printf "you are made of stupid. bailing out\n"
+ exit 1
+fi
diff --git a/retiolum/bin/check-free-retiolum-v6 b/retiolum/bin/check-free-retiolum-v6
new file mode 100755
index 00000000..20f87efe
--- /dev/null
+++ b/retiolum/bin/check-free-retiolum-v6
@@ -0,0 +1,2 @@
+#! /bin/sh
+exit 0
diff --git a/retiolum/bin/create-host-tar b/retiolum/bin/create-host-tar
new file mode 100755
index 00000000..48ce26d5
--- /dev/null
+++ b/retiolum/bin/create-host-tar
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -euf
+if [ x"${1:-}" = "x" ];then
+ echo "usage: $0 DIRECTORY"
+ exit 1
+fi
+
+WEBDIR=$1
+HOSTDIR=${HOSTDIR:-../hosts}
+HOSTFILE=$WEBDIR/hosts.tar.gz
+
+cd $(dirname $(readlink -f $0))
+rm -f $HOSTFILE
+tar czf $HOSTFILE -C $HOSTDIR .
+chmod a+rx $HOSTFILE
diff --git a/retiolum/bin/create-supernode-tar b/retiolum/bin/create-supernode-tar
new file mode 100755
index 00000000..1e90c26c
--- /dev/null
+++ b/retiolum/bin/create-supernode-tar
@@ -0,0 +1,13 @@
+#!/bin/sh
+set -euf
+if [ x"${1:-}" = "x" ];then
+ echo "usage: $0 DIRECTORY"
+ exit 1
+fi
+HOSTDIR=${HOSTDIR:-../hosts}
+WEBDIR=$1
+HOSTFILE=$WEBDIR/supernodes.tar.gz
+cd $(dirname $(readlink -f $0))
+rm -f $HOSTFILE
+tar czf $HOSTFILE -C $HOSTDIR `python ../scripts/adv_graphgen/tinc_stats/Supernodes.py |cut -d\ -f1`
+chmod a+rx $HOSTFILE
diff --git a/retiolum/bin/dump-graph b/retiolum/bin/dump-graph
new file mode 100755
index 00000000..87539f49
--- /dev/null
+++ b/retiolum/bin/dump-graph
@@ -0,0 +1,9 @@
+#! /bin/sh
+set -euf
+
+t0="`date '+%Y-%m-%d %H:%M:%S'`"
+systemctl kill --signal=USR2 tincd@retiolum
+sleep 5
+journalctl --since="$t0" | sed -n '
+ s/.*tinc\.retiolum\[[0-9]\+\]: \([^ ]\+\) to \([^ ]\+\) at \([^ ]\+\) .*$/\1 \2 \3/p
+'
diff --git a/retiolum/bin/fillxx b/retiolum/bin/fillxx
new file mode 100755
index 00000000..5e558362
--- /dev/null
+++ b/retiolum/bin/fillxx
@@ -0,0 +1,6 @@
+#! /bin/sh
+while echo $1 | grep -q xx; do
+ xx=`od -An -tx1 -N 1 /dev/urandom | tr -d \ `
+ set -- `echo $1 | sed s/xx/$xx/`
+done
+echo $1
diff --git a/retiolum/bin/find-active-nodes b/retiolum/bin/find-active-nodes
new file mode 100755
index 00000000..2c316d0e
--- /dev/null
+++ b/retiolum/bin/find-active-nodes
@@ -0,0 +1,21 @@
+#! /bin/dash
+set -eu
+cd /etc/tinc/retiolum/hosts
+for name in `
+ grep '^[[:space:]]*Address[[:space:]]*=' * |
+ cut -d: -f1 | sort | uniq
+`; do
+ if eval "`sed -n '
+ s/[[:space:]]\+//g
+ s/^\(Address\|Port\)=\(.*\)/\1="\${\1+\$\1\n}\2"/p
+ ' $name`"; then
+ port=${Port-655}
+ for host in $Address; do
+ if nc -zw 2 $host $port 2>/dev/null; then
+ echo "$name [('$host', $port)]"
+ fi &
+ done
+ wait
+ fi &
+done
+wait
diff --git a/retiolum/bin/find-supernodes b/retiolum/bin/find-supernodes
new file mode 100755
index 00000000..2c316d0e
--- /dev/null
+++ b/retiolum/bin/find-supernodes
@@ -0,0 +1,21 @@
+#! /bin/dash
+set -eu
+cd /etc/tinc/retiolum/hosts
+for name in `
+ grep '^[[:space:]]*Address[[:space:]]*=' * |
+ cut -d: -f1 | sort | uniq
+`; do
+ if eval "`sed -n '
+ s/[[:space:]]\+//g
+ s/^\(Address\|Port\)=\(.*\)/\1="\${\1+\$\1\n}\2"/p
+ ' $name`"; then
+ port=${Port-655}
+ for host in $Address; do
+ if nc -zw 2 $host $port 2>/dev/null; then
+ echo "$name [('$host', $port)]"
+ fi &
+ done
+ wait
+ fi &
+done
+wait
diff --git a/retiolum/bin/get-tinc-dir b/retiolum/bin/get-tinc-dir
new file mode 100755
index 00000000..3f48b2cd
--- /dev/null
+++ b/retiolum/bin/get-tinc-dir
@@ -0,0 +1,9 @@
+#!/bin/ksh
+case `uname -a` in
+ Linux*|CYGWIN*|MING*) echo "/etc/tinc"
+ ;;
+ SunOS*|Darwin*) echo "/usr/local/etc/tinc"
+ ;;
+ *) echo "/etc/tinc"
+ ;;
+esac
diff --git a/retiolum/bin/hosts b/retiolum/bin/hosts
new file mode 100755
index 00000000..4856d494
--- /dev/null
+++ b/retiolum/bin/hosts
@@ -0,0 +1,13 @@
+#! /bin/sh
+set -euf
+
+netname=${1-retiolum}
+
+cd /etc/tinc/$netname/hosts
+
+for i in `ls`; do
+ sed -n '
+ s|^ *Subnet *= *\([^ /]*\)\(/[0-9]*\)\? *$|\1\t'$i'.'$netname' '$i'|p
+ ' $i
+done | sort
+
diff --git a/retiolum/bin/install b/retiolum/bin/install
new file mode 100755
index 00000000..9e4459fb
--- /dev/null
+++ b/retiolum/bin/install
@@ -0,0 +1,18 @@
+#! /bin/sh
+#
+#
+#
+set -euf
+
+trap 'echo "${comment+$comment
+}You are made of stupid!">&2; exit 23' EXIT
+
+if ! test -e /usr/sbin/tincd; then
+ if grep -iq ubuntu /etc/issue; then
+ sudo apt-get install --yes tinc
+ else
+ comment='Install tinc to continue.' exit
+ fi
+fi
+
+trap - EXIT
diff --git a/retiolum/bin/ipv6 b/retiolum/bin/ipv6
new file mode 100755
index 00000000..34c6de71
--- /dev/null
+++ b/retiolum/bin/ipv6
@@ -0,0 +1,35 @@
+#! /bin/sh
+#
+# Manage IPv6 of the retiolum interface.
+#
+# usage: ipv6 {start,stop}
+#
+set -euf
+
+if test `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo "$0" "$@"
+ exit 23 # go to hell
+fi
+
+file=/etc/tinc/retiolum/hosts/`hostname`
+addr=`sed -n 's|^Subnet *= *\(42:[0-9A-Fa-f:]*/128\)|\1|p' $file`
+route=42::/16
+
+start() {
+ stop
+ ip -6 addr add $addr dev retiolum
+ ip -6 route add $route dev retiolum
+}
+
+stop() {
+ ip -6 addr del $addr dev retiolum 2>/dev/null || :
+ ip -6 route del $route dev retiolum 2>/dev/null || :
+}
+
+## dispatch
+case "$1" in
+ (start) start;;
+ (stop) stop;;
+ (*) echo "You're made of stupid" 2>/dev/null; exit 23;;
+esac
diff --git a/retiolum/bin/list-known-public-addresses b/retiolum/bin/list-known-public-addresses
new file mode 100755
index 00000000..21b1c389
--- /dev/null
+++ b/retiolum/bin/list-known-public-addresses
@@ -0,0 +1,38 @@
+#! /bin/sh
+#
+# printf '%s %s\n' hostname IP-address for each known public retiolum address
+#
+set -eu
+
+_list_hostname_address() {
+ cd /etc/tinc/retiolum/hosts
+ grep --with-filename '^Address' * |
+ sed -n '
+ s/: */ /
+ s/ *= */ /
+ s/ Address \([a-zA-Z0-9.:_]*\) \?.*/ \1/p'
+}
+_lookup_address() {
+ sed '
+ /:/!{/ [0-9.]*$/!{s/ / `dig +short /;s/$/` \&/}}
+ s/^/echo /
+ $s/$/\nwait/
+ ' | sh
+}
+_filter_public() {
+ sed '
+ # drop private IPv4 addresses
+ / 10\./d
+ / 172\.\(1[6-9]\|2[0-9]\|3[01]\)\./d
+ / 192\.168\./d
+ # TODO drop private IPv6 addresses
+ '
+}
+_filter_online() {
+ awk '
+ {print"nc -zw 2 "$2" 655 2>/dev/null && echo "$1" "$2" &"}
+ END {print"wait"}
+ ' | sh
+}
+
+_list_hostname_address | _lookup_address | _filter_public
diff --git a/retiolum/bin/nodes-to-json b/retiolum/bin/nodes-to-json
new file mode 100644
index 00000000..ca9d3c8c
--- /dev/null
+++ b/retiolum/bin/nodes-to-json
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+
+def parse_hosts_path(path="/etc/tinc/retiolum/hosts"):
+ import os
+ import re
+
+ needle_addr = re.compile("Subnet\s*=\s*(.*)/[0-9]+")
+ needle_port = re.compile("Port\s*=\s*(.*)")
+ for f in os.listdir(path):
+ with open(path+"/"+f) as of:
+ addrs = []
+ port = "655"
+
+ for line in of.readlines():
+
+ addr_found = needle_addr.match(line)
+ if addr_found:
+ addrs.append(addr_found.group(1))
+
+ port_found = needle_port.match(line)
+ if port_found:
+ port = port_found.group(1)
+
+ if addrs : yield (f ,[(addr ,int(port)) for addr in addrs])
+
+
+
+if __name__ == "__main__":
+ """
+ usage
+ """
+ import json
+ import sys
+ db={}
+ for host,addrs in parse_hosts_path(sys.argv[1] if len(sys.argv) > 2 else "/etc/tinc/retiolum/hosts"):
+ db[host] = addrs
+ print(json.dumps(db))
diff --git a/retiolum/bin/patch-retiolum-hosts b/retiolum/bin/patch-retiolum-hosts
new file mode 100755
index 00000000..69d7b92c
--- /dev/null
+++ b/retiolum/bin/patch-retiolum-hosts
@@ -0,0 +1,13 @@
+#! /bin/sh
+#
+# Apply custom retiolum hosts patches, if any.
+#
+# usage: patch-retiolum-hosts [--reverse]
+#
+set -euf
+
+patch=/etc/tinc/retiolum/hosts.patch
+
+if test -e $patch; then
+ patch -N -d /etc/tinc/retiolum/hosts -r - "$@" < $patch
+fi
diff --git a/retiolum/bin/pgrep-retiolum-tincd-args b/retiolum/bin/pgrep-retiolum-tincd-args
new file mode 100755
index 00000000..19c05fbe
--- /dev/null
+++ b/retiolum/bin/pgrep-retiolum-tincd-args
@@ -0,0 +1,2 @@
+#! /bin/sh
+ps -e -o args | grep -E '(^|[ /])tincd +([^ ].* )?(-n +|--net=)retiolum'
diff --git a/retiolum/bin/restart-tincd b/retiolum/bin/restart-tincd
new file mode 100755
index 00000000..17d939d9
--- /dev/null
+++ b/retiolum/bin/restart-tincd
@@ -0,0 +1,14 @@
+#! /bin/sh
+set -xeuf
+
+PATH="$(dirname $(readlink -f "$0"))${PATH+:$PATH}"
+
+if args="`pgrep-retiolum-tincd-args`"; then
+ while $args --kill; do
+ sleep 1
+ done
+ $args
+else
+ echo "$0: there is no retiolum tincd process to restart" >&2
+ exit 23
+fi
diff --git a/retiolum/bin/supernode-update-hosts-and-hup b/retiolum/bin/supernode-update-hosts-and-hup
new file mode 100755
index 00000000..b6b03c69
--- /dev/null
+++ b/retiolum/bin/supernode-update-hosts-and-hup
@@ -0,0 +1,44 @@
+#! /bin/sh
+#
+# @oxberg we do put this into crontab:
+# * * * * * /supernode-update-hosts-and-hup
+#
+set -euf
+
+cd /etc/tinc/retiolum/hosts
+
+temp1="`mktemp`"
+temp2="`mktemp`"
+trap "rm -f $temp1 $temp2" EXIT INT TERM
+
+old_commit="`cat .commit 2>/dev/null || :`"
+
+_hrefs() {
+ sed -n 's/href="\([^"]\+\)"/\n&\n/gp' |
+ sed -n 's/^href="\([^"]\+\)"$/\1/p'; }
+
+if curl -fsS \
+ "https://github.com/krebscode/painload/tree/master/retiolum/hosts" |
+ _hrefs |
+ grep '^/krebscode/painload/blob/' |
+ grep -v "/blob/$old_commit/" >$temp1
+then
+
+ new_commit=`sed 's|^/krebscode/painload/blob/\([^/]*\)/.*|\1|;q' $temp1`
+
+ sed '
+ s|^/krebscode/painload/blob/[^/]*/retiolum/hosts/\([^/]*\)$|\1|
+ ' $temp1 > $temp2
+
+ xargs rm -v -f <$temp2
+
+ sed "
+ s|^.*$|https://raw.github.com/krebscode/painload/$new_commit/retiolum/hosts/&|
+ " $temp2 > $temp1
+
+ wget -qi- < $temp1
+
+ echo $new_commit > .commit
+
+ pkill -HUP tincd
+fi
diff --git a/retiolum/bin/tinc b/retiolum/bin/tinc
new file mode 100755
index 00000000..ffa1dbee
--- /dev/null
+++ b/retiolum/bin/tinc
@@ -0,0 +1,18 @@
+#! /bin/sh
+#
+set -euf
+
+init() {
+ f=/tmp/retiolum.GraphDumpFile
+ if ! test -f $f; then
+ touch $f &&
+ chown -v tincd: $f
+ fi
+
+ modprobe -v tun
+}
+
+if init; then
+ exec tincd --user=tincd --net=retiolum "$@"
+fi
+
diff --git a/retiolum/bin/tinc2json b/retiolum/bin/tinc2json
new file mode 120000
index 00000000..31bd0775
--- /dev/null
+++ b/retiolum/bin/tinc2json
@@ -0,0 +1 @@
+../scripts/adv_graphgen/tinc_stats/Log2JSON.py \ No newline at end of file
diff --git a/retiolum/bin/update-retiolum-hosts b/retiolum/bin/update-retiolum-hosts
new file mode 100755
index 00000000..eb57af3f
--- /dev/null
+++ b/retiolum/bin/update-retiolum-hosts
@@ -0,0 +1,14 @@
+#! /bin/sh
+set -euf
+
+if test "${nosudo-false}" != true -a `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo "$0" "$@"
+ exit 23 # go to hell
+fi
+
+# cd //retiolum
+cd $(dirname $(readlink -f $0))/..
+
+mkdir -p /etc/tinc/retiolum/hosts
+rsync -va -I --delete hosts/ /etc/tinc/retiolum/hosts/
diff --git a/retiolum/bin/update_tinc_hosts b/retiolum/bin/update_tinc_hosts
new file mode 100755
index 00000000..ce1be497
--- /dev/null
+++ b/retiolum/bin/update_tinc_hosts
@@ -0,0 +1,56 @@
+#! /bin/sh
+set -euf
+
+if test "${nosudo-false}" != true -a `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo "$0" "$@"
+ exit 23 # go to hell
+fi
+
+list_hosts="$(
+ basename="`readlink -f "$0"`"
+ bindir="`dirname "$basename"`"
+ echo "$bindir/hosts"
+)"
+hosts() { "$list_hosts"; }
+
+hosts="${hosts-/etc/hosts}"
+
+bs='# BEGIN OF RETIOLUM'
+es='# END OF RETIOLUM'
+
+case "${*-I am made of stupid}" in
+ (start|restart)
+ hosts | egrep "^(10|42)" | $0 replace magic
+ ;;
+ (stop)
+ $0 clear magic
+ ;;
+ ('print magic')
+ echo "$bs"
+ cat
+ echo "$es"
+ ;;
+ ('create magic')
+ $0 has magic || $0 print magic >> $hosts < /dev/null
+ $0 start
+ ;;
+ ('destroy magic')
+ if $0 has magic; then
+ cache="`cat $hosts`"
+ echo "$cache" | sed "/^$bs$/,/^$es$/d" > $hosts
+ fi
+ ;;
+ ('has magic')
+ grep -q "^$bs$" $hosts && grep -q "^$es$" $hosts
+ ;;
+ ('replace magic')
+ $0 destroy magic && $0 print magic >> $hosts
+ ;;
+ ('clear magic')
+ $0 replace magic < /dev/null
+ ;;
+ (*)
+ echo 'Error 1: You are made of stupid!' >&2
+ exit 23
+esac
diff --git a/retiolum/doc/cronjob b/retiolum/doc/cronjob
new file mode 100644
index 00000000..3f640311
--- /dev/null
+++ b/retiolum/doc/cronjob
@@ -0,0 +1,7 @@
+cron-eintrag fuer automatisches hosts-update
+
+ueberschreibt keine bearbeitete host-dateien
+if ping -c 1 euer.krebsco.de -W 5 &>/dev/null; then (curl http://euer.krebsco.de/retiolum/hosts.tar.gz | tar xzk -C /etc/tinc/retiolum/hosts/);fi
+
+ueberschreibt bearbeitete hostdateien
+if ping -c 1 euer.krebsco.de -W 5 &>/dev/null; then (curl http://euer.krebsco.de/retiolum/hosts.tar.gz | tar xz -C /etc/tinc/retiolum/hosts/);fi
diff --git a/retiolum/doc/device.c b/retiolum/doc/device.c
new file mode 100644
index 00000000..7ffe51dd
--- /dev/null
+++ b/retiolum/doc/device.c
@@ -0,0 +1,37 @@
+#include "system.h"
+#include "conf.h"
+#include "logger.h"
+#include "net.h"
+#include "route.h"
+#include "utils.h"
+#include "xalloc.h"
+
+int device_fd = -1;
+char *device = NULL;
+char *iface = NULL;
+
+
+bool setup_device(void) {
+ device = xstrdup("null");
+ iface = xstrdup("null");
+ device_fd = -1;
+
+ return true;
+}
+
+void close_device(void) {
+ free(device);
+ free(iface);
+}
+
+bool read_packet(vpn_packet_t *packet) {
+
+ return true;
+}
+
+bool write_packet(vpn_packet_t *packet) {
+ return true;
+}
+
+void dump_device_stats(void) {
+}
diff --git a/retiolum/doc/git_checkout_only_hosts b/retiolum/doc/git_checkout_only_hosts
new file mode 100644
index 00000000..2286169d
--- /dev/null
+++ b/retiolum/doc/git_checkout_only_hosts
@@ -0,0 +1,11 @@
+# Reference
+http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/
+
+# Code
+
+ git init painload
+ cd painload
+ git remote add -f origin https://github.com/krebscode/painload.git
+ git config core.sparsecheckout true
+ echo retiolum/hosts/ >> .git/info/sparse-checkout
+ git pull origin master
diff --git a/retiolum/doc/highping b/retiolum/doc/highping
new file mode 100644
index 00000000..e3d9a47c
--- /dev/null
+++ b/retiolum/doc/highping
@@ -0,0 +1,2 @@
+in der tinc.conf darf nicht zu einem Host connectet werden der einen DNS namen benutzt.
+wenn ein nicht erreichbarer DNS name versucht wird zu erreichen pausiert tinc jedesmal alle transfers bis der DNS-Request einen Timeout hat.
diff --git a/retiolum/doc/install_dotcloud b/retiolum/doc/install_dotcloud
new file mode 100644
index 00000000..ea976c55
--- /dev/null
+++ b/retiolum/doc/install_dotcloud
@@ -0,0 +1,85 @@
+The Dotcloud provided by duostack.com is a application development platform
+for simple deployment of your stuff.
+
+It also provides an ssh-interface via:
+<code>
+ dotcloud ssh project.module
+</code>
+
+to be able to use it without the hassle of going through the api, you will
+need to create an own dsa-key for ssh to use and deploy this public key on
+the machine
+<code>
+ ssh-keygen -t dsa -f dotcloud_project.dss
+ cat dotcloud_project.dss.pub (copy the contents to the dotclouds
+ ~/.ssh/authorized_keys2)
+</code>
+find your dotcloud host ip via
+<code>
+ dotcloud info project.module
+</code>
+
+You will gain a user shell with
+<code>
+ ssh dotcloud@module.project -p 5960
+</code>
+we will need to build some stuff in order to get a working copy of tinc.
+Everything needs to be done in userspace.
+<code>
+ mkdir build
+ cd build
+ curl http://www.openssl.org/source/openssl-1.0.0d.tar.gz | tar xz
+ cd openssl-1.0.0d
+ ./config --prefix=$HOME/usr -fPIC
+ make install
+ cp lib* $HOME/usr/lib
+ cd ..
+
+ curl http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz | tar xz
+ cd lzo-2.04
+ ./configure --prefix=$HOME/usr
+
+ curl http://zlib.net/zlib-1.2.5.tar.gz | tar xz
+ cd zlib-1.2.5/
+ ./configure --prefix=$HOME/usr
+ make install
+</code>
+before building we need to patch the tinc daemon to run without the need
+for a tun device.
+
+tutorial is here:
+https://hackerspace.be/TincVPN
+<code>
+
+ curl http://www.tinc-vpn.org/packages/tinc-1.0.14.tar.gz | tar xz
+ cd tinc-1.0.14
+ #replace the device.c with the patched (empty) one from the webpage
+ ./configure --prefix=$HOME/usr --sysconfdir=$HOME/etc \
+ --localstatedir=$HOME/var --with-openssl=`pwd`/../openssl-1.0.0d/ \
+ --with-openssl-lib=`pwd`/../openssl-1.0.0d/ \
+ --with-zlib-include=$HOME/usr/include --with-zlib-lib=$HOME/usr/lib
+ make
+ make install
+ mkdir ~/etc
+ mkdir -p ~/var/run
+ cd ~/painload/retiolum/scripts/tinc_setup
+ ./install cloudkrebs 10.7.7.221
+</code>
+
+be sure to fix the portnumber in the generated host file and add your own
+address in hosts/cloudkrebs:
+<code>
+ Address = my.public.address
+ Port = 1655
+
+ PUBKEY
+</code>
+
+also write the right in tinc.conf:
+<code>
+ Name = cloudkrebs
+
+ Mode = switch
+ #device = ...
+ # no device :)
+</code>
diff --git a/retiolum/doc/install_no.de b/retiolum/doc/install_no.de
new file mode 100644
index 00000000..69fecc61
--- /dev/null
+++ b/retiolum/doc/install_no.de
@@ -0,0 +1,16 @@
+ok, i tried to just do the same step i did in the other cloud service, but
+it failed when trying to include tunnel headers.this is what to do:
+
+./configure
+./configure --prefix=$HOME/usr --sysconfdir=$HOME/etc --disable-lzo --disable-zlib --localstatedir=$HOME/var
+# add PATH_MAX to conf.c
+
+Add to your own path:
+$PATH:/home/node/usr/sbin/:/home/node/painload/modules/retiolum/bin/
+
+patch the install paths in modules/retiolum/scripts/tinc_setup/krebs
+
+update the write_channel script with the correct path
+
+mkdir -p ~/var/run
+
diff --git a/retiolum/doc/routing/ip-ranges b/retiolum/doc/routing/ip-ranges
new file mode 100644
index 00000000..06f23e4e
--- /dev/null
+++ b/retiolum/doc/routing/ip-ranges
@@ -0,0 +1,5 @@
+youtube
+ 209.85.0.0/16
+ 208.65.0.0/16
+
+
diff --git a/retiolum/doc/routing/tun b/retiolum/doc/routing/tun
new file mode 100644
index 00000000..a83ffc27
--- /dev/null
+++ b/retiolum/doc/routing/tun
@@ -0,0 +1,30 @@
+tunneling:
+ovpn relevant fixes:
+
+ -up /etc/openvpn/update-resolv-conf
+ -down /etc/openvpn/update-resolv-conf
+ +#up /etc/openvpn/update-resolv-conf
+ +#down /etc/openvpn/update-resolv-conf
+
+ +route-nopull
+ -redirect-gateway $def1
+ -dev tun
+ +dev $(your interfacename here)
+ +dev-type tun
+
+ -auth-user-pass
+ +auth-user-pass $(your openvpn user_pass_file here)
+
+normal firewall stuff:
+ shorewall:
+ in /etc/shorewall/interfaces
+ +loc $(interfacename) detect tcpflags,nosmurfs,routefilter,logmartians
+
+ip+iptables
+ iptables --table nat -A POSTROUTING -o $(your interfacename here) -j MASQUERADE
+ ip route add table $(interfacename) via $(route -n | grep $(interfacename) | grep 0.0.0.0 | awk '{print $1}') dev $(interfacename)
+ ip rule add $(your rule spec here) table $(interfacename)
+
+
+
+
diff --git a/retiolum/hosts/Discordius b/retiolum/hosts/Discordius
new file mode 100644
index 00000000..561b28ca
--- /dev/null
+++ b/retiolum/hosts/Discordius
@@ -0,0 +1,11 @@
+Subnet = 10.243.144.246
+Subnet = 42:017a:4584:17e1:685a:3991:6533:067b
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsOoWkyydyfW9ml7SBV8d+qXU8E1c4l0vEpdBnmOouZozo1bzzkH3
+bLn2DkZaOLCqVUC1twbeGi2a7tXHh4dLvkIcT38V3XbEwxHhMn7enpKr79GO/VFf
+Lu8t5dLbmPFFTOEeC54ke8X4MdlMrUMuXiGspnl/vc1NBSJIVECl6zdqvZt/UTWA
+vI7evk3F+Tf5dPATqSMdxE5506i2y/W6obwYwaXdPbyBsAQkgdTjfVUe2u0GKfld
+/THprmZYTwlBEZ3YAf12OdfO1aRsDpbogpZs/rcnebScDj7myzh7FkLHdH9nIfxg
+dfGxSBV7kRMwQmgfKjp/yETPjvRz0OMZoQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/Lassulus b/retiolum/hosts/Lassulus
new file mode 100644
index 00000000..be9782b1
--- /dev/null
+++ b/retiolum/hosts/Lassulus
@@ -0,0 +1,10 @@
+Subnet = 42:0:0:0:0:0:0:dea7/128
+Subnet = 10.243.0.2/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsj1PCibKOfF68gmFQ+wwyfhUWpqKqpznrJX1dZ+daae7l7nBHvsE
+H0QwkiMmk3aZy1beq3quM6gX13aT+/wMfWnLyuvT11T5C9JEf/IS91STpM2BRN+R
++P/DhbuDcW4UsdEe6uwQDGEJbXRN5ZA7GI0bmcYcwHJ9SQmW5v7P9Z3oZ+09hMD+
+1cZ3HkPN7weSdMLMPpUpmzCsI92cXGW0xRC4iBEt1ZeBwjkLCRsBFBGcUMuKWwVa
+9sovca0q3DUar+kikEKVrVy26rZUlGuBLobMetDGioSawWkRSxVlfZvTHjAK5JzU
+O6y6hj0yQ1sp6W2JjU8ntDHf63aM71dB9QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/Styx b/retiolum/hosts/Styx
new file mode 100644
index 00000000..fad45316
--- /dev/null
+++ b/retiolum/hosts/Styx
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.42/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4jbOi+HZIGOGNm4aBSwnq4m3Vg3IXHmYUbJx1AzP4a/yvEgswfk6
+MP5FXvoY/hZ0NQ0IRzbbJxGbcUdulz0WSjX1C+8uQUZstz+lvYZ4FeCXcdE5cuFM
+ROKAbA4qxO3WOFhPAs4G+K6srDqswmmBSfgPAfOBexEZxHweoBQLOYKUPnBCWf5q
+I1gKWgMVWv6KY/pgYxloarycb8gEd2GsNZcNwoNhRd2G/Tn6idh1qRBI96eaasbV
+P24FEVkPVFVgIGrvFZCICCeQzA4g+Sn4TmgxnTWLQxG4hAHOZQX/ld8u7NHTU9Qm
+PwmjESwfas9Z8UjknrbcaZvuqKrnMp7JwwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ThinkArmageddon b/retiolum/hosts/ThinkArmageddon
new file mode 100644
index 00000000..e51e1c92
--- /dev/null
+++ b/retiolum/hosts/ThinkArmageddon
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.137/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1EAiyBWICkyB1zHE31fHSbGR1nJJmXSfnrqm9yXRZSGweIKrbsof
+QVcRzM4vsFBRUMBeKW7fzlGcvgXULFRnGelvEl4GRiBMO9odBlBI3t8CjZW7X2N7
+JqCMkB+CRuiHbNYQdRFTozQEfPq+DNh8accD5LjUM6gF0dKUdby5qNeHCfZSxU4v
+YZDRqq/haO4up6m8/S6YhnHPOSaIAu7R7hFaUeB/FPT+s5irKk6WtAiWnIdXb22q
+0zxT4+t9sWFb4V9u/MImggYQVWjk+TfF5KpihBOvExEQsSR8JJcRUJAtN4W0w2Pc
+S4/j9ArKcBj5Wf2qHcJMN5MbwUFW1oMkGwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/UTART b/retiolum/hosts/UTART
new file mode 100644
index 00000000..3c8628cf
--- /dev/null
+++ b/retiolum/hosts/UTART
@@ -0,0 +1,9 @@
+Subnet = 42.227.239.205/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1tFgR6xxNZavtG44QEAEzKQixJqO9MuO5hUcklH87Sml+Mz+Ptz/
+r8Vhmvc1NhL0d8h1VJSrzjAyYuBR0LKSGRYxHby/M9AqBjUHUhDM83ogV/CbSifs
+TlBcKuvPkGVALN6LYcPXjzKzBI7X1ictqts9K3CoCWgjRld63noczvNnwVdHNawX
+ckQdjzxMAgwtJW0hWfDr1Uhq3sVEFnHLzFJuLsnc6gDzKvP/ETQ6KINv43B9UerS
+HzFK3ntViohW4K/p6i4gBNxFfYnuNLqnY+O/hc0/fFdKE36eLD8ngPURo3/As6Le
+KlPEMBwIIJQpS7GP4BIUK/qPE9J7McU6wQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ach b/retiolum/hosts/ach
new file mode 100644
index 00000000..700ad7ae
--- /dev/null
+++ b/retiolum/hosts/ach
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.100
+Subnet = 42:335b:5e83:d8ef:fdf0:d921:22c8:b15d/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAxvRxan/8TtgkqsGCZ26jd+Nuv5tL0Nab2jbKVZa0iwtjIyBlF4cF
+wR2H1ypdzqT5hHGVzE2T1QjBqYO1cIJ4cu0wfCbJSp9YtmK9Tm+TK/bz9LNj/RYj
+e27ixFVoeYFU7fF2kNG5g66u/xspGnulRFzqNXXqh6Jy0X6eJJmvo8wniSHxcMoc
+gyS7kpwDTcoYlnej6+tsGILVuZ6bSWuVr+kbdHp0rUGDXtNDAHW4WDtXRARFLmub
+QdyxtBGQXB8n4XmdIlpuVbvyceBAId4SAcky6pIC4VCbvSJ5pDrL9+u07r24JkIz
+MAs1gTh4riA3e3IbII8l8iUJ2x9Zlf6+vQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/air b/retiolum/hosts/air
new file mode 100644
index 00000000..f27106f0
--- /dev/null
+++ b/retiolum/hosts/air
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.99
+Subnet = 42:32d7:b589:8ae8:57a5:4cde:f49e:851d/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1yNqMyy9C1O031M518kzLYLh+Ox0D2r9UgVSSb9OgpQ85ZJgl7Kb
+SUzlZLbC9CX4O+PmtWvZwtPfLjua9VbVOtUJTB6zTB9Oqe4hTmX0oKIgheGf1rKS
+ylOaLfSz7PaPR3zGms17F4ovLDUBG2rpOyoHJM54T9LyJbPny/t7v/fjAFqu6atK
+1RgER3j3s5oPaRPw0pYR0kiGXayZRL6q7Qc6AXMlMi22sdRI9e1YCMCyC4u1oU6U
+grw7khyPWoEaue9B7fKfG5PixRHHlrsVDdwXEVvH87+/X2IU3H3C1/pslenAQ98i
+qGNJOl2eJ9FHInQjI1cDMgFURcT6i8mGpQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/alarmpi b/retiolum/hosts/alarmpi
new file mode 100644
index 00000000..205b0d83
--- /dev/null
+++ b/retiolum/hosts/alarmpi
@@ -0,0 +1,11 @@
+Subnet = 10.243.124.187
+Subnet = 42:2de9:fab6:7460:2fee:9199:fa1d:70ea
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAunQOFP1mnEmsmnMYjCwbWdbGe0/hHQs2bxIdwO1RXngXgw/TBBhN
+Xlp75LzPiT0ELF5WBPVclqskT+bl+FOOITH9XDkYzm22jzeLHq3bs3YiZhwzidkO
+Xhq5pwGY4HL4o3SfFtfOHse688qqLXefoc9CfyAIKMCRRAxlzpqNVuZEg1eUcuUJ
+z6gugJj+YyA4V3JGq7GuJDiPPOMrGel0rITMlWtYYtm0jf6deYBPjo+ZogDESlez
+tBmPKNCXynSxb6cV39StUsbUQbLvHgPBrA01T+Hw1DV5eHmWoycvD4IfJqXdfMbc
+BOqRHOlErXGTG5m2EUoU0VSj75zl06gW6wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/albi10 b/retiolum/hosts/albi10
new file mode 100644
index 00000000..9bcca7cc
--- /dev/null
+++ b/retiolum/hosts/albi10
@@ -0,0 +1,11 @@
+Address = 74.122.198.15
+Subnet = 10.243.0.10
+Subnet = 42:aaa9:4ba3:8c43:bdd8:2cc8:29a0:e8e6/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0Jz5rQ7NpIQWwhDsrZHlJYAnC1k1onl2ln/6CJbdV9t3gG2hlx/9
+0SEARo6sq9fftyzzZd3iY4WK7+zRXJFXHsLmDa6mq8Mme7Yv+YHZoHPTm9c3tN3v
+laiV/qAdoi/sv43DCo7JywI2lTW1pPxuitXuud2ajd7GXuCoRqFRqLtaURorVKkW
+4j9UGpMKrEa+CV9wP5jZ57RSPQ7aMq8D4GiMqKDgUeCZnvXxpYWDOEdGNlpuUcWt
+/erC6u50/vnjUkkHx66OmkZe5AX5MmwNp2q4zC4sTh/BRhqk27AmNl5wbp0kL7/B
+hg+r0F8ckrdLc21sSU36lUIeeFa/S+A06QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/albi7 b/retiolum/hosts/albi7
new file mode 100644
index 00000000..0a21107e
--- /dev/null
+++ b/retiolum/hosts/albi7
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.7/32
+Subnet = 42:6c61:6962:6137:626c:3769:000a/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA+SwdWv1anjIaKSnvel9d23tgqye5RguIVfgMnjpMsqOYpFklLIa8
+4wREhVvpiArnIsoTXbKzdeCFgaAbMS6aQ701Pyv7QriVy8m3iUlgqvB/znogxN8U
+z1fqL0jAHLkQkoyZ2a6mUgHpByvUqZNcq6istYLwGnXO3JQrS7U54hHPpXbxwFY5
+0/Wli9OueG4fWaZ9skDa2Faq4c/Lngku+Iv1gBBgII1EDSsgedNWw3YBTmHDFNTZ
+SsORj2ho5nQgdvw42qEINbxpU01jK8XB+jmVEO+ixZZCsWlOeCjl9Zym4MZDRePg
+euTLTbgs/809ElM8V+EzRKSPNR2k6FrBXwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/alphalabs b/retiolum/hosts/alphalabs
new file mode 100644
index 00000000..e5f98d69
--- /dev/null
+++ b/retiolum/hosts/alphalabs
@@ -0,0 +1,10 @@
+Subnet = 42:0:0:0:0:0:0:a1fa/128
+Subnet = 10.243.1.10/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvUAbMmmOFn+4kOvJAvmi0R/XCQa1YBlkjUvC6Pmt0Q8gV1DodXjB
+DgwP8yhLcxaVy2Hk82aJvNTUrfMeB2sdt1RJHQiEPQkHthdp8Spm0Px4uTiMjmFB
+ev91xi00eCCGIKsXdh/qso1K7EDHt9MEVHOvSlkawWzoyJ6AaHStW1ElwDdGjZpl
+0YWrhx4Gk5X7pCp3LKkQJFfGtqoqGOVg2JjqK3qMsAdRo6QvYDqjFzARed/D0k55
+kcKXjBJAVxoU/CqGfS/Lr0fL8tdYgXaAXvPO9dbr1t0KyOUY2KRNBePeSvRp/etb
+H0LBPsO9F7PQiPI3DBoWCYgsuj/hBXapvwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/bergwerk b/retiolum/hosts/bergwerk
new file mode 100644
index 00000000..89aa7ca5
--- /dev/null
+++ b/retiolum/hosts/bergwerk
@@ -0,0 +1,11 @@
+Subnet = 42:a7ff:3577:0526:3986:650f:c175:30a5/128
+Subnet = 10.243.0.51/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuCX8FVI6xQepPf0goaErA35grHcBNbYvzKIXzEIOEuxiVLX4FXoY
+aHdUaz9Z2/rECuDQCVzke3TLZgBn9ai7ruT5U077h0q69pS/vI/Hr2e3s50tQVcu
+eD4DuudxIZ+DlMSeEaYed5OcH7C7KGL8Dg/2kzoTUjFqG2zwfHft8/Yszkwzt7/W
+FwIkekkPTY+dpLVlFBKQnqXtcB5FvgL55MwhLXbQRWIqJnOuMdqzp4KwHku2PVs6
+0LW8saAzxTzIyEjJGd6rT+zDirhKmmWd/08YhgJ00XiYNkrFFyJPwtF/0CISTjBO
+Uy0jafckZyAleQCzhg2753fEh8+n8NARNQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/box b/retiolum/hosts/box
new file mode 100644
index 00000000..e02f8ca6
--- /dev/null
+++ b/retiolum/hosts/box
@@ -0,0 +1,10 @@
+Subnet = 10.243.43.43
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvUMfRZOPb/zKvALZTyxKQuzowqqJ/HW2lm/RIOKL2uoTUgVX1DJB
+fCLf66e2fHnjnStXuaMDNs1kq2gi4EyK5Q50RxVBq7XayXYqfnFwzTE+Iqape542
+vYSWKLdrxljln8a2EYU7njtcWkTpW+cJIwSHEUkDLAowF87ElQ0gBmyX4p107pow
+jg7zcYierVdQXkI7mO4g2zWsywfhwscbu5hdCp1Fw3wHFDatgyhPj1pJruKe+O3c
+AebF5yQOAsCxAk8ZcwGLmmF5xK7lAeux2Qzu1B4Pkfxi97g1GVLnX+so7PR+vvkQ
++OMzQGIWXtaOqov5q2O1N5RJzng/kCjC/QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/c2ft b/retiolum/hosts/c2ft
new file mode 100644
index 00000000..8ce0539e
--- /dev/null
+++ b/retiolum/hosts/c2ft
@@ -0,0 +1,10 @@
+Subnet = 42:e674:8a82:7fe4:fa51:d305:192e:846b/128
+Subnet = 42.221.17.214/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqS+nvuQnAlhsGHgjKRz0nq2nj9HWwzrA96xnng6UCmkTpFyprM7b
+20vQ5wqcHFAbuZh1dOOb9G2qqsZYE6V1452YLZZLMsnxiJD8kSorHrF6kJid5JjH
+xyyqSvkXaHClQItVjo7rIn5P/Tl+BMt64KaPxpu/4GBVHkCE1apLtaVRnEq5t2DG
+htZuUqzhuLN4TQiSVC++7qY1UQotjLbAQpYxf67np5sKWMOqg5UA+ghuLeO9jpqL
+qKoh2TMzotGwlYBMXVA0jJtQu5Sq/IWKWAyk9zca2LT0W0ZZWYiTl+Ai5urbJgCV
+GvWeJCoBKteIKUHRVNK1RLDFl6/ITOu9XQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/c2fthome b/retiolum/hosts/c2fthome
new file mode 100644
index 00000000..a8eaabc9
--- /dev/null
+++ b/retiolum/hosts/c2fthome
@@ -0,0 +1,10 @@
+Address = samularity.mine.nu
+Subnet = 42.44.64.126/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4ADumWibheOOocw3diK27ww4xfyptLZzlPcih5BJFUPOljXN33th
+1rbFwBr0QyRSad5U+/w1qlTCCqadjNdu+0RPGxbCrEqE3bUlrbES3Fw1ZtyIeuRH
+v6yTQuOzJXyceGGYJpK4JjFgFOggSH35dURDa1+x3pJECyWUAVDknWE5CS7HNufW
+bcREh18LoTUi7SGPeWauDLvVb/eeuDNJkoFj+HWpNqupFXpXUD7vQ+FBTtKO9FZu
+vd/QGYv7gkRGQfma3+2XW9fWgIfE1oS0qf4UfbycaEKMFS5Tn7li3tzCcH9Da4iB
+SsyWm1Hg1UYXccBdDYWYo+vdG59hIjmh8wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/casino b/retiolum/hosts/casino
new file mode 100644
index 00000000..e35691c3
--- /dev/null
+++ b/retiolum/hosts/casino
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.233
+Subnet = 42:3c1f:ea16:e181:7ab2:c51a:8892:7fb7/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzmZ7x4HVpW8RC3ZkwmNKY/6VGlMKQbpBQtmrUzV1XFxKWZRhH3VI
+NOqlfVpTEaRTorht7R8F1aw9psDDUcg7yuQFcUdoXxBJxwbc1h0FKyZZr5kAIfpS
+ObE0rbBRRqJVAWgztpQAalWC95D73y/+tpHnQ+LRFq9IWeX5+QobaSym1oG4Y0Jz
+STSbw2ksjH8CuWHS5TjZr50Nyx6cH99HABDnadxhLBtQriJPSYRYdWyp7tYrW3jd
+As28mxkyFj0sFV3IJ/bYfZD9KSGg1KjQu+c73xKOBUhNtSHFjUzN5myYGd/nWCw8
+0PUReLrWC1ZHYPzqiwelTHcNJ3UcojpO9wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/cat1 b/retiolum/hosts/cat1
new file mode 100644
index 00000000..1a9dd2fe
--- /dev/null
+++ b/retiolum/hosts/cat1
@@ -0,0 +1,11 @@
+Subnet = 10.243.244.32
+Subnet = 42:86cf:a3fb:16b4:edbb:df13:a7a9:cd61
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyjmB9IyBYexahK+fxSzVNrVxMXroXMc4Fyx16+XOt9hugn24Suht
+06kQwwbpkwjWfIEONzr0UPAbsOWG/Qj3w+dqiC5iqHZWFW/NdBgwunF5+INnEamj
+eIIqei1230C/NNpTph9u3UsT+ZgZnc+r4usEmTpZslvtkVwg20jwT4w3Vq1ws1Jc
+8Ccy8vk4FjgBP88zuvqzjBtTGQMrDgBd68XlGVKOhrvxCebHknbcHWpUz4cN8TX7
+bRNpSUTCSGd2taY6g4cUxiegbTeK2LDVvW/6XtISvJqVVllLD/p661W6gRUlkspv
+phLJc+zNLRxOC624JRivt+Ag5iBI4YP4SQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/cband b/retiolum/hosts/cband
new file mode 100644
index 00000000..51c51e9c
--- /dev/null
+++ b/retiolum/hosts/cband
@@ -0,0 +1,11 @@
+Subnet = 10.243.7.76
+Subnet = 42:c293:090f:df44:0926:c7af:5012:7cd8
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA11kwqXkkDRmxmoZNFDqtUsxK6d/HzTdFC/v1V3fttePuYFiEOhZl
+rLBS3+Eei4CsQrOwnaRBhHdnoOZGEdxJmq3YXDWGoVAn4bEgommCddzssVzWtVMf
+hIntuCExczEMIY+MGzM3QupYxUgRRVjFtvxoC9kKOSlaq0BhkdJiWygzN/NUfqpv
+HgDufoAcORLQInTpmQYEkZO+XmXejcCY/C+VD0MENqj3SijGw9tm2YmInwSwZnwX
+Zjh2xn96QbV9O7bpfGHcLxWhsUyyRC46knbbBXuAdbDsa2TUdzT5D7nb/TLfP412
+agIhk+cwFM24y/ChHdfoUBakKF4wZI3l4wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/cd b/retiolum/hosts/cd
new file mode 100644
index 00000000..3cdd9c0e
--- /dev/null
+++ b/retiolum/hosts/cd
@@ -0,0 +1,12 @@
+Address = 162.219.5.183
+Subnet = 10.243.113.222
+Subnet = 42:4522:25f8:36bb:8ccb:0150:231a:2af3
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAob/6umTaEa8jtU79nYzHa6vyEjFtg3ATh7uTvafmE0b2845Tf2hC
+IpSBw//FOnkq2sUvj9IymMnMFBcPq6VZisvXq2B25BJZn16X8PJmkXptCckDoqVj
+qRjg/H4q8aryp74dGYDp4ibBKyhN/BP3N5DXH4vkj4A8qHuekJWQD7wWcXj6Jcx5
+otDsj5LZYh0J8LJOXQYxmcadrZoLnkL6s3SkWbgexkJ2l5bhYSVBOEtjKQ8Eq1k3
+Iyao+iyaffUEhcaiwRBXovt77B8RYYY2DjKKVuR4LCxIbB7NKF03tETjensLBw2t
+9sV7J5zBGDGbDIOliGBfRABBBlopgaOAsQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/chinaman b/retiolum/hosts/chinaman
new file mode 100644
index 00000000..60ea744e
--- /dev/null
+++ b/retiolum/hosts/chinaman
@@ -0,0 +1,11 @@
+Subnet = 10.243.64.163
+Subnet = 42:d3ef:d47b:531c:4314:ca07:a226:4064
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyVYuNcqYublIdsVS6DEnfCoxQONH8keQai2wyJn4fIvCHlOY/nH1
+l0IsGAa6zsBrg+EMfPUr+0Cw/+X6UcYLuHS8Zapv30Ye+BNrVUd16Vom0rCrcVKB
+qweYoQGQPIWPNR5abVXwbP1zBuygzmBmEUFBzmYHFaRIMihqOii5wgBU2E9qaSs3
+wjT3ujARHYVoDRO6ifyzIqZ/F3DJ91j+FQkNfsgk8G2sV4h9WX4I13niwdzxGFHr
+lUZIt1OKjhfgYGqBoULZ6g7Wk/aNwfbzETvesjiVr92fvR6I/QsjZK9A4v3mAyQ4
+p2yYCmOLU2IV/Q9mFhX0Y40lq0hpKksRkwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/chinapi b/retiolum/hosts/chinapi
new file mode 100644
index 00000000..3b24b28b
--- /dev/null
+++ b/retiolum/hosts/chinapi
@@ -0,0 +1,11 @@
+Subnet = 10.243.189.198
+Subnet = 42:a529:67cf:a0ce:afa2:17b8:f73c:ced7
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3caftivmAPf5imcvrQpATIk6dkEU9w0IeiCKyuo4Tq0hRPDghwR2
+N094Ls58GxjdGfdScUgmSXo/o85J9OFRIX38SmMhRZkZEIsPqF2tXflLxe0cTZVl
+xZYxIsTEAfEvM0eJDSe5AkgCeArYTS1tZ1hCBvn7E4EkdAhUH3OSQFxJgFxpNGr9
+JuxCHhxHyV/8OC3BfYKyebof/rvjKc1zsQP/6pCZZchm1QYyjvvdaYgBqymn7Jw8
+J8Ni9FHu4cWL61h79Gh1ZT8FLeXh5ddEcFRzpPK/WNmFV4idj3q1slZ5v9xwtMAW
+z1mUFMt2XkYRXVvO9OkWhkQUmrToj8o1awIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/cloudkrebs b/retiolum/hosts/cloudkrebs
new file mode 100644
index 00000000..9ad4f0ac
--- /dev/null
+++ b/retiolum/hosts/cloudkrebs
@@ -0,0 +1,12 @@
+Address = 162.219.5.151
+Subnet = 10.243.113.76
+Subnet = 42:20c5:9d2e:7d95:c5d6:26f6:b4b9:09a5
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2MYdxEO0uV2LmNP/8XKinT7Pn9pO7T7aEtAaaoF9q2/qXV0JWeBS
+UTKvK7qUpHr+x6a1DK7Ya4EJUjmdDqm5eb63YtiqWAQo3AXYV2yr7LoyrhbfxzEv
+2swnHx+9x1os8eAnwZqouQBTa+TL6E9gIXtfSfjvBnQlqhmUqfXV71NpKFDxInwq
+rKb6W37RudM5Mq1+cV49m1a9Z+kNqHwakryhIDDXo4cXNMpPaNuxOdY+VY6txm1d
+naz3djp/LIYy//Mkg0fRogQDTL2cErpPLpPa4A/TPvHDZtQVzF28fg01s9SvNlA2
+oFP2VHnZgKJHI0h3D+LM9f1NIhaeGz3NpwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/darth b/retiolum/hosts/darth
new file mode 100644
index 00000000..bcabc5f5
--- /dev/null
+++ b/retiolum/hosts/darth
@@ -0,0 +1,12 @@
+Subnet = 10.243.0.84
+Subnet = 42:ff6b:5f0b:460d:2cee:4d05:73f7:5566/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyx5x0jzfhex8EBSFLlOIkP1yJ5cSPLQ3hpPMvN0J7QdVbypU6a9C
+fzGpzBph1sRwXnaqCMe0og5VT3EdFtngbmm6t/CyMhBojkxMQI08m71JT5c07+1U
+OSSLXBXYHcN6cAEYEsvTiSuvP9RoAbUeQQbZryI4wpzzQ7ET1l7k/3eeXAwqRKR6
+xiqn/4597U09QYmllqfplJUBv2pIAIcFlm/KHvNTZGEZS83udfnECwDwgU63PMns
+38yiCpI79kagXyTOGCbkUatt0KNTzGNLAm0CyeFd1AdgUrj8fVg2jQLQlBrze+Gx
+jkphgkVEgMtVMTz8WKfz+Dro3jBfQstIjQIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/retiolum/hosts/destroy b/retiolum/hosts/destroy
new file mode 100644
index 00000000..8b5f7f5a
--- /dev/null
+++ b/retiolum/hosts/destroy
@@ -0,0 +1,11 @@
+Subnet = 42:9277:1f1e:7599:ae4b:7cca:b4a3:fe47/128
+Subnet = 10.243.0.31/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAofIF/j4ddJEG0sOJJNp6hVXqLpj9FPw6a1vLLqZsn/NuZi3QCZ/w
+xj1nIsQbc1TnPLluHhpn5kuvzb0lThqmPJvX2uXnbq7WH6OvRyN/FV/Gn40txdni
+MFWD53zGlAle1/Jdt+to/+0mvRP8U+dKuggemGljX2nrUxaJgVRVzynvkys5l6vZ
+2oMeO/LnFcAt9ZkMFoqDfKB/RPOqTD9k6Sz8xubVtasQ4ufpQl8Uv6zcYl1PnV7C
+9Pj5MMtQVtRRV8hljImqpERunU6ZsXhyqI9O/cVw9+QkWf7Qh5E0vUKTT9FISyTV
+nmQ9v8JGV2zPDVMmwP1ewyA1W9YhGiFd7QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/devstar b/retiolum/hosts/devstar
new file mode 100644
index 00000000..875f62e2
--- /dev/null
+++ b/retiolum/hosts/devstar
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.133
+Subnet = 42:2be0:92f5:3546:5f0f:8f22:6244:25f4/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwkkmkhGMnI0x5VIgdLwV2SvXO9Bw3Sy1U5AToZiG2dSB+OiwwLir
+JIrTHv4r73lMLROJjQhznq06VMmNviC82178H7/DZqgSqlGU7d9p1Okd5XCs6LI3
+eaL5mYTXFuA+PMHVvYqQ5fDQRQ4KoWmlSV65XUPejPlxtl3FXqOSHVuuBSbka+St
+qLyWLAh9d8AfWjxbAIv41fl6WOyw2IuDc05K36aT/TwzA3ykl+ekNObAjvpI0cxI
++d3j8H8JY5jDcg1hvWT06JqpUcTJRkWLL7BBdQvWySaBcET1Flfo8eYVqVQDK4kU
+XV/tA1ax7YPFBQ7Lh3Ru9nEC45Gv6R4HbwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/eigenserv b/retiolum/hosts/eigenserv
new file mode 100644
index 00000000..f5966794
--- /dev/null
+++ b/retiolum/hosts/eigenserv
@@ -0,0 +1,11 @@
+Subnet = 42:c9d8:ab9e:c7fe:43ff:0268:f862:42f7/128
+Subnet = 10.243.0.32/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyy060LWeo6Z+Kp2h5LtyMx+KGdxL9/WjWfc1yf/YZ8lhZutNb+Kd
+u9AHbnrqTRWRslP+toNiC55aJ/KlTBFQA5nBu2DC1KdG71AX5th7bRvUMfEAEG1+
+7MpcyuC8Owvleg/b4Ihr+/kQNbIPPhAraPJU780Oy173jnt+PCIYY+aTnEuO3UBh
+yt3oPhfwMa2ssPL8GfF3YL9Pvh4UEbUu1E7zSOqzCOzH3od5I/G/TjvfHl3u4tEr
+6kWHVqOYaKMJlqYvb7tnw7QjJNFhVneBJN6eMaWfcmTp2G9S+SwOppW3P4yRxrar
+GLWPgEU6to1wduAktecWU/oWambgXb/hUQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/euer b/retiolum/hosts/euer
new file mode 100644
index 00000000..d2240575
--- /dev/null
+++ b/retiolum/hosts/euer
@@ -0,0 +1,12 @@
+#Address = euer.krebsco.de
+Address = 84.23.67.119
+Subnet = 42:974a:3ecf:3c49:06c0:4cd1:3c6f:59d9/128
+Subnet = 10.243.0.95/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEArx2mZOPEfS8fvmQYSzWuMmNtfposJlctDfGVmhMVotaFIpIBcKuL
+dHZHI8BAStaM++DuqKv/QBjk9jF6BRAdZqHn98LHXR+VRJmFvgelEFe0uPvIRMe2
+IMzi9Ly0f0f5L90ulZBMkudl56nBcEPuG5ge9RLDINIX5nDVh0oQzvrwWaIiVuy/
+oKDFLaoxa3SSsCXbhnbP7ow37+xzvaVCFolu++yLHvinkCc5g3IUkBGwr3kXKHQ7
+J8oDuPgsDZ7d1kMPfzMtGI9xcq8GFeCmJsMAt86XsWD8t9ogQpVUi8NGjR4cbQSI
+TbE2iVBsdGLpxbGh833uy7fW5CCnK79DwwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/exile b/retiolum/hosts/exile
new file mode 100644
index 00000000..25d68ca4
--- /dev/null
+++ b/retiolum/hosts/exile
@@ -0,0 +1,9 @@
+Subnet = 42.116.243.248/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0H+DslKV6EDCZWBCJs+MFyvTR9Ej0yWthIHKzFrA4qI8rxskrGGP
+xhb16keQLPCAgBVVVmikh3pQVMq1K6ry5Of0uM7rU7crBzRfJ8zpGZXfYlBDFDAd
+Vg8wwDvEYsYCAKrZbYIKb88WR0mT7K47ipTbXd9utzmoWGa/SuGtPkYOigcWYMRN
+4QClPDLdICQvdohVvfd7/LXRNuwrWOJcmtLitTEZY9lo2hhv+ZKs7PBrmpTBhTMY
+N2Et69tVPQh1t7cljf3Esij5AUczv979C9Lvukj8Kb51Et0T9qcGAs/M3b64X7FO
+KjWVVQttj3AkjgLZ5OdYlm7uRRmYmKQ95wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/exitium_mobilis b/retiolum/hosts/exitium_mobilis
new file mode 100644
index 00000000..3b112a0f
--- /dev/null
+++ b/retiolum/hosts/exitium_mobilis
@@ -0,0 +1,10 @@
+Subnet = 42:0:0:0:0:0:0:AFFF/128
+Subnet = 42.127.75.187/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1zv7tkHIUxJX2FIFcfakvZZYuI3VH56nkQYlpTUzO9WscMF1BgoH
+WKOvHy9QzxAJgqmceroZKbV2PIws/PZgwk7vNGPmmZtzkTuNS+RXd2y1WwKTHpxT
+IZ5TKo9AGuU4dcMLAR2xheCJzTRNoxj4UrUgN1WkAqdKhN0Dysglfb+FuUiMdbop
+rbzsKhJZKnJOnS00Z9K7ZrTWkYQR6nhMuZ0EMggc+pa5NesHfIoeitXQxB7tz9M4
+6O7xE8ZkECdKXmRBGhSU2ghnCqiomDj9l6L6S6Ms8Q0ElPM78RTh1a32Euj9Ffob
+v4gQuzI0fUKe+pbm3VC6B+9awkdd8n1AzwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/filebitch b/retiolum/hosts/filebitch
new file mode 100644
index 00000000..64c88cb0
--- /dev/null
+++ b/retiolum/hosts/filebitch
@@ -0,0 +1,11 @@
+Subnet = 10.243.189.130
+Subnet = 42:c64e:011f:9755:31e1:c3e6:73c0:af2d
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2VjW30A3uQoo5QwbFTnl5fuGg81DZVu8HXmDwgEkhZYr5Xf3V5/d
+fmPlX1igzatWYX0OylFAY69r0V4dqeTubIf83sz1eqtpXjK4czG8A3wMHEXj5Pzs
+e1Qh8K4rHMEATc7Y/cwpQBi2THn2bhufqgaz94m8HrStCZcKCin3fDMbE01WHWX1
+KFqeBtUd7b9pWbXKlLBNpHTZoGxVQk0Hto9pxYzHecRsbQXykYk3Rw2tSuf0aH99
+oY0i3LjOb+f2oq2S4qVHqHZsMJfDVr+x2/LP1SIcc1lVTztWSSAzZEokE0/ejvXf
+wkquBVHXdl6LuzH+/V1I7OsaMhHShYu1LwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/filepimp b/retiolum/hosts/filepimp
new file mode 100644
index 00000000..c689c885
--- /dev/null
+++ b/retiolum/hosts/filepimp
@@ -0,0 +1,11 @@
+Subnet = 10.243.153.102
+Subnet = 42:4b0b:d990:55ba:8da8:630f:dc0e:aae0
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA43w+A1TMOfugZ/CVwilJn4c36wWSjihaeVe7suZD0DSscKBcbkGg
+3dTCSTnu6Qb9sYd2mKebKXLreO6nhEEoFGsRU0yw/1h8gl7mWYEdTifPfvM5EWwS
+wkN9dJ5njwIUSRyWH7QTsLkiRJVFN2UxEwrhAbo1FJ7yuhRgAKqKJSN4yPVViZwR
+oHyyobvm/i2J+XSiDI9MRo74vNjnDLvO7R6ErIrhOPP1bD9fx3u+UYUfgS0iCO3X
+UN0duBz/faRcl6IRytZOuHaIp30eJ4850ZK8RPz/Dqqj+USMFq60i0oMsuAi/ljB
+8b+eQBt6OXu4MSntxoR8Ja7ht+EOTDnBOwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/fuerkrebs b/retiolum/hosts/fuerkrebs
new file mode 100644
index 00000000..35bbcf18
--- /dev/null
+++ b/retiolum/hosts/fuerkrebs
@@ -0,0 +1,10 @@
+Subnet = 42:0f19:8a1e:7865:721b:2378:bef7:1159/128
+Subnet = 10.243.0.144/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1HoKqh7HvXCKybe2FNBI/wuOvkZuftL0/DDZfZtPlCRtdcOA4XFj
+hQng5+VE3NG0yKcRs59U8iHSeN9b7Is1YF4q0RtM9YQTDhvS/vfpHDq42ftjMs/e
+MIFvYBGr2WIOzOYPiACURRcaMmoAViqK2Bwda45jORPUGo1afibH9UcDs76lFuaI
+f3mUZvLlqdJEtG040WoT1douGWtUWkCB6/pVUgLAurncOz/XiSI3GFzkMUY+0pT6
+0G34AcYqvdQyxH3x0ebclFlfY2aPStf6bGMejcpRJm4M02xF809DVYlUL3mG6krF
+MdWP85dCQ4V/RL0HdZ9PEjlVhgNOF1aQowIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/geisha b/retiolum/hosts/geisha
new file mode 100644
index 00000000..6a3a2788
--- /dev/null
+++ b/retiolum/hosts/geisha
@@ -0,0 +1,11 @@
+Subnet = 10.243.175.29
+Subnet = 42:b6aa:9052:fffc:807b:4829:8756:860c
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0kVV9ezFx/kZ6GvSALhXODkWlwHSjdA5hBJ90bdNcILeltVa3FIv
+K2E+L6EG/jsETWKutxOk08+B/Z3p1SONgEksTNBdXx/Crww5PZGN/ocVSKZj61/N
+lCej/Jcu88a4/R7JHIiSMdmqRCGHnwnxRA0iDQZIunriUH83NqMBQk6Drkphr/9a
+5U8PhlqC5oSzZrg0uReRuBK86KmU03vp9/DndaLn18G835dtWRBQ2aEfIrrlaTPJ
+ZKN/0xYZJU3v8YJYPi+UeRSymecSNgFQg36v95r3s4j3trk+yXVzVwT347AZRm4a
+d/AHdk0+blXyUr5CFBsjA71cJfzqIIJJrwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/heidi b/retiolum/hosts/heidi
new file mode 100644
index 00000000..5ba59846
--- /dev/null
+++ b/retiolum/hosts/heidi
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.45
+Subnet = 42:7555:0ab6:6de2:e50a:a702:45b5:9fae/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3Mp0dxGooYuoh/f+V+gdfDoG3izloxsNIJT8jPxZUPR8GE+Sn/Yc
+bVfy7svy7AEyjQyxke5P58UpBB+D30XhO22Dr5mf9VGRcn6TYlM/u3FYxVNn+fhz
+iN5oHeRjvJg58z9pdH/kHOtAPnVVEmjOGZxVO786JZ1obtRJ5Mx4aOHEaab1aThR
+E7tcyT0xtPJfUARITVrLsFulGh0KaDb0bTADxBQiHSoRibCpraylOxF7tzbINqaX
+ogMfYooGLutlEQJfOYsbmoTJX0caSK+9Y4njqpwkAx14P2ME6hfdYPrp82TtpOS3
+kOY3HAVTnHEsTxM4wDS7et316S5/BuW5rQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/horreum_magnus b/retiolum/hosts/horreum_magnus
new file mode 100644
index 00000000..3019e9cf
--- /dev/null
+++ b/retiolum/hosts/horreum_magnus
@@ -0,0 +1,15 @@
+Subnet = 42:0:0:0:0:0:0:affe/128
+Subnet = 42.35.89.21/32
+-----BEGIN RSA PUBLIC KEY-----
+MIICCgKCAgEA4PcEqnw1ZrBgPl0yNO7eQ9aJpV4HKlENVhc/cobLh3dQgbmpw2Qr
+MQODR5qPxY+WmyZiQeU5sh8WutfpVn6xBCmR7QDqA+xpPhe/Y6uqWGDjxNftnetz
+gphYv/nPGj0Dv5mo2HGPFK1VG+kp9k+vlZb3r+03OVFrIVHsUg6qE4e8o7pN4OmF
+O10i85csMyKvSfA/rNHC7RdYP0tVLZTw4ZMTQh5t6zr/foHMr5KPXGVM/hjUWXW+
+ujSxUam6JxS1wk1zFp72Vd3X+JQH1eaDHidm3BBVAvCynyhUyaQh7nSjIDWZdGqQ
+GmBcj0M05o1tVGV/7sgQUTNHiLaX6vE35hQoq0Jr2bhfIzjhESLl7HuBMpvDntLE
+Tv+c/R3qryTNBBHFZOvYU0qx7I0cq5NLx4BqUXd6EykQvLZ53TyjFlINGQuEZXsj
+LOtyAj4n2EEg6WmSUhrB+tyowqumdT8ltemuhZ2zDmimep9EvMiZOVns8VkTqmBw
+lRzatTHS5tv6NieDzWTBuMqZiWjgpK8GILUn5e/ecIT2xTSVvo0jzIBwKtFpwf+X
+CkBB0tNlYYmDmHJxiKWBsgw27BFmQI59h3wGHXHSDRgShLBjNH62Lm6omDwivDJQ
+CJaTYPIsL8sdoCglCIV9NwUkj8tM+cvxZiZjvB3zizNxL57ZqpAcNGsCAwEAAQ==
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/incept b/retiolum/hosts/incept
new file mode 100644
index 00000000..348e44b1
--- /dev/null
+++ b/retiolum/hosts/incept
@@ -0,0 +1,13 @@
+Address = 77.95.224.63
+#Address = incept.krebsco.de
+Address = 2a00:7b80:3008:3::fafc:241
+Subnet = 10.243.0.174
+Subnet = 42:a2fc:1c89:65c7:6e60:1f62:eaf9:e9b6/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvy4J8CewsXeFkFOLqDwiTN+3fF0yjmP5ZVtrLrPJn7Ux75elTdn3
+iLcJYTgaO1/dmw8fPD5DkNnb3wiadZiFGXpsTd1jD69mHcn/6RY/0Fcne9qDiqgp
+vafpUD5UP7/7S+l5kkD6n7HVRblLXJIJk6Z8RCRN8OGyfjMM1IKeoR8kR1+85fpf
+C28fnU3Nz3YJDazOaMD7aGiyGZDRyY+wRjbWtMXE/NH8ydN148ZpFaMvBjM7fl/B
+q8XS5Rs9lFlW2jpex+W2DNq5t4QRMUDrLgD0gug0UiYCYw4IJg7OiI3g6vwjSDtq
+hRxpQ4nq3avmTR/NWzZ97PP4eXTCIQhiQQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ire b/retiolum/hosts/ire
new file mode 100644
index 00000000..724158cb
--- /dev/null
+++ b/retiolum/hosts/ire
@@ -0,0 +1,12 @@
+Address = 198.147.23.143
+Subnet = 10.243.231.66
+Subnet = 42:b912:0f42:a82d:0d27:8610:e89b:490c
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwofjmP/XBf5pwsJlWklkSzI+Bo0I0B9ONc7/j+zpbmMRkwbWk4X7
+rVLt1cWvTY15ujg2u8l0o6OgEbIkc6rslkD603fv1sEAd0KOv7iKLgRpE9qfSvAt
+6YpiSv+mxEMTpH0g36OmBfOJ10uT+iHDB/FfxmgGJx//jdJADzLjjWC6ID+iGkGU
+1Sf+yHXF7HRmQ29Yak8LYVCJpGC5bQfWIMSL5lujLq4NchY2d+NZDkuvh42Ayr0K
+LPflnPBQ3XnKHKtSsnFR2vaP6q+d3Opsq/kzBnAkjL26jEuFK1v7P/HhNhJoPzwu
+nKKWj/W/k448ce374k5ycjvKm0c6baAC/wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ire2 b/retiolum/hosts/ire2
new file mode 100644
index 00000000..6b9d0a79
--- /dev/null
+++ b/retiolum/hosts/ire2
@@ -0,0 +1,9 @@
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwXkn0H/+BUiARYSzZCpjqEwGeDZsbRHoWcRNlmlP6XjPMbKKQBHf
+gdERPevhoGaNtQdW6SEA5xb1cJDHZILHZtpJ63hs6999gB9x/n4x7eR6C9d7HPDD
+rGv+tBdwo8QWOIQIVnSAr6WdduSg2CyZbHd6d2Xd12vrfqJxnODSUHibrUusEc/D
+XBK2n1un3znzk7P+KT0xXMtNPU2678tGuwsvSIOoDfDx9+2xuxGANeqvEOeSAgg/
+SUH5CbcAFI2/4AKWP4e/yxM26YoKdz1Fu/hx7WqKwYmPERrgcr8ienx4WFGG83AJ
+CmiYwO23L4qSp1KZT8SbGDh2YpamZg2BZwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/juhulian b/retiolum/hosts/juhulian
new file mode 100644
index 00000000..d9da75aa
--- /dev/null
+++ b/retiolum/hosts/juhulian
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.38
+Subnet = 42:449f:b00a:e973:514c:3e9f:97ed:aac2/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAnNyOsNItOzNQndheZ3ppOMWvIOuO1wgLXArINS1ORcgIAJmLpqDI
+whsZFCVifwAXsdeBJyyZOPZrc2PQ4F3KB9ByX6PQ9jqAhun1aE9SDDqp+woOrTlP
+BtJ/8zAmRhrfak61TxpeTndLk95xOLaCwvS2P4SJLIcyutTbbFdBCqpu7cFUGOOP
+qCKLX7/mv2L+GNmQAnWZ5HwXQzBS6gNaNIcQ8mPCUAIZgRU2T83x/tnyH1RlATK2
+lYUWRM0ie+dRMhiDcwmmZrwYl8wzyvuBPEr/p8ZBM2tua8GlQzJUJl44AiAcx3w9
+0EB5MIRL5Qb0yBvXD0yR+bDizqvhd40LvQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/kaah b/retiolum/hosts/kaah
new file mode 100644
index 00000000..a90555a5
--- /dev/null
+++ b/retiolum/hosts/kaah
@@ -0,0 +1,10 @@
+Address = kaah.ath.cx
+Subnet = 42.220.181.17/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtd9+R7NYs/5LmXoFakuoFzdO/8hy4MMeGjdDqbubKyJmIO/nvQWS
+TQns55znLgPIapUtCijxphoQrcTB5LijVXFj/2uipqiOJHVmhA80NiQgYhrFG++x
+9AQie2c04xqq+6Bptjs8vnQS6odLsBAiY1OJDpaEPZqzrpSMnYzEwPWqOAzzbVRd
+SFDokIhm62xmDK0+M4H8l3zmMnInnxdHd0fMhBJr5lXXqdzXJ3zluU6fZyHysF4c
+OnvFrGNrc3MPpgmzULVUUVg+Z4NeQYa5LuhXA9xia0R5d8ALCi34L4tAvCfSi1Lu
+RSUiJHeWDvNzwIy9+hxofqqcJqA05kyGLQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/kabinett b/retiolum/hosts/kabinett
new file mode 100644
index 00000000..e434d419
--- /dev/null
+++ b/retiolum/hosts/kabinett
@@ -0,0 +1,11 @@
+Subnet = 10.243.213.120
+Subnet = 42:e792:1d5c:c89f:f932:e954:6ada:1dbf
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1sVtqyeCdKB1nabs0FOC62J+J+grP5B/3/s1cuAxcJmER+NaT/Kv
+rvQeB13BmrIjfJTBaezdR+wp0RiPB7s/aMPjWwS5rzh3KhSFk2SFpnLjB2WIpKqs
+N9TQEf2xB0TBWHqcpSqSthjP3SOGNP7gt5l0D13QIHkRQ2xX1PqYikkYi07cQLO4
+rwXrlEBOY8Dn0GR37NA0k+zt0AIdJ78zXHNjVn5hRj8aLGKB0q/FOtdMNRYEGD40
+An82Y2sW+b7U6Tnrw43TOO+AP/OrclEjmNDTRqYLiVAeFHXKjwbCsSlof0qmoipZ
+H+nbsB3qkFpNEy1cA9c/pqHfSpqV3WihRQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/karthus b/retiolum/hosts/karthus
new file mode 100644
index 00000000..75a8d15d
--- /dev/null
+++ b/retiolum/hosts/karthus
@@ -0,0 +1,10 @@
+Subnet = 10.243.42.13
+Subnet = 42:42:42:42:23:23:23:23
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtGL2Gu8Dw/NsgJNcu4XY9eWUM8prL0JC1UfnACXuOCPns+Bdm/dG
+uVTHdejjxv6y4FjWNCoD+45lP31QfBIqIOtUsfz/4ox9bvyTOUWQCe0NtBs2SMyO
+O1eWSD4cnNfskYdyOHQbD+KSSiksyzaZdcqqx9FgWo1VT0f+oElnZ4nLBKRNBguN
+GwVLjreE0GSxhcV2r6oHsaT+udvQ/PlQgn/zia2tKT+OI54WDJGXsKEvwRRnaRz5
+33Di58g3dffo0i7B3S889sa5B7l1kh229cw24Gc0AOtmm8Vacle6iTw3Eg0uLzxM
+nKpOma0+K7CoE4IqSZy350iTgheHwq+y0QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/khackplug b/retiolum/hosts/khackplug
new file mode 100644
index 00000000..c149d93b
--- /dev/null
+++ b/retiolum/hosts/khackplug
@@ -0,0 +1,11 @@
+Subnet = 10.243.217.107
+Subnet = 42:ebe3:90b0:539a:6ef0:0910:b724:00b1
+ │
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvytShP1vgYLDYJhiC26Vc1/cVJOptUnuyTc8Id9vkCkgHZRpKs3T
+jO2KRaQMDWMXfXkMfVp84/2Q85hpUzYqXQHaNzitg9nHGR2n+a6zfwNKWAm6n2WK
+AMsPf1weamzs6EfCm5WztqenoHKNUxpzXVyLJES/WK6e5ba7FEpszZx+ydoc5GjL
+kezqch5p+U/J2JoUx3aIpQuWvc0i/4KYOuGzlWgUYLNyqL1m3gBkahiPuOtzf9Ul
+EP8QY/GQa1HTFuhLS0Y5nVjZvWnjVVEloXbq9SD2I2fc4GD4+F8wtFMsJyEF2qxY
+XfSLTlpHaJbSBNiopQyWG62RZda/p0yq3QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/kheurop b/retiolum/hosts/kheurop
new file mode 100644
index 00000000..bbe93fe0
--- /dev/null
+++ b/retiolum/hosts/kheurop
@@ -0,0 +1,12 @@
+Address = 91.250.101.180
+Subnet = 10.243.78.78
+Subnet = 42:bcd9:7340:9628:9604:7068:5061:4976
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqIFB0Nk2eSg/K/dJGOEegtezhn5P1RUi1ZgxoZoTR6K4T/tSbD2u
+gjPU53mhRN622lLayMMXtWVKdhO4IUu3mKfemA/8/fy7Qu9T51UUS+NXu/4g5X3W
+Jg2a37TrnQUrsqNud7QQhPTGF8L0+UT2mHlfRYggtAO1J2pSWtsqDiMAOD+89zvg
+Gta8aMdaFPhdkfboaHH6mVJBFOkrjQJE4RiUzwZS24PKh6gRJV4cENdcNRYdVwhv
+dOM+SWzPZXDTAVyG6HptvSdfDUKi4hJY4yS+TIf9j7yR0YpUie3CsbN4a9jP2KVt
+/NhzZ9nNaEv6O8Nk+7Zu8OaxUPgctEFYfQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/kiosk b/retiolum/hosts/kiosk
new file mode 100644
index 00000000..b490e8cd
--- /dev/null
+++ b/retiolum/hosts/kiosk
@@ -0,0 +1,11 @@
+Subnet = 10.243.232.122
+Subnet = 42:1ad1:b481:00f5:aab8:f8cc:51fe:4b87
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwohazY/T/cp5Na3zLEWhz9Lnz78PladH7CMN+1TLzNXgK96bPvrN
+6ktxIFc0s4m/jWW1AZOjxxGZGmwvaGag9XH8NLMmaqtd2NpASI4c801wEVLuNpss
+gqPAIhDdDWV0WmiDiHe96qQuBVNGv7jlHTuNghwlmgLF0csRDiZZDHn5Bq7plAJB
+0kQSspvq7UpBzVHVlDefIIe15/Yyt9IC21S1o746ZIZ8RYCG63Mnbcs4vfShVxJX
+NnD9++HJV39NA9ozR0bDQUw6s0rVHH/n5iWaktJZ23r2TG3O+7ZZj4QHmkng/Xow
+pgIjcpIWlaqfG29Gl43SWgsVnphemvyP3QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/krebsplug b/retiolum/hosts/krebsplug
new file mode 100644
index 00000000..ab9c966c
--- /dev/null
+++ b/retiolum/hosts/krebsplug
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.182
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyd4FnOIEcUDQDudDOhU4wwKT+lqV4RJMfg9QgZC2O3xTGvzsFeRG
+aSMIDMkPzhJ/ggIWAzC+IM2kBv+YCRhu4zOnzWIo5IaC8Me2TZ1JhZ0nZN1YzEGD
+LmBsnngO5L1VnWLYSKRALa5Kv6wQHHz0T6PlsvBQ8SWDG3IKIe/gOFz7eh1Z+ss/
+5XaiYeLMmukEuuilOJZhfDiZPmYOeFI5w7YTM+8Iz/oZRyf8P57pjN21R3feoyTm
+WusgHUuRLRqSUHdYu/E36EyZ9Oc0WPk5yLUhstkPaS1Y35xMEhZfQQpIruQxOst1
+fgiOQg/gKmizzgzdCbfAf13dknkWsqoc0wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/krebsplug_696c98da b/retiolum/hosts/krebsplug_696c98da
new file mode 100644
index 00000000..6ae73323
--- /dev/null
+++ b/retiolum/hosts/krebsplug_696c98da
@@ -0,0 +1,10 @@
+Subnet = 10.243.217.22
+Subnet = 42:3b3c:d92f:96f2:7a9f:dff8:7b2e:3f86
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwR+ltgpQHd7Zo44JAcaLZZ0T6/9VBvwFAnG446vTzRL1cX331akV
+Ceh6IkwBkM5lWNmNVYu/oeqd6cj/i6AgDMZRETbDLBSX338wPVXqxaPsIMgyAD63
+WRsken+VZKG8qrkBlBIgoXD/THQWUpw41B0tKNYnv8HQTcB2hlLZ5i4r8A38UADL
+8vQd0V1CAfqa3Q80pDxmTtGo41b/mfHUMF4iRR94T65AzpHmofcMaJ9ThiQ3bDiW
+D4rj2mjvOWcnLsm9eNXTtwIG1S6Go5Nnf1qXUGTsskm4J193zhxS+PL1KEamuE29
+8NLec8P0aYD2rlyMx4rale1j8jpvS0El/wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/kremium b/retiolum/hosts/kremium
new file mode 100644
index 00000000..9f77be25
--- /dev/null
+++ b/retiolum/hosts/kremium
@@ -0,0 +1,10 @@
+Subnet = 42:88ec:8968:cc6b:978a:68b7:1004:fc8a/128
+Subnet = 10.243.0.98/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsdjqCyLvGfkIsawGji1CIIxGaKKdFhKJcfFK8FWiyQdgeNK/9UAh
+XsJYkSHVcXqHAorP1QAvk5fIiSEEoSwoChyecqpNOREOnN8+N8RVrs0QIwL0mwa0
+9H4HDcpt8O8J0mpM8z8pb7vhDk261oMchG52TVYX4cuEgpEiyJtij27UIfOeVY8g
+8kuJQG+9X7WNGMOt2Y8A7pXFf/+8qdwpOq5C0SIRPR5WplBeeF3BepzmUeq24XOE
+cdF/ggYeU8hSYzr3DFX7g9u/gOjBQrhApopx6LR9TkpkrFfVcgLw3NaOzI2vQzqa
+7m8v62D+/3vun3ZB/1OfQpIMfm77DC8AEQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/kvasir b/retiolum/hosts/kvasir
new file mode 100644
index 00000000..6e5772a5
--- /dev/null
+++ b/retiolum/hosts/kvasir
@@ -0,0 +1,10 @@
+Subnet = 10.243.222.181
+Subnet = 42:77e5:5496:7cd9:78aa:c4ab:ca70:6860
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAv8wui/1n4VhSd8BK1yswCrHydiYFx/+5Jdi7cB+S+qJU0FCsKs7i
+9BdrTcJ+djBn6WXA6UXSHtQxoRPqT4OH9nW4HnXaMGvJJbJhHtX6C/Kun1p66zUE
+oEBV0+WqSvN7+xgsMxoXjxB4YMmvMyI5zSl0uEx3sBfvkftoISQHruD3PoWInE9H
+CfVcuk1qzvsbk23uEyGjS1k6z0rI/HunmcEHw1r3oTAgFg7ZXH9ElCBBDbwECjMI
+x+DREZlH3kqJ/W4ulg6+tf9bh/22oBbJu2H4hza9k8lx4z1jUARqeJVhNVKOiyXM
+l8rFUiGAXortMoSlslnPXvShSuskMJP2CQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/laqueus b/retiolum/hosts/laqueus
new file mode 100644
index 00000000..0bdef307
--- /dev/null
+++ b/retiolum/hosts/laqueus
@@ -0,0 +1,11 @@
+Subnet = 42:0:0:0:0:0:0:1a1a/128
+Subnet = 10.243.0.12/32
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAy9lnH4qDSYeNbpzpcQyq2LzzxkVy2N1vGgKkVttzx0cgMvyRm3aX
+wlacS+3ILBZ3tw+JuCKR9gjRluwKkqoReEINcAam/GbubJ6QBpV54goYm7YGOIuf
+GkbWVk7Kts67KWWhZDzEL30GRv94K6e+m8e7rhnqrTgPyPk3oSwHzvPy1oaf6bTI
+Y/aDQjohFVvQZxF8joKhAE8JrzjKAn8yXmX8VlGW53XBXAb88Ggkr5raMZ24Rcc4
+pdkOc7sFfVImH/ASwkcPi2xX0adlz937lD7rkn5/Q9B9AwsHb1yQKJgWEeYWOQ8C
+F0SzpZiwHz5qB+eg3wMT0ZnvPJKitshyjQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/luminos b/retiolum/hosts/luminos
new file mode 100644
index 00000000..fe04b33d
--- /dev/null
+++ b/retiolum/hosts/luminos
@@ -0,0 +1,11 @@
+Subnet = 42:23:42:23:42:23:42:23
+Subnet = 10.243.42.129
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuxgY9SfSCyCuTw2bPtC/He2/NZDYQOcGd8+5Bo6h1/h2pU+qKPQB
+0digU617dG2NVMaT0qmzEz86e2avr0PQsyfhmHO8JNOTqwjyQzKcv3iA+B0jU7Gh
+F/PaW+e+0O+a3LO27FCA0uuxEHyWaXqk53a3wKmjo4fuVy1QKOOoiaFaYLaaTgmm
+8OJG+AKWR/ArihpopgAHFjiqB89xWVw5CgxHDwfzVcmI9SOAaEuTfL065XM4uoH/
+LnbtoyT8zN+He1AlaEJMUaWdo8SWfjBFyVrT1zRQ+0S47tlTCW8Neb0KKs+m9d0G
+rAdv6+iFmQzpv76cgYQw2+AkqkUF8Y8xSwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/machine b/retiolum/hosts/machine
new file mode 100644
index 00000000..4927fc84
--- /dev/null
+++ b/retiolum/hosts/machine
@@ -0,0 +1,11 @@
+Subnet = 10.243.60.31
+Subnet = 42:698d:4e02:4d70:b080:acdd:513d:70aa
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvkLboZ6wRALd++ntUXfyzCT9G1pWSJNJhrdut8dPfz/+IIbx4thz
+tbq5apWQRaHj6IILMiQqpfUkhbfz3WS2YP62f8nAzKLKB0zzRAJ1lQjoZOXQseQJ
+Ydyf9dEDhRtnSnOwsmSDEch/2KhgCj+fdMcnbcoAg3PYJGzsz2ykEtoh80Rv1IQa
+tW285CP2GooRp1gwy3WKL6at/uW6D4/tTIimHML5JbLKj7mH+3nOyrhRGyZP1b9s
+XtdkePuaQKrIjmv4rEIYx2taFmmQp7XpC2m4Vdoy7WdIzR3WTgWo546IOygY1KIW
+fDOH+3UoG5oI6y4hNNa7+NH8DpmdtzXYnQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/miefda b/retiolum/hosts/miefda
new file mode 100644
index 00000000..1de261d9
--- /dev/null
+++ b/retiolum/hosts/miefda
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.30
+Subnet = 42:59fd:1f99:d9b4:9fda:dd80:ff61:6497/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtWySxln5f1ibnguV9FPOGvw15Xn+9HG5qRDv8buu30YGdJ8yaq6L
+LwjZjNJ+fbHx5lNkDcD+qZXGi/jBiIFPOnAlNZwcOSlBtlplLX6/2H2Ix3RTrhUm
+Dh2s0VLGBPZ+tNO4TtR/RyYJVfVYN6BrKhAWGkffeo0bHFIpiAOQyr1bmbFUMs6q
+0SzX987ey3STDVPdiTNHW7ogFS/18QwOcI4eYVoYK6jgPvutNYt5lpP5qRczgCpd
+Ra+cZk9Lx1mbS1jEAhCYDmqmEqlA2p2ceTOHibjOMzOPkkzEcIwntP4iU+26E4aW
+YS4snJDR9bMXk85rY5Huo9jq7z95T788WQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/minikrebs b/retiolum/hosts/minikrebs
new file mode 100644
index 00000000..b0d60558
--- /dev/null
+++ b/retiolum/hosts/minikrebs
@@ -0,0 +1,10 @@
+Subnet = 10.243.1.1/32
+#Subnet = 42:0:0:0:0:0:1:1/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0fu8F+XJ6hHsIj8QtdSZIhE+Ae2sEIY4dHcnHbCOeHJlOQQDJrme
+frmG65BX4BMcClUyhvvMwlZIerFwsJoEwa39lB3/Y58OwSS9cNCZTShQPbyVy5wo
+oS97tVUyQENMELXgodg7CUNaloVXGOyXgCOkfYOb5CpWi8NXNsSE1CjZc1XZNI2Q
+2dFBzp6FtRcKc5x5xWuUMnw1Ll2upW2uHZWfgRtgv+pzxVTiNvDqACu8Klwj0bls
+B87DEYeUmiC+CioOtyhiQimUGE8lU1aMaqCyfSsqeBEclSvOCnpaEQu4j6aiY8SE
+5Gm+rteYWKfK2LYV2NOg7n9AUR6d0v8P2wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/monitoring b/retiolum/hosts/monitoring
new file mode 100644
index 00000000..e51c309d
--- /dev/null
+++ b/retiolum/hosts/monitoring
@@ -0,0 +1,7 @@
+Subnet = 42:82cb:f60c:6f27:611a:42f8:906c:2c70/128
+Subnet = 10.243.97.250/32
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAMjS8WxgbfJKVGRIFD0Bv+odQ7THNWDIcr1p4riVbOUPxtce+abasYGl
+DOwaejcHP5bF11EAOOvdEtrivZReIZqYbMz5oWHLO6GCJn7nOCZVCW4LnUuNP3u8
+KQEU5oKj7LsKrBEEOtwpfNoWuZFzuzF0A6A2n+YYoea/Ak+hEbSbAgMBAAE=
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/muhbaasu b/retiolum/hosts/muhbaasu
new file mode 100644
index 00000000..490fe3fa
--- /dev/null
+++ b/retiolum/hosts/muhbaasu
@@ -0,0 +1,13 @@
+Address = 217.160.206.154
+#Address = muhbaasu.de
+Subnet = 10.243.139.184
+Subnet = 42:d568:6106:ba30:753b:0f2a:8225:b1fb
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0f4C4xKXpnyV1ig03O2Kef8ag+/5WGkW90uxEBb/h5NY9barex+Z
+KqVbkPdHhwoCIINuCVcOnJXzeo0FZtSEq3zVhscVm0PVdNfjct8a9KMsK0iUmuul
+5WD9Glh5/1wkEmbRfVxDErhssz1b8YmFOAGQn+ujO/Znn3BLv36uKQvpqU2y5bzb
++rVnq3eE1bCSeuj41bgEve8+vxpforjLO6gbE91mwp3Ol6nkkp6CjpG+aFTuLCAj
+YR0MIl2gGwskOGSI38QxlLouOlIGwus5f+KfC94ZP0pMwu5pT45UOUkVnlBXuZ9E
+igNHG2Vtm76nB3yYHndOvuDTOufatX61dQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/nfcgate_298dbf07 b/retiolum/hosts/nfcgate_298dbf07
new file mode 100644
index 00000000..e3936b07
--- /dev/null
+++ b/retiolum/hosts/nfcgate_298dbf07
@@ -0,0 +1,10 @@
+Subnet = 10.243.32.21
+Subnet = 42:9ca7:c370:a9d9:ee1b:623b:7fe6:5146
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEApPJKpk2vFwG0GSjl/Sg2IMfala2bOYSnTDO13AHIuybfmNr3H3O7
+exJ/ALN5lqnVOU5pL9GyORnAEEeaVI+eGJmQJwTtQExoLo3o12YT+mDV8YFYVqo8
+ZYQqxLlNO1gNKNDHPlZoCmwtavmv8jqGyitjCT8ZHDHiGl/ugddNOwfFHcSM1a9c
+rAM4+D3Qu8YCIC3txcww77UtbFZVBQDG3UxkGbqNeD7Je1QHyZxPs0Oqj3aIYHLP
+MW4H4360dW8+3U12bwYU4viD/uyCflrFvI2nY47GzF2MakC7UeUEiVDw7U9627wq
+ra6GQebx7NRZjg/pTy77uxj7RFIHRFyIEQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/nomic b/retiolum/hosts/nomic
new file mode 100644
index 00000000..f418233c
--- /dev/null
+++ b/retiolum/hosts/nomic
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.110/32
+Subnet = 42:02d5:733f:d6da:c0f5:2bb7:2b18:09ec/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwb8Yk/YRc17g2J9n960p6j4W/l559OPyuMPdGJ4DmCm3WNQtxoa+
+qTFUiDiI85BcmfqnSeddLG8zTC2XnSlIvCRMJ9oKzppFM4PX4OTAaJZVE5WyCQhw
+Kd4tHVdoQgJW5yFepmT9IUmHqkxXJ0R2W93l2eSZNOcnFvFn0ooiAlRi4zAiHClu
+5Mz80Sc2rvez+n9wtC2D06aYjP23pHYld2xighHR9SUqX1dFzgSXNSoWWCcgNp2a
+OKcM8LzxLV7MTMZFOJCJndZ77e4LsUvxhQFP6nyKZWg30PC0zufZsuN5o2xsWSlA
+Wi9sMB1AUR6mZrxgcgTFpUjbjbLQf+36CwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/nomic2 b/retiolum/hosts/nomic2
new file mode 100644
index 00000000..63d83ff5
--- /dev/null
+++ b/retiolum/hosts/nomic2
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.111/32
+Subnet = 42:02d5:733f:d6da:c0f5:2bb7:2b18:09ed/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA4RATrMG+MJyNq77+qUqoXkBIpUeytIvUNXT5OdvU5v91Xo2eGI23
+NXiFtILDb1nEPB+L4vVWkUKRuPAy+ThgqgTH1vyugT6jRoRhWWmGmSn2GjaF+UxK
+edTfGJqO0Iwn0kZsIFxXUibkmG5iRbJBoPXXz33VtNxOv2gZZ6klfv/pYWnrxmLm
+RZXkE1H3Y0U2ulQEXvpexzVscfYmlAw7h0Ew4aaY2LK4spLLPjx9RdDgfwZOZdS+
+gi5cmi/qM71/o67/4XippR9+7GQ8YecbeoR4bcZpDNoDy1ri7HPPu/t6CiqsYVyg
+jYGBm+IGbwI9hxGel2bXCVBGLE7gpN51TwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ohz b/retiolum/hosts/ohz
new file mode 100644
index 00000000..e452743b
--- /dev/null
+++ b/retiolum/hosts/ohz
@@ -0,0 +1,10 @@
+Subnet = 10.243.118.171/32
+Subnet = 42:a06d:7412:809a:b74a:8052:daba:c99f/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA7vZFyHtBC9WbXTKcJ2mXxTsZnZqGrDzP7PVtkaBQfTT6J2Qtct5i
+0klA8yvXHUeVdt+hho7rISX4LJr+RDVdhU4ZgrcyJ3rR3moRGzLUV2VLroc1Mnbs
+kkK1mowNk/jZpf6XyRpGL+NFMCZexmfjTdMaMLhzoRbA6w/ffPSSuDZdbG2F5bMk
+BmF6biPcS9Z652ePXh9ViUUKBpLTHQvgK5/iZjI6ik/eit50jrjO6MapUVP/7qob
+VeXE7Zos3UuHLiKegN68VbFQp4qu7jNH4jRun3Pm/Zd/OaGCREIDnfyIyauDNkaT
+QUEL+h0zsM+t2rLT08Wo/sdNX16iMrs9FwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/omo b/retiolum/hosts/omo
new file mode 100644
index 00000000..d2788d28
--- /dev/null
+++ b/retiolum/hosts/omo
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.89/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuHQEeowvxRkoHJUw6cUp431pnoIy4MVv7kTLgWEK46nzgZtld9LM
+ZdNMJB9CuOVVMHEaiY6Q5YchUmapGxwEObc0y+8zQxTPw3I4q0GkSJqKLPrsTpkn
+sgEkHPfs2GVdtIBXDn9I8i5JsY2+U8QF8fbIQSOO08/Vpa3nknDAMege9yEa3NFm
+s/+x+2pS+xV6uzf/H21XNv0oufInXwZH1NCNXAy5I2V6pz7BmAHilVOGCT7g2zn6
+GasmofiYEnro4V5s8gDlQkb7bCZEIA9EgX/HP6fZJQezSUHcDCQFI0vg26xywbr6
+5+9tTn8fN2mWS5+Pdmx3haX1qFcBP5HglwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pante_miner b/retiolum/hosts/pante_miner
new file mode 100644
index 00000000..c363681f
--- /dev/null
+++ b/retiolum/hosts/pante_miner
@@ -0,0 +1,10 @@
+Subnet = 10.243.26.211
+Subnet = 42:b6c2:e63c:d178:a71d:e36b:8ef6:abde
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA65AhOXR3oOUcJi6qxnCWC7BduLyBth8SWsXhzKvyTLEqXBH8KcuL
+H9UOrSLnwcueE2wMeHh5Rz4S3J+dwUJkGvD6eMXyJDiuIoaB8B7Iqjo1beS3gf9D
+4nOv6YBjE0LsUwGKnZIR2E852MBcKUdZx4WdAYL8lB9ucFVBjKln8GxTZ1q4GEFx
+XiCJddvCY9HnjlUBhCRghmRUYlgbhkNJhp0zclS8qXhqCa4cjrc586NY6dZDiIhY
+AivuJayZEnrM/iEFobLcQnmq8n5o9iHCKbqRhemLeO2BAwn7SwSXnF1iTqbzK5df
+zaA/G/6esPKyLfjJ7rgNBtUSfEC0Ro8yFQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pfleidi b/retiolum/hosts/pfleidi
new file mode 100644
index 00000000..59bf8f41
--- /dev/null
+++ b/retiolum/hosts/pfleidi
@@ -0,0 +1,9 @@
+Subnet = 42.106.88.140/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwdoS19bbKmVncJcf+uT5nNpyuR8SL9ekd+XMoKBpoqDf0r7ap3F2
+HLNI82NSbSAA4zdASrfrDl75sJ05VIIsueNAwMkFc72YNA9CPBFGcvCNVi0d4XcC
+t6voNrgCVaxT77MVBAnohT7+HfYmkTTSrLaDKusRx7ybz6ZaRO9i2peC2VWKVIjP
+m3QlvPeTpIJg/nGEBNO3rotBPxpMEB+fJnWxfBHRlt9klK3VhLaXCLUt5KcJ2SA4
+q3BFQbptUfI+d6OSA9btJerdtZ3PVBqlIJ45b3RDUWMborVg6jQ7S4WBzARe1eKs
+SHHk0aR5LoiSGiNVGTDlxLVe1UT1dF8voQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pic b/retiolum/hosts/pic
new file mode 100644
index 00000000..fb091856
--- /dev/null
+++ b/retiolum/hosts/pic
@@ -0,0 +1,11 @@
+Subnet = 10.243.64.210
+Subnet = 42:8115:848f:f56d:4025:49bf:9042:d3b8
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA7jWZo6QlyLMW1BK/PxBDgU/qBZajMfSo5nLtp/WUMSMa6cJCjFFO
+ppUSfAKBu4uwzjYUmdzQMoxE2AQKT2+gMc7moxz18sVBTbbWlyueBlsTvhpC1b9k
+YPs3eAJDV6mQPvKb908iubqhardaZAdODDas1S5W4N7DuZZBKryARYOoO7cN6/wd
++YDTAxf97sV5IuxCDOV1inTuOrNx8XfGU4wVVELqzd9VLCHGuD8kAcz0+emDrI9d
+MSo8ryCL9tbF5owtC1A8HFDo3LM4da7411HrPHpVyOVgjXmX6bjlLIQ23XNDQOC9
+IbyhK2tCc5q+pms7gYEWPByxmy/mb6WBBQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pico b/retiolum/hosts/pico
new file mode 100644
index 00000000..b08b450d
--- /dev/null
+++ b/retiolum/hosts/pico
@@ -0,0 +1,11 @@
+Address = 78.111.78.33
+Subnet = 10.243.0.102/32
+Subnet = 42:b103:275c:1723:edc8:b24d:452b:352a/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsbe4wzTOHHLyuPO/AsfDqQHyV41qgs3dqt6uWcDcdiEsUvbCK9Ch
+MQNkTktlrMRyvz6Qm/3DKptp80R648j0nWi/c3aLDkZq8weEnR9SFYfNaUp/GN4s
++Qhb+836d8Hu2+3jZWlr5Zb/p8hyhcx3NUH/skuH6Hu+piWczlN1NGksf5f7N/bp
+ZBCXnCLLUYVM/0RIS8mcAIX44Zx8YFDXpByePUdyrzn+mRln6VFDnt5uGsmNw6G/
+Azn3grpidcyrW2cs3b7rysKsxOvyGBdu2zGXp+pquZq1l3f06IN+fzCtnyLTPL1K
+UUEJlQa1Gsl2pVi5+HPcAj3U2yp42WJYNwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pigstarter b/retiolum/hosts/pigstarter
new file mode 100644
index 00000000..b1c08801
--- /dev/null
+++ b/retiolum/hosts/pigstarter
@@ -0,0 +1,12 @@
+Address = 192.40.56.122
+#Address = pigstarter.de
+Subnet = 10.243.0.153
+Subnet = 42:9143:b4c0:f981:6030:7aa2:8bc5:4110/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA/efJuJRLUIZROe3QE8WYTD/zyNGRh9I2/yw+5It9HSNVDMIOV1FZ
+9PaspsC+YQSBUQRN8SJ95G4RM6TIn/+ei7LiUYsf1Ik+uEOpP5EPthXqvdJEeswv
+3QFwbpBeOMNdvmGvQLeR1uJKVyf39iep1wWGOSO1sLtUA+skUuN38QKc1BPASzFG
+4ATM6rd2Tkt8+9hCeoePJdLr3pXat9BBuQIxImgx7m5EP02SH1ndb2wttQeAi9cE
+DdJadpzOcEgFatzXP3SoKVV9loRHz5HhV4WtAqBIkDvgjj2j+NnXolAUY25Ix+kv
+sfqfIw5aNLoIX4kDhuDEVBIyoc7/ofSbkQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pornocauster b/retiolum/hosts/pornocauster
new file mode 100644
index 00000000..cc7d8955
--- /dev/null
+++ b/retiolum/hosts/pornocauster
@@ -0,0 +1,10 @@
+Subnet = 42:0b2c:d90e:e717:03dc:9ac1:7c30:a4db/128
+Subnet = 10.243.0.91/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAnztrijsfao+fmNtwAjqwIDKsRaMP3ECsq2T2zqKvxwCyXk69G9bG
+RFhWjgaawS9ZhnHSlgWK/vtoR0O9NxpzdU/mvdQijbVGxM02DegjO9qDSIe8EGmA
+kscW4nDqYtw4rtjOVPfnNiWXbcWD8eiYR0kcSWmSvfOpVvdhTETqduTx5HRHyEFD
+JRQYR/tJSvVWXmM670PENAPNJFJ4VSJR60s5A+bFT7J/uw7HzJXX28LygJz73Dj2
+2a4ev0WcZQngLq072h/91R/TOpg+ogUDVhXkQtKyFj7im0287JTL4bXGofZBhzaf
++h9dFGs1QLoNyhG/cgt9fog7boSXTelAiQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/radiotuxmini b/retiolum/hosts/radiotuxmini
new file mode 100644
index 00000000..96c06931
--- /dev/null
+++ b/retiolum/hosts/radiotuxmini
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.185
+Subnet = 42:5553:9d1f:5e66:ed7f:bbd6:b7fd:51b2/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA3A0wJPSrNGpb3g98iv1EDTk7s9dgUKSHf7rmqrN2IlW9g21pkGEY
+T3EWz5X8mGEQbDw2im9W8Lm7OSnYuRQjNxacq5WMIN3AGpsiGB6KWEXu73lDWDkE
+hL7dxjSWFSQQMUkbjhduxyaibmLLI748w5npYzhAsjICs4MsrBhcL/ER7tCwVyKm
+AEKUBbLd21tVLGM5dapJslKamZ5NxeHY6TBdtbd2AQZ+67EINKt/WEx9Ruw/t57P
+OAa37NhFrjBbRClQQZVOunbh1Sb0EX3Abj4oZczrtAaBfcDQbA7x2LwbqugZH/EN
+i/oa3sCqOLo7ZcYvuvyxaZgWLK3KB2MEQwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/random b/retiolum/hosts/random
new file mode 100644
index 00000000..59a354e9
--- /dev/null
+++ b/retiolum/hosts/random
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.134
+Subnet = 42:725b:abec:0922:09c6:b51e:1a33:b93a/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEApgs77ljzQp7I8/9KbqzGjoDdNAA3Bp6dKziIJnHLAIDAHD30yY+o
+UHbRPhaCP9s2M4A39wTDjrakngF75M+0covz4WBIiuGdwZywgVnliRk/9dcnqdZm
+OeCxeRJ0BY3Iy8oMieFaPJW1XgwKYi2p0eSpBeKasBct2xNQwyvh+r+xHBa6NK0P
+vV6rK04OrJu04U/tqklTFMTHGmZfjx1vmuecuPWZlgT39788/5aD9uqg2ldMoenE
+eamrPdU2Vh6qlZc8CyHVy5YZDykbXTauUL5OmW2Om4Qc05pinsNnDXfMTkSSmWpN
+oj6nieBqbp/ExuZ79LC5XxvQcAMQtk7gUwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/raspafari b/retiolum/hosts/raspafari
new file mode 100644
index 00000000..1e1b4850
--- /dev/null
+++ b/retiolum/hosts/raspafari
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.156
+#Subnet = 42:9571:c499:5adc:f9e1:8982:3cb1:cf91/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA14OlKZwL5+ZMwxoMTuTpt+PLr1Mp6pIlfIdYfkkx1od6c3fuvNi6
+CHLpR0fAWDDec/hDwR55VLzonDrPa/nOj6yHCXCTpHhQXJIdZTazxSPAsUuzzKa+
+TZQcCGZWJKG09Rg8gIceTjS99l7BOVtPQXnVQc7Gfxu8csjynHOHWinZy34JU9FA
+HdcTzKsxrAr297iQCPEht7XPDCJj2hRy+NS5UOzkTF7UGTKveyRdsqVIWx/rMrll
+UlBEwxRpstuhG33bv+tAXKNi2eJn32IvHDhPZtHgrvXE71FT43V6bJLT0+xH2qFc
+SGZCCdjv3/3mO/g7Kkth64mpxMw93NGkEQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/rtjure b/retiolum/hosts/rtjure
new file mode 100644
index 00000000..f79b42a9
--- /dev/null
+++ b/retiolum/hosts/rtjure
@@ -0,0 +1,10 @@
+Subnet = 42:10ce:c102:97e9:f234:fc0d:3e91:1ac0/128
+Subnet = 42.122.79.178/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1yyfTmYInif82KH/bz6Z2tzSp6loe6wJuBmjTbxIl9AFvGPgYNSI
+QCyzZtqcK55+fbA1dQiF1aZLxADM/H42AvrDAKX5C0qi7K4OhciqckutLS6OxwQu
+jnfCA6CST8LQ3cy6CIjjQfuBzQWcU79UwgCIJZuJknHYOIJ9j3BBHU8XVJqY2qxB
+nE8yIyDstY/hVOLgsLTteWGCTq52C+U19LND1/3T70iWqiJgepsGjVCa/M1v/SLg
+acboxH1jRyX+bVbjPCAG2OKQO+hTqJnjVX8LO2qlnxovUDx36igzGCjTGKFA/KVW
++FxMAVZdNRTTzLiB+LUenXb8E8/uqBj3bwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/rubus b/retiolum/hosts/rubus
new file mode 100644
index 00000000..e5f0a729
--- /dev/null
+++ b/retiolum/hosts/rubus
@@ -0,0 +1,10 @@
+Subnet = 10.0.7.7.55
+Subnet = 42:537a:0c95:6315:6598:e109:74b2:0887/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqudpo1cC1ETPA3d16cNTAwwud195Yetdx32ty5/VkY2KgLnnl672
+XTPZBVhFppG+NU6QIYq2c0+BdUV+42XNnSeTKy79xr49eSMDaAXuWiX4eY8dh4v9
+n7elTWikzTaElS5SI3wcJPz8SdajWclnRkqXbyMY7Pw7uJMgT3svC/chN8tgp1LT
+2s1DdvxaHhnFPef2NQvIWgfgytReLB8dQnSYoAiwIGvNXQT4OXgshJkTAwmok/Sq
+io8K1FeJyOranBM/ZyYbQWMEXuknoJ9PXKPbrGjD+ftS18Gs75ODWqh/Bpj75rpT
+q6HLJv6H6YpToxueTL1iYM00MNW4g/oPZQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/senderechner b/retiolum/hosts/senderechner
new file mode 100644
index 00000000..4cce73ca
--- /dev/null
+++ b/retiolum/hosts/senderechner
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.163
+Subnet = 42:b67b:5752:a730:5f28:d80d:6b37:5bda/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0zCc5aLVRO6NuxUoR6BVzq2PQ/U5AEjYTdGkQufRot42N29MhxY7
+lJBfPfkw/yg2FOzmAzTi62QyrLWSaF1x54rKu+JeNSsOAX+BorGhM67N45DGvJ0X
+rakIL0BrVoV7Kxssq3DscGVbjbNS5B5c+IvTp97me/MpuDrfYqUyZk5mS9nB0oDL
+inao/A5AtOO4sdqN5BNE9/KisN/9dD359Gz2ZGGq6Ki7o4HBdBj5vi0f4fTofZxT
+BJH4BxbWaHwXMC0HYGlhQS0Y7tKYT6h3ChxoLDuW2Ox2IF5AQ/O4t4PIBDp1XaAO
+OK8SsmsiD6ZZm6q/nLWBkYH08geYfq0BhQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/seruundroid b/retiolum/hosts/seruundroid
new file mode 100644
index 00000000..b4f0848e
--- /dev/null
+++ b/retiolum/hosts/seruundroid
@@ -0,0 +1,12 @@
+Subnet = 10.243.127.2
+Subnet = 42:81de:f850:152b:0988:1942:265d:dacb
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvNtSbaaacF05L2mAxxA5SYc6DuoZEAkXlhcvLTlpu9f/0vZwUWh7
+175pLn6VqUijVoFb9vyoOwkrs9Uk3aX8mYws+5yJLwXhIje+U3uiVTphowKva+m9
+BzV6waZ5dLbh+3CGimx1TBkFTly3NkdZs886QWSO4aXLdU6lt3jRYsuay0Eop/j0
+eQ0BWg9o0QEcfDRQ7RirXrD0B7TSo6qZC0b4NSAMHTE+dvOMo7c+Z7cIPNLS0B+T
+Am7ju3gF7UU68kKPyczrNSPPPZayEvZYUZE4PHt8dyIsppojoRq0SJqsMr/mOC15
+dg/KnoKezn9nqUWzisRWrrqWStAKITJkjQIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/retiolum/hosts/shabruecke_a0e95c28 b/retiolum/hosts/shabruecke_a0e95c28
new file mode 100644
index 00000000..7b9cbfa0
--- /dev/null
+++ b/retiolum/hosts/shabruecke_a0e95c28
@@ -0,0 +1,12 @@
+Subnet = 10.243.206.121
+Subnet = 42:4687:e87e:41af:e84b:c52f:ccfb:d2f7
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzN5IRY/9kN8ix5yW2uv1Ltj5rKx1deloB4C/nBsPToA9E/ojASkR
+7V2NDpJGj9QTP4/8ivi0lI+BNOrlHMKxaVvxy/LBmqDQ8ccMQX/4MNGhv1d09iu/
+SBuko/f6lYHm4y71fQlgVuDPS8RDRY/2+008L6rq72RTxuvHZm7smyxDNoUTKWFK
+iJfCxV6nLPiUt3ioEzTMDKAZ7xbOofsTbAxe5Uh4jc9wr3XYkN3y6KHMWDyjWYAo
+WHN0sdEkWONrJvS2b4L3Vl7Mw80Sg1HjmOEJmygY63bDgfP1UnH/ezJxX79RLeZi
+VNF1fD0rJPN937fkYchOT4HJP+RvydB5DwIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/retiolum/hosts/sir_krebs_a_lot b/retiolum/hosts/sir_krebs_a_lot
new file mode 100644
index 00000000..f4fffd9d
--- /dev/null
+++ b/retiolum/hosts/sir_krebs_a_lot
@@ -0,0 +1,11 @@
+Address = 84.23.79.81
+Subnet = 42:48bd:f4cd:b2f1:ff6b:865c:d041:def6/128
+Subnet = 42.130.57.249/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzkVF0BSWUEqzdUidLTa6qL4wlNSb8gaxyZperzoAj65d5l25SCqc
+jjqvREcE6p+jM4t1STXoohnNvexubNXW3PVo5Zpew+BsaGjVvow0LkqCJ9k96Rrk
+JzU5lAVH6om3/QYws/Ot0zq1Z/+Xw/0+9JpVKhEipMWLpLgjAvWdvzSW6aBIHVN1
+3E85fkTE5f0azct+XNSNzUebdyIy8wu/EexGmFI9bN+ewIvqjZJdvxP+Ank55MsE
+8P7K9TKwVXw440MGqqoQaOhdaT75TL+2nsAfWYcrNnE3YehMOmCMp9oY+RAvsIkK
+iAYyF5l7ZTi/7KGHNsG7rr0cbytiz2nS6wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/skirfir b/retiolum/hosts/skirfir
new file mode 100644
index 00000000..0214e7a1
--- /dev/null
+++ b/retiolum/hosts/skirfir
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.18/32
+Subnet = 42:423b:0f94:6b03:7c3c:593e:67e8:c857/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvQ2yhEbW2a7rOlJGb7pV8OhDMQC00jNffM9LML+sn/BAbIX6jzzi
+XgD9o5qwyW/ktpEViUbYepIB/wBbHdMgHRWux5nPS/WygxnVKcf4mPr846udJ2kx
+/38l40DjHTzMWTV6G+TFm4+Wg7++B/NUonMJczRNjX4zDVwmObZpS+XSjl8bT1DP
+vvNHeUOr06a/IPyOF7b6B/dlr+0pr4YLFw587M1KA+eee8gvJx7YvCdwUMMJP++K
+KX30apeJQ+jpf9CsVvpxGefysMTv0uUB7Rmya3b5jjddnW0ge6lTMwT87TzIF5jz
+e3hIt+dvvq7cHI7nnyyRtKcvcm1hH+ZIaQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/slowpoke b/retiolum/hosts/slowpoke
new file mode 100644
index 00000000..09e415e1
--- /dev/null
+++ b/retiolum/hosts/slowpoke
@@ -0,0 +1,13 @@
+Address = 62.113.241.235
+Subnet = 10.243.232.121
+Subnet = 42:7d8f:9e3a:dcc7:9b22:d1ca:7e28:fe9c
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA9EtaOHLa0CyOGpX3rzMLqi9HqrjzVe3XdSfcb9QPYwcbxpPYNLLk
+/1+4vxOI/TEh1QCu0bzPLy8tAwKF2DwnCH72yae17I0jVMW29Ng3Fdjzb3SmWJbf
+C87X7c+Nx5+Yc7OIdvTi/BGPNpDEp7nJugubH1whSFfulCDbsGU3rX5IsDUiw4ha
+B+5wH1coQl+Yp+M1ws5+PoHgYQ/ApYPBKEn+H7JAdnOTLbo0eI3B1PuDUrsMakMq
+s4f74d2Z405xUGHhRRcerF0h5VD58TADxx7RSRd7oR06KlXM/RaqOkw9vzvA2vBq
+CC+LdtIV7wWxF3uRAnk6odeFvqZTHvR4WQIDAQAB
+-----END RSA PUBLIC KEY-----
+
diff --git a/retiolum/hosts/smove b/retiolum/hosts/smove
new file mode 100644
index 00000000..fc7e194f
--- /dev/null
+++ b/retiolum/hosts/smove
@@ -0,0 +1,9 @@
+Subnet = 10.243.42.42
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzFFj6yAy2qC4gVrUV5vN6PztulRggkyXIMr2oPmPLuB85uxJE9nI
+9uvsQdbgcmmEM++moPM/ASCEXuu1ikUK1Gl+8C3rv2IxF/zhcrWEJV4e4EvHrBWP
+Xt4hSPyFG3LYpaX1OAWL2zmCvGVDmflWp+YkbBRrkMMEyXg0gZMNx+E7yJiNVYFo
+DZ7p4VSncWsAqk0I1varQpkl7BR6p7QcJlMO403Rh2oQT1bPXskkZsfAyXN8wJTP
+ATiTm5vijXiRUao+h9L60oxQTcvi9hcbhg+FpB3HYx2Rq6lWR0SqDO2OiBTTJnFM
+6qvN7Wfdmxim0mLAwaqccRLCWA06iN8b7wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/soundflower b/retiolum/hosts/soundflower
new file mode 100644
index 00000000..25de9776
--- /dev/null
+++ b/retiolum/hosts/soundflower
@@ -0,0 +1,11 @@
+Subnet = 10.243.69.184
+Subnet = 42:5f6b:4756:e6a3:d304:adad:fef8:7e2f
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0a0oenAy9MDa2M6NoLtB8elduGgc3oLtUwsm3iUu6w8L+Je5TndN
+H8dPn3sByUk1Jkd8tGGRk/vSFj/mtUn7xXKCnFXfKDqVowu/0KS3Q+6o4mcoATeb
+Ax7e6Cz1YH5+qhQjR7apuase9X9Dzp56//5VW2gaScvWevvzrij2x7eNvJRF+W/l
+FDXc8zBPkFW5TLFHOizRoLl4mK1hz2NrUiqcq5Ghs2yPsFxl/o5+e2MOwtdI49T6
+lMkeshAeNOSMKYfP9nmHZoKI/MIpGak0EF3ZQtLvyv+tM2Q0nuwH3RvxlK/Xf6U+
+8SoQu4yRIeK+pMiLEHhFPzBpk+sblUlG7QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/steve b/retiolum/hosts/steve
new file mode 100644
index 00000000..f86eaa50
--- /dev/null
+++ b/retiolum/hosts/steve
@@ -0,0 +1,10 @@
+Subnet = 42:58a0:e7b1:506e:b09e:1b68:5149:c6e8/128
+Subnet = 42.145.33.57/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2mt6xByDU2eVsQhjG33vT18Byfxqq4TPOvbV8RAyx0RWeolXGWnx
+p+wKHVITCyL5JCYs7fUYQoDC900bQa/waWgcN8dHfiUmUPtiUjcc35UWaNTLkVGs
+XEe47JMpnnB3D8ynXXKHsG8JXFjpxQpan/fnSuUG7nsB6anxjNHstkmsGGp60P1V
+6Xt5GcN+Mw1peH5LhIOcXaMNEHj/DlIjQSubCf3yelcxoSgnZibP5GfiI6JwKXDu
+A3Sv+wfAGTYdTOE6RBsvBI0lTNUSw02WxaMG4Hfe6+19XEnC1bSwg8+7VsqFmeWi
+uoaQeerhP1QD3GIX81Xe8ENvvFGzCdfARwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/supernode b/retiolum/hosts/supernode
new file mode 100644
index 00000000..354beba0
--- /dev/null
+++ b/retiolum/hosts/supernode
@@ -0,0 +1,13 @@
+Address = 46.252.21.5
+Subnet = 42:0:0:0:0:0:0:255/128
+Subnet = 10.243.0.1/32
+Subnet = 0.0.0.0/0
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAr3DlBmQxP9UTBCkohK8FCYSk2td4Ov5lQYvC3Adx04lEWHfp+0nP
+sShYqqN9Aj3iCqj/DHx5jGuSqjyTmmFWIOMM9IwKMo2Oiz/PcBM56N6gzIHuR5wj
++0bV0NRhePD2Tqo3zsEly9Hxw7xmz8azm5l4GcyOtgdRV7R1T3j/jB/9Kv2sj2Y7
+1zhSedCxjt/+NosiZZGE2JhLjzMgsCZSroAIKCZ3X/DP81mTTRxibjol82/Qn61I
+b7GbuuB7SwjtZ+9xjsExN1JX5+AFuw9a3AkYuKWLpP50YY16/OTPq7flmB/EtK+Z
+rrESIYKtX7pJbLc8Ywi0hBL5oPm07q+0BQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/tahoe b/retiolum/hosts/tahoe
new file mode 100644
index 00000000..3510fe0a
--- /dev/null
+++ b/retiolum/hosts/tahoe
@@ -0,0 +1,11 @@
+Subnet = 10.243.57.85
+Subnet = 42:2f06:b899:a3b5:1dcf:51a4:a02b:8731
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAx6R+CuJu4Bql+DgGPpE7wI+iasRY6ltxW0/L04uW9XiOKiEjx66y
+QMMaW18bcb0SOfTE8qYo8pOsZ5E9FFPY6cKH4DGi8g1FpaODle9V8RrVg3F7RuZ8
+dXDXeZxvYvJ2LwPBvlr1aisqJqgxAwF2ipPPX97rAYbp46a/vkgU5bPF1OFlTDaH
+9jjThuidiEwY4EMtJGKisnTGx8yS5iQibDMqzrcRpCxCLcl68FgFNKCTtSIj1mo6
+hgO1ZKmHw73ysmrL2tImmalHYcqDJnq/KInG2ZkCZI/2ZqfJyrRSTk86t5ubfD6p
+egC5N0Y5dQHJd66AytNwXxymiAcWuYth9QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/taschenkrebs b/retiolum/hosts/taschenkrebs
new file mode 100644
index 00000000..94c37ead
--- /dev/null
+++ b/retiolum/hosts/taschenkrebs
@@ -0,0 +1,11 @@
+Subnet = 10.243.0.66/32
+Subnet = 42:55bf:5f2b:73f4:f989:910e:ee73:2831/128
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA0YAfK9s29WDjJmiri3Oj0hEyjKui9ylA3mlmWSiTLnk1O2REOwgD
+5DPsdYPbu+bTkW7GdzcxX/mNvHogWgC+2+F70dles1lDiSDUhSQOEHFMlz+rBbvz
+FGY3Xmm3m3qdRYOcpHUXL/ZXN6kBvsl2b5rfEkejRb+Z1OOLjssISEzNe2vPEnp4
+OmY8ZQA5UAjnxsX+GKsH2OBqD+6Xm+/l/XLHDApHfby+X3upXaJRBjUAp8DiOm0T
+hVHfYXEE3iuC8JaCzWSFtG+4qLXf9MJ5xRfwUkuyPqiiTIpeM8GxHQJ+l+QKycNd
+Dk+9AwsQ/WsoXMHqIWHyNmuqhr82wEQo4QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/terrapi b/retiolum/hosts/terrapi
new file mode 100644
index 00000000..cf1748eb
--- /dev/null
+++ b/retiolum/hosts/terrapi
@@ -0,0 +1,11 @@
+Subnet = 10.243.30.159
+Subnet = 42:b0bd:090e:2a37:2cb4:3314:58e7:20d1
+
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAtVhVDRBzq0L6JtdVUVEakBzhMP2RjOj7cHZnEUsXzl1TXxuOBhL1
+XOXd3LUuU0jNMMvzxO2VU7K/wM6lX30B6ryqDSfsXKEBM60BiGVzb4Kd+7No76RN
+0NsoLygtvtOm1SmvvT1UCsjomoIE4eGdBDsfQzNKt2PUoh/0rTZBHd6qGJuCZQSX
+F4IRby4jzYvjOsaSi7GVadvhoyETVxbUAi9VquxOltytA+Ud4CXPb/JW25uVmQQK
+RXhoWahWJGJ2WJLGnT1RkTvFQk0zM3XJfPBVItnKCYHuE5HMU/5nnnPvKWiICdsA
+1NNU8+kXtK3IJEHwfpRWe/isMj8rROU37wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/tincdroid b/retiolum/hosts/tincdroid
new file mode 100644
index 00000000..c240f3d6
--- /dev/null
+++ b/retiolum/hosts/tincdroid
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.11/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwZSgdnymspnwy8NOJ1UKVIbUXxaDUCLWGGtSpYvRt4wrzkIMpeyc
++Bi2c/85Guy6B5H7X+3hMY7YFzM8AiixVr/FCAlKFwseZOc8ld07PuUPVtqdRN9N
+Dy4dqATaaWvjGL9320AJmccbYvoV0MZGTmWk86ZaA06tgDb0ZihEfYEFhw+5fakE
+7mxpdYmVdzaqScRyKWCF7ogn91/fQ01om/hsl+wzTI/ykqPTUumdNcijBMIK8EtZ
+qJbgOt9NSKulhDBFJ02vJmt3o6hmJSONjKcN7dify/ZotQffGCRMgdaWx0YTQJxY
+VJ1rPLlbZaPWRydsbMm3BTZAdMRXUq3uDwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/upm b/retiolum/hosts/upm
new file mode 100644
index 00000000..ec1c6de5
--- /dev/null
+++ b/retiolum/hosts/upm
@@ -0,0 +1,9 @@
+Subnet = 42.185.142.239/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA5fuAUXiquBrtqyZO7L6vGqR2JiWHkglJknTIrAJJLiWlnD0qeFKa
+tJYCYkpMdkMX9o+EExf+WDgufMyjiF/AQMfQLKqk+K4UnZ4zx1kfY1yLFLue7yWt
+mVO8b+NCSSGOuUX+YA9OiZ29Hv6N71Q2tn+1wS5kQlmly31LhBQV9X+RJ4HQlsEv
+qEYLliy0mBMdch1wdThc6/kI4VOuX47rFfTvJ+qOAG/a4v2PpiSX9GwZNgd7ce1+
+poTM1nR6KePXdyjXNtRDNnRAK25KA+M7waJZgdDF2zPNQRZ/YT01opHiHVhb/X2h
+AaHTB6/r6BYHbtVidRIwKRzrHiV61aEviwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/vault b/retiolum/hosts/vault
new file mode 100644
index 00000000..7ed3866c
--- /dev/null
+++ b/retiolum/hosts/vault
@@ -0,0 +1,10 @@
+Subnet = 10.243.229.17
+Subnet = 42:17ed:1eff:5aab:a541:57a2:7ca2:5c38
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzra4v9cIU8mUeC8Vr1YUTWxir/IexD4FlGc087+i7hu6LLpt7Xi8
+XdwiGMTmQLegohtaVN3yShX1a5YywAboxaZFS1aLFBptmV9VIMtsTJRIgm2dBwMy
+5tFRfu3ElV408JBr8OGwYC967p/SY5hxvSAQRc2cmSeY5duWGxybpzfdKmnjnmLr
+pGfmavBaLAi2DP+KejCFjAu4oWayVlM2BIXtbtxxn90JvZ8HI4gdfHLBbwfxiEHb
+qODqiWbu7wznQ3g4N5SUW2rq8WUqubufcx30Z+096doc0i+Zdxb5JBU79CGTNcbZ
+X6Spc/CtkrLNbsTCjVmXgNvYo6WZeg4+rwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ytart b/retiolum/hosts/ytart
new file mode 100644
index 00000000..09a55f65
--- /dev/null
+++ b/retiolum/hosts/ytart
@@ -0,0 +1,9 @@
+Subnet = 10.243.65.226/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2yCCN8nAPmZNL75Jr+FtfP5jmyuqg7IpgfW03L3s8Gg7NB1eTQAg
+UFPh13cj4lZleZOl3Yus7yx4HxMO8tYCptqnRPyP+UXrxvL+kECS4J3rLzjH/eOM
+0oAxuEe+DOa5R9Vj2bRtTouePlEvXDpgZZcDnedutRUYFGLNvkoWxu0RGqfQaJmd
+7KtOk1NJn9efNqwpl6ejPj5A+ivh2T1vAMWherM60JTjjhNGiSP4so0WG8PlBPYc
+GKnmMSQl0u5n10uTvLoVvnSfLj/QvL3d8abTrFV2lRqaCTJy+lxgkS1A5AnsTP1G
+OBbm/Gk9hRuYy2iP6FQ65q64/JfoeoqpPwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/scripts/README b/retiolum/scripts/README
new file mode 100644
index 00000000..4dbb42af
--- /dev/null
+++ b/retiolum/scripts/README
@@ -0,0 +1,16 @@
+This Folder contains all the cool scripts created for tinc_retiolum
+
+currently the following functions are deployed:
+
+adv_graphgen/ - makefu
+ this folder contains a script suite which parses the interesting
+ parameters from the syslog file by sending SIGUSR2 to the tinc process
+
+tinc_multicast/ - Miefda,Lassulus
+ A tinc multicast script suite which provides automagic-discovery in a
+ local network by utilizing multicast
+
+tinc_setup/ - makefu (i am so sorry...)
+ A number of scripts which build and configure tinc on a local machine.
+ Core is the install.sh script which actually writes the configuration
+ and creates users as well as private/public keys
diff --git a/retiolum/scripts/adv_graphgen/DEPS b/retiolum/scripts/adv_graphgen/DEPS
new file mode 100644
index 00000000..b9a591d3
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/DEPS
@@ -0,0 +1,4 @@
+graphviz
+imagemagick
+python2
+pygeoip
diff --git a/retiolum/scripts/adv_graphgen/Makefile b/retiolum/scripts/adv_graphgen/Makefile
new file mode 100644
index 00000000..fafac84e
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/Makefile
@@ -0,0 +1,4 @@
+install:
+ #punani install graphviz
+ echo "add this line to your tinc.conf if you dare:"
+ echo 'GraphDumpFile = |/krebs/retiolum/scripts/adv_graphgen /srv/http/tmp/graphs/'
diff --git a/retiolum/scripts/adv_graphgen/README b/retiolum/scripts/adv_graphgen/README
new file mode 100644
index 00000000..082e0f2b
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/README
@@ -0,0 +1,28 @@
+The folder contains a number of scripts which provide a convenient way to
+generate advanced graphs from the SIGUSR2 output of tinc.
+
+it currently contains the following files:
+
+sanitize.sh:
+ wrapper arond parse.py which filters the syslog file for all tinc
+ related lines and removes the status informations:
+ this means that
+ <code>
+ May 19 20:40:44 servarch dnsmasq[5382]: reading /etc/resolv.conf
+ May 19 20:41:38 servarch tinc.retiolum[4780]: Error looking up pa-sharepoint.informatik.ba-stuttgart.de port 655: Name or service not known
+ </code>
+ becomes
+ <code>
+ Error looking up pa-sharepoint.informatik.ba-stuttgart.de port 655: Name or service not known
+ </code>
+ and so on.
+ It also provides a wrapper around graphviz which automagically
+ generates graphs from the produced graph file
+
+parse.py:
+ reads from stdin the sanitized syslog file and prints a valid dot file
+ from the given output.
+ The parser module may also produce any other output (e.g. for dns
+ entries and so on) you will need to actually read and modify the source
+ in order to be able to do this. ~May the source be with you~
+
diff --git a/retiolum/scripts/adv_graphgen/all_the_graphs.sh b/retiolum/scripts/adv_graphgen/all_the_graphs.sh
new file mode 100755
index 00000000..381c7aeb
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/all_the_graphs.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+(
+ echo "`date` begin all graphs" >> /tmp/build_graph
+ cd $(dirname $(readlink -f $0))
+ PATH=$PATH:../../../util/bin/
+ export LOG_FILE=/var/log/tinc-retiolum.log
+ export TINC_LEGACY=true
+ EXTERNAL_FOLDER=/var/www/euer.krebsco.de/graphs/retiolum
+ INTERNAL_FOLDER=/var/www/euer/graphs/retiolum
+ begin=`timer`
+ export GRAPHITE_HOST="no-omo"
+ export GEOCTIYDB="$PWD/GeoLiteCity.dat"
+ (python tinc_stats/Log2JSON.py | python tinc_stats/Geo.py > $INTERNAL_FOLDER/marker.json)&
+ (./anonytize.sh $EXTERNAL_FOLDER && echo "`date` anonytize done" >> /tmp/build_graph)&
+ (./sanitize.sh $INTERNAL_FOLDER && echo "`date` sanitize done" >> /tmp/build_graph)&
+# wait
+ graphitec "retiolum.graph.buildtime" "$(timer $begin)" >> /tmp/build_graph
+ echo "`date` end all graphs" >> /tmp/build_graph
+)&
diff --git a/retiolum/scripts/adv_graphgen/anonytize.sh b/retiolum/scripts/adv_graphgen/anonytize.sh
new file mode 100755
index 00000000..4c16daf9
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/anonytize.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+set -euf
+cd $(dirname `readlink -f $0`)
+GRAPH_SETTER1=dot
+GRAPH_SETTER2=circo
+GRAPH_SETTER3='neato -Goverlap=prism '
+GRAPH_SETTER4=sfdp
+LOG_FILE=${LOG_FILE:-/var/log/syslog}
+TYPE=svg
+TYPE2=png
+OPENER=/bin/true
+DOTFILE=`mktemp --suffix=anon`
+trap 'rm $DOTFILE' INT TERM KILL EXIT
+sudo -E python tinc_stats/Log2JSON.py |\
+ python tinc_stats/Graph.py anonymous> $DOTFILE
+
+
+i=1
+for setter in dot circo 'neato -Goverlap=prism ' sfdp
+do
+ tmpgraph=`mktemp --tmpdir=$1`
+ $setter -T$TYPE -o $tmpgraph $DOTFILE
+ chmod go+rx $tmpgraph
+ mv $tmpgraph $1/retiolum_$i.$TYPE
+ i=`expr $i + 1`
+done
+convert $1/retiolum_1.$TYPE $1/retiolum_1.$TYPE2
+#convert -resize 20% $1/retiolum_2.$TYPE $1/retiolum_2.$TYPE2
+#convert -resize 20% $1/retiolum_3.$TYPE $1/retiolum_3.$TYPE2
+#convert -resize 20% $1/retiolum_4.$TYPE $1/retiolum_4.$TYPE2
diff --git a/retiolum/scripts/adv_graphgen/map.html b/retiolum/scripts/adv_graphgen/map.html
new file mode 100644
index 00000000..ef8a0565
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/map.html
@@ -0,0 +1,88 @@
+
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Simple Map</title>
+ <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
+ <meta charset="utf-8">
+ <style>
+ html, body, #map-canvas {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ }
+ </style>
+ <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
+ <script type="text/javascript" src="jquery.ui.map.js"></script>
+ <script>
+ var map;
+ var markerlist ={};
+ function addInfoWindow(marker, message) {
+ var info = message;
+
+ var infoWindow = new google.maps.InfoWindow({
+ content: message
+ });
+
+ google.maps.event.addListener(marker, 'click', function () {
+
+ // close all the infowindows
+ $.each(markerlist,function (k,v){
+ v["infowin"].close()
+ });
+ infoWindow.open(map, marker);
+ });
+ return infoWindow;
+ }
+ function initialize() {
+ var mapOptions = {
+ zoom: 5,
+ center: new google.maps.LatLng(51,9),
+ mapTypeId: google.maps.MapTypeId.ROADMAP
+ };
+ map = new google.maps.Map(document.getElementById('map-canvas'),
+ mapOptions);
+
+ $.getJSON("marker.json",function (data){
+ $.each(data,function (k,v) {
+
+ // add initial marker
+ var pt=new google.maps.LatLng(v["latitude"],v["longitude"])
+ var marker= new google.maps.Marker({
+ id: k,map:map,title: k,position:pt,content:k})
+
+ // add edges
+ $.each(v["to"],function(iter,val){
+ var line = [
+ pt,
+ new google.maps.LatLng(val['latitude'],val['longitude'])
+ ]
+
+ var connector = new google.maps.Polyline({
+ path:line,
+ strokeColor: "#FF0000",
+ strokeOpacity: 1.0,
+ strokeWeight: 2
+ })
+ connector.setMap(map);
+ val["line"]=connector
+
+ })
+
+
+ marker["infowin"]=addInfoWindow(marker,k+'<br/>'+v["city"]);
+ markerlist[k] = marker;
+ });
+ })
+ };
+
+ google.maps.event.addDomListener(window, 'load', initialize);
+
+ </script>
+ </head>
+ <body>
+ <div id="map-canvas"></div>
+ </body>
+</html>
diff --git a/retiolum/scripts/adv_graphgen/sanitize.sh b/retiolum/scripts/adv_graphgen/sanitize.sh
new file mode 100755
index 00000000..8da6ec70
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/sanitize.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -euf
+cd $(dirname `readlink -f $0`)
+GRAPH_SETTER1=dot
+GRAPH_SETTER2=circo
+GRAPH_SETTER3='neato -Goverlap=prism '
+GRAPH_SETTER4=sfdp
+LOG_FILE=${LOG_FILE:-/var/log/syslog}
+TYPE=svg
+TYPE2=png
+OPENER=/bin/true
+DOTFILE=`mktemp --suffix=san`
+trap 'rm $DOTFILE' INT TERM KILL EXIT
+sudo -E python tinc_stats/Log2JSON.py |\
+ python tinc_stats/Graph.py complete > $DOTFILE
+
+
+i=1
+for setter in dot circo 'neato -Goverlap=prism ' sfdp
+do
+ tmpgraph=`mktemp --tmpdir=$1`
+ $setter -T$TYPE -o $tmpgraph $DOTFILE
+ chmod go+rx $tmpgraph
+ mv $tmpgraph $1/retiolum_$i.$TYPE
+ i=`expr $i + 1`
+done
+
+convert $1/retiolum_1.$TYPE $1/retiolum_1.$TYPE2
+#convert -resize 20% $1/retiolum_2.$TYPE $1/retiolum_2.$TYPE2
+#convert -resize 20% $1/retiolum_3.$TYPE $1/retiolum_3.$TYPE2
+#convert -resize 20% $1/retiolum_4.$TYPE $1/retiolum_4.$TYPE2
+rm $DOTFILE
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/Availability.py b/retiolum/scripts/adv_graphgen/tinc_stats/Availability.py
new file mode 100755
index 00000000..a1ef13f1
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/Availability.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+
+import sys,json
+""" TODO: Refactoring needed to pull the edges out of the node structures again,
+it should be easier to handle both structures"""
+DUMP_FILE = "/krebs/db/availability"
+
+def get_all_nodes():
+ import os
+ return os.listdir("/etc/tinc/retiolum/hosts")
+
+def generate_stats():
+ """ Generates availability statistics of the network and nodes
+ """
+ import json
+ jlines = []
+ try:
+ f = open(DUMP_FILE,'r')
+ for line in f:
+ jlines.append(json.loads(line))
+ f.close()
+ except Exception,e:
+ pass
+ all_nodes = {}
+ for k in get_all_nodes():
+ all_nodes[k] = get_node_availability(k,jlines)
+ print ( json.dumps(all_nodes))
+
+def get_node_availability(name,jlines):
+ """ calculates the node availability by reading the generated dump file
+ adding together the uptime of the node and returning the time
+ parms:
+ name - node name
+ jlines - list of already parsed dictionaries node archive
+ """
+ begin = last = current = 0
+ uptime = 0
+ for stat in jlines:
+ if not stat['nodes']:
+ continue
+ ts = stat['timestamp']
+ if not begin:
+ begin = last = ts
+ current = ts
+ if stat['nodes'].get(name,{}).get('to',[]):
+ uptime += current - last
+ else:
+ pass
+ last = ts
+ all_the_time = last - begin
+ try:
+ return uptime/ all_the_time
+ except:
+ return 1
+
+if __name__ == "__main__":
+ generate_stats()
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/BackwardsReader.py b/retiolum/scripts/adv_graphgen/tinc_stats/BackwardsReader.py
new file mode 100644
index 00000000..6bdbf43c
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/BackwardsReader.py
@@ -0,0 +1,35 @@
+import sys
+import os
+import string
+
+class BackwardsReader:
+ """ Stripped and stolen from : http://code.activestate.com/recipes/120686-read-a-text-file-backwards/ """
+ def readline(self):
+ while len(self.data) == 1 and ((self.blkcount * self.blksize) < self.size):
+ self.blkcount = self.blkcount + 1
+ line = self.data[0]
+ try:
+ self.f.seek(-self.blksize * self.blkcount, 2)
+ self.data = string.split(self.f.read(self.blksize) + line, '\n')
+ except IOError:
+ self.f.seek(0)
+ self.data = string.split(self.f.read(self.size - (self.blksize * (self.blkcount-1))) + line, '\n')
+
+ if len(self.data) == 0:
+ return ""
+
+ line = self.data[-1]
+ self.data = self.data[:-1]
+ return line + '\n'
+
+ def __init__(self, file, blksize=4096):
+ """initialize the internal structures"""
+ self.size = os.stat(file)[6]
+ self.blksize = blksize
+ self.blkcount = 1
+ self.f = open(file, 'rb')
+ if self.size > self.blksize:
+ self.f.seek(-self.blksize * self.blkcount, 2)
+ self.data = string.split(self.f.read(self.blksize), '\n')
+ if not self.data[-1]:
+ self.data = self.data[:-1]
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/Geo.py b/retiolum/scripts/adv_graphgen/tinc_stats/Geo.py
new file mode 100755
index 00000000..038ca9c0
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/Geo.py
@@ -0,0 +1,54 @@
+#!/usr/bin/python3
+# -*- coding: utf8 -*-
+import sys,json,os
+from Graph import delete_unused_nodes,resolve_myself
+GEODB=os.environ.get("GEOCITYDB","GeoLiteCity.dat")
+
+def add_geo(nodes):
+ from pygeoip import GeoIP
+ gi = GeoIP(GEODB)
+
+ for k,v in nodes.iteritems():
+ try:
+ nodes[k].update(gi.record_by_addr(v["external-ip"]))
+ except Exception as e:
+ sys.stderr.write(str(e))
+ sys.stderr.write("Cannot determine GeoData for %s\n"%k)
+
+ return nodes
+def add_coords_to_edges(nodes):
+ from pygeoip import GeoIP
+ gi = GeoIP(GEODB)
+
+ for k,v in nodes.iteritems():
+ for i,j in enumerate(v.get("to",[])):
+ data=gi.record_by_addr(j["addr"])
+ try:
+ j["latitude"]=data["latitude"]
+ j["longitude"]=data["longitude"]
+ except Exception as e: pass
+
+ return nodes
+
+def add_jitter(nodes):
+ from random import random
+ #add a bit of jitter to all of the coordinates
+ max_jitter=0.005
+ for k,v in nodes.iteritems():
+ jitter_lat= max_jitter -random()*max_jitter*2
+ jitter_long= max_jitter -random()*max_jitter*2
+ try:
+ v["latitude"]= v["latitude"] + jitter_lat
+ v["longitude"]= v["longitude"] + jitter_long
+ for nodek,node in nodes.iteritems():
+ for to in node['to']:
+ if to['name'] == k:
+ to['latitude'] = v["latitude"]
+ to['longitude'] = v["longitude"]
+ except Exception as e: pass
+ return nodes
+
+if __name__ == "__main__":
+ import json
+ nodes = add_jitter(add_coords_to_edges(add_geo(resolve_myself(delete_unused_nodes(json.load(sys.stdin))))))
+ print (json.dumps(nodes))
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/Graph.py b/retiolum/scripts/adv_graphgen/tinc_stats/Graph.py
new file mode 100644
index 00000000..18c3d545
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/Graph.py
@@ -0,0 +1,231 @@
+#!/usr/bin/python
+from BackwardsReader import BackwardsReader
+from Graphite import GraphiteSender
+import sys,json,os
+from Supernodes import check_all_the_super
+from Availability import get_node_availability
+import sys,json
+from time import time
+DUMP_FILE = "/krebs/db/availability"
+
+
+def resolve_myself(nodes):
+ #resolve MYSELF to the real ip
+ for k,v in nodes.iteritems():
+ if v["external-ip"] == "MYSELF":
+ for nodek,node in nodes.iteritems():
+ for to in node['to']:
+ if to['name'] == k:
+ v["external-ip"] = to["addr"]
+ return nodes
+
+def dump_graph(nodes):
+ from time import time
+ graph = {}
+ graph['nodes'] = nodes
+ graph['timestamp'] = time()
+ f = open(DUMP_FILE,'a')
+ json.dump(graph,f)
+ f.write('\n')
+ f.close()
+
+def generate_availability_stats(nodes):
+ """ generates stats of from availability
+ """
+ jlines = []
+ try:
+ f = BackwardsReader(DUMP_FILE)
+ lines_to_use = 1000
+ while True:
+ if lines_to_use == 0: break
+ line = f.readline()
+ if not line: break
+ jline = json.loads(line)
+ if not jline['nodes']: continue
+
+ jlines.append(jline)
+ lines_to_use -=1
+ except Exception,e: sys.stderr.write(str(e))
+
+ for k,v in nodes.iteritems():
+ v['availability'] = get_node_availability(k,jlines)
+ sys.stderr.write( "%s -> %f\n" %(k ,v['availability']))
+
+def generate_stats(nodes):
+ """ Generates some statistics of the network and nodes
+ """
+ for k,v in nodes.iteritems():
+ conns = v.get('to',[])
+ for c in conns: #sanitize weights
+ if float(c['weight']) > 9000: c['weight'] = str(9001)
+ elif float(c['weight']) < 0: c['weight'] = str(0)
+ v['num_conns'] = len(conns)
+ v['avg_weight'] = get_node_avg_weight(conns)
+
+def get_node_avg_weight(conns):
+ """ calculates the average weight for the given connections """
+ if not conns:
+ sys.syderr.write("get_node_avg_weight: connection parameter empty")
+ return 9001
+ else:
+ return sum([float(c['weight']) for c in conns])/len(conns)
+
+def delete_unused_nodes(nodes):
+ """ Deletes all the nodes which are currently not connected to the network"""
+ new_nodes = {}
+ for k,v in nodes.iteritems():
+ if v['external-ip'] == "(null)":
+ continue
+ if v.get('to',[]):
+ new_nodes[k] = v
+ for k,v in new_nodes.iteritems():
+ if not [ i for i in v['to'] if i['name'] in new_nodes]:
+ del(k)
+ return new_nodes
+
+def merge_edges(nodes):
+ """ merge back and forth edges into one
+ DESTRUCTS the current structure by deleting "connections" in the nodes
+ """
+ for k,v in nodes.iteritems():
+ for con in v.get('to',[]):
+ for i,secon in enumerate(nodes.get(con['name'],{}).get('to',[])):
+ if k == secon['name']:
+ del (nodes[con['name']]['to'][i])
+ con['bidirectional'] = True
+
+
+def print_head():
+ print ('digraph retiolum {')
+ print (' graph [center packMode="clust"]')
+ print (' node[shape=box,style=filled,fillcolor=grey]')
+ print (' overlap=false')
+
+def print_stat_node(nodes):
+ ''' Write a `stats` node in the corner
+ This node contains infos about the current number of active nodes and connections inside the network
+ '''
+ from time import localtime,strftime
+ num_conns = 0
+ num_nodes = len(nodes)
+ try:
+ msg = '%s.num_nodes %d %d\r\n' %(g_path,num_nodes,begin)
+ s.send(msg)
+ except Exception as e: pass
+ #except: pass
+ for k,v in nodes.iteritems():
+ num_conns+= len(v['to'])
+ node_text = " stats_node [label=\"Statistics\\l"
+ node_text += "Build Date : %s\\l" % strftime("%Y-%m-%d %H:%M:%S",localtime())
+ node_text += "Active Nodes: %s\\l" % num_nodes
+ node_text += "Connections : %s\\l" % num_conns
+ node_text += "\""
+ node_text += ",fillcolor=green"
+ node_text += "]"
+ print(node_text)
+
+def print_node(k,v):
+ """ writes a single node and its edges
+ edges are weightet with the informations inside the nodes provided by
+ tinc
+ """
+
+ node = " "+k+"[label=\""
+ node += k+"\\l"
+ node += "availability: %f\\l" % v['availability']
+ if v.has_key('num_conns'):
+ node += "Num Connects:"+str(v['num_conns'])+"\\l"
+ node += "external:"+v['external-ip']+":"+v['external-port']+"\\l"
+ for addr in v.get('internal-ip',['dunno lol']):
+ node += "internal:%s\\l"%addr
+ node +="\""
+
+ if v['num_conns'] == 1:
+ node += ",fillcolor=red"
+ elif k in supernodes:
+ node += ",fillcolor=steelblue1"
+ node += "]"
+ print node
+
+def print_anonymous_node(k,v):
+ """ writes a single node and its edges
+ edges are weightet with the informations inside the nodes provided by
+ tinc
+ """
+
+ node = " "+k #+"[label=\""
+ print node
+
+def print_edge(k,v):
+ for con in v.get('to',[]):
+ label = con['weight']
+ w = int(con['weight'])
+ weight = str(1000 - (((w - 150) * (1000 - 0)) / (1000 -150 )) + 0)
+
+ length = str(float(w)/1500)
+ if float(weight) < 0 :
+ weight= "1"
+
+ edge = " "+k+ " -> " +con['name'] + " [label="+label + " weight="+weight
+ if con.get('bidirectional',False):
+ edge += ",dir=both"
+ edge += "]"
+ print edge
+
+def anonymize_nodes(nodes):
+ #anonymizes all nodes
+ i = "0"
+ newnodes = {}
+ for k,v in nodes.iteritems():
+ for nodek,node in nodes.iteritems():
+ for to in node['to']:
+ if to['name'] == k:
+ to['name'] = i
+ newnodes[i] = v
+ i = str(int(i)+1)
+ return newnodes
+
+if __name__ == "__main__":
+ supernodes= []
+ try:
+ gr = GraphiteSender(os.environ.get("GRAPHITE_HOST","localhost"))
+ begin = time()
+ except Exception as e:
+ sys.stderr.write( "Cannot connect to graphite: " + str(e))
+ if len(sys.argv) != 2 or sys.argv[1] not in ["anonymous","complete"]:
+ print("usage: %s (anonymous|complete)")
+ sys.exit(1)
+
+ nodes = json.load(sys.stdin)
+ nodes = delete_unused_nodes(nodes)
+ print_head()
+ generate_stats(nodes)
+ merge_edges(nodes)
+
+
+ if sys.argv[1] == "anonymous":
+ nodes = anonymize_nodes(nodes)
+
+ for k,v in nodes.iteritems():
+ print_anonymous_node(k,v)
+ print_edge(k,v)
+
+ elif sys.argv[1] == "complete":
+ for supernode,addr in check_all_the_super():
+ supernodes.append(supernode)
+ generate_availability_stats(nodes)
+ for k,v in nodes.iteritems():
+ print_node(k,v)
+ print_edge(k,v)
+ try:
+ dump_graph(nodes)
+ except Exception,e:
+ sys.stderr.write("Cannot dump graph: %s" % str(e))
+ else:
+ pass
+
+ print_stat_node(nodes)
+ print ('}')
+ try:
+ gr.send("graph.anon_build_time",(time()-begin)*1000)
+ except Exception as e: pass
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/Graphite.py b/retiolum/scripts/adv_graphgen/tinc_stats/Graphite.py
new file mode 100644
index 00000000..5002d8e5
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/Graphite.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+
+import socket
+from time import time
+
+class GraphiteSender:
+ def __init__(self,host,port=2003,prefix="retiolum"):
+ self.host = host
+ self.port = port
+ self.prefix = prefix
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.sock.connect((host,port))
+
+ def send(name,data):
+ # construct a message for graphite, honor the configured prefix
+ self.sock.send("%s.%s %d %d\r\n"%(self.prefix,name,data,time()))
+
+ def send_raw(path,data):
+ #ignore the configured prefix, just it to the path given
+ self.sock.send("%s %d %d\r\n"%(path,data,time()))
+
+if __name__ == "__main__":
+ import sys
+ GraphiteSender(sys.argv[1]).send_raw(sys.argv[2],sys.argv[3])
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/Log2JSON.py b/retiolum/scripts/adv_graphgen/tinc_stats/Log2JSON.py
new file mode 100755
index 00000000..644cbc63
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/Log2JSON.py
@@ -0,0 +1,166 @@
+#!/usr/bin/python
+import subprocess
+import os
+import re
+import sys
+import json
+
+
+TINC_NETWORK =os.environ.get("TINC_NETWORK","retiolum")
+
+# is_legacy is the parameter which defines if the tinc config files are handled old fashioned (parse from syslog),
+# or if the new and hip tincctl should be used
+
+
+# Tags and Delimiters
+TINC_TAG="tinc.%s" % TINC_NETWORK
+BEGIN_NODES = "Nodes:"
+END_NODES = "End of nodes."
+BEGIN_SUBNET = "Subnet list:"
+END_SUBNET = "End of subnet list"
+BEGIN_EDGES = "Edges:"
+END_EDGES = "End of edges."
+def usage():
+ from sys import argv,exit
+ print("""usage: %s
+This tool dumps all tinc node informations as json
+
+ENVIRONMENT VARIABLES:
+ TINC_NETWORK The tinc network to dump
+ (default: retiolum)
+ LOG_FILE If legacy tinc is used, defines the log file where tinc stats are dumped in
+ (default: /var/log/everything.log)
+""" % argv[0])
+ exit(1)
+def debug(func):
+ from functools import wraps
+ @wraps(func)
+ def with_debug(*args,**kwargs):
+ print( func.__name__ + " (args: %s | kwargs %s)"% (args,kwargs))
+ return func(*args,**kwargs)
+ return with_debug
+
+
+def get_tinc_log_file():
+ # TODO parse logfile from somewhere
+ return os.environ.get("LOG_FILE","/var/log/everything.log")
+
+
+def parse_tinc_stats():
+ import subprocess
+ from time import sleep
+ from distutils.spawn import find_executable as which
+ #newest tinc
+ if which("tinc"):
+ return parse_new_input("tinc")
+ #new tinc
+ elif which("tincctl"):
+ return parse_new_input("tincctl")
+ #old tinc
+ elif which("tincd"):
+ # TODO refactor me
+ subprocess.call(["pkill","-SIGUSR2", "tincd"])
+ sleep(1)
+ return parse_input(get_tinc_block(get_tinc_log_file()))
+ #no tinc
+ else:
+ raise Exception("no tinc executable found!")
+
+#@debug
+def get_tinc_block(log_file):
+ """ returns an iterateable block from the given log file (syslog)
+ This function became obsolete with the introduction of tincctl
+ """
+ from BackwardsReader import BackwardsReader
+ tinc_block = []
+ in_block = False
+ bf = BackwardsReader(log_file)
+ BOL = re.compile(".*tinc.%s\[[0-9]+\]: " % TINC_NETWORK)
+ while True:
+ line = bf.readline()
+ if not line:
+ raise Exception("end of file at log file? This should not happen!")
+ line = BOL.sub('',line).strip()
+
+ if END_SUBNET in line:
+ in_block = True
+
+ if not in_block:
+ continue
+ tinc_block.append(line)
+
+ if BEGIN_NODES in line:
+ break
+ return reversed(tinc_block)
+
+def parse_new_input(tinc_bin):
+ nodes = {}
+ pnodes = subprocess.Popen([tinc_bin,"-n",TINC_NETWORK,"dump","reachable","nodes"], stdout=subprocess.PIPE).communicate()[0]
+ #pnodes = subprocess.check_output(["tincctl","-n",TINC_NETWORK,"dump","reachable","nodes"])
+ for line in pnodes.split('\n'):
+ if not line: continue
+ l = line.split()
+ nodes[l[0]]= { 'external-ip': l[2], 'external-port' : l[4] }
+ psubnets = subprocess.check_output([tinc_bin,"-n",TINC_NETWORK,"dump","subnets"])
+ for line in psubnets.split('\n'):
+ if not line: continue
+ l = line.split()
+ try:
+ if not nodes[l[2]].get('internal-ip',False):
+ nodes[l[2]]['internal-ip'] = []
+ nodes[l[2]]['internal-ip'].append(l[0].split('#')[0])
+ except KeyError:
+ pass # node does not exist (presumably)
+ pedges = subprocess.check_output([tinc_bin,"-n",TINC_NETWORK,"dump","edges"])
+ for line in pedges.split('\n'):
+ if not line: continue
+ l = line.split()
+ try:
+ if not nodes[l[0]].has_key('to') :
+ nodes[l[0]]['to'] = []
+ nodes[l[0]]['to'].append(
+ {'name':l[2],'addr':l[4],'port':l[6],'weight' : l[10] })
+ except KeyError:
+ pass #node does not exist
+ return nodes
+
+#@debug
+def parse_input(log_data):
+ nodes={}
+ for line in log_data:
+ if BEGIN_NODES in line :
+ nodes={}
+ for line in log_data:
+ if END_NODES in line :
+ break
+ l = line.replace('\n','').split() #TODO unhack me
+ nodes[l[0]]= { 'external-ip': l[2], 'external-port' : l[4] }
+ if BEGIN_SUBNET in line :
+ for line in log_data:
+ if END_SUBNET in line :
+ break
+ l = line.replace('\n','').split()
+ if not nodes[l[2]].get('internal-ip',False):
+ nodes[l[2]]['internal-ip'] = []
+ nodes[l[2]]['internal-ip'].append(l[0].split('#')[0])
+ if BEGIN_EDGES in line :
+ edges = {}
+ for line in log_data:
+ if END_EDGES in line :
+ break
+ l = line.replace('\n','').split()
+ if not nodes[l[0]].has_key('to') :
+ nodes[l[0]]['to'] = []
+ nodes[l[0]]['to'].append(
+ {'name':l[2],'addr':l[4],'port':l[6],'weight' : l[10] })
+ return nodes
+
+
+if __name__ == '__main__':
+ # TODO refactor me
+ from sys import argv
+ if len(argv) > 1:
+ usage()
+ else:
+ print json.dumps(parse_tinc_stats())
+
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/Supernodes.py b/retiolum/scripts/adv_graphgen/tinc_stats/Supernodes.py
new file mode 100644
index 00000000..ae0fae8f
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/Supernodes.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+
+def find_potential_super(path="/etc/tinc/retiolum/hosts"):
+ import os
+ import re
+
+ needle_addr = re.compile("Address\s*=\s*(.*)")
+ needle_port = re.compile("Port\s*=\s*(.*)")
+ for f in os.listdir(path):
+ with open(path+"/"+f) as of:
+ addrs = []
+ port = "655"
+
+ for line in of.readlines():
+
+ addr_found = needle_addr.match(line)
+ if addr_found:
+ addrs.append(addr_found.group(1))
+
+ port_found = needle_port.match(line)
+ if port_found:
+ port = port_found.group(1)
+
+ if addrs : yield (f ,[(addr ,int(port)) for addr in addrs])
+
+def try_connect(addr):
+ try:
+ from socket import socket,AF_INET,SOCK_STREAM
+ s = socket(AF_INET,SOCK_STREAM)
+ s.settimeout(2)
+ s.connect(addr)
+ s.settimeout(None)
+ s.close()
+ return addr
+ except Exception as e:
+ pass
+ #return ()
+
+def check_one_super(ha):
+ host,addrs = ha
+ valid_addrs = []
+ for addr in addrs:
+ ret = try_connect(addr)
+ if ret: valid_addrs.append(ret)
+ if valid_addrs: return (host,valid_addrs)
+
+def check_all_the_super(path="/etc/tinc/retiolum/hosts"):
+ from multiprocessing import Pool
+ p = Pool(20)
+ return filter(None,p.map(check_one_super,find_potential_super(path)))
+
+
+
+if __name__ == "__main__":
+ """
+ usage
+ """
+ for host,addrs in check_all_the_super():
+ print host,addrs
diff --git a/retiolum/scripts/adv_graphgen/tinc_stats/__init__.py b/retiolum/scripts/adv_graphgen/tinc_stats/__init__.py
new file mode 100644
index 00000000..d4a686bf
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats/__init__.py
@@ -0,0 +1,7 @@
+import Availability
+import BackwardsReader
+import Log2JSON
+import Supernodes
+import Geo
+import Graph
+import Graphite
diff --git a/retiolum/scripts/autostart/create-startup.sh b/retiolum/scripts/autostart/create-startup.sh
new file mode 100755
index 00000000..37edb972
--- /dev/null
+++ b/retiolum/scripts/autostart/create-startup.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+if test "${nosudo-false}" != true -a `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo "$0" "$@"
+ exit 23 # go to hell
+fi
+
+readlink="`readlink -f "$0"`"
+dirname="`dirname "$0"`"
+cd "$dirname"
+
+if [ -e /etc/init.d ];then
+ INIT_FOLDER=/etc/init.d
+ update-rc.d tinc defaults #TODO debian specific
+else
+ INIT_FOLDER=/etc/rc.d
+ echo "add tinc to DAEMONS in /etc/rc.conf" #TODO archlinux specific
+fi
+
+echo "retiolum" > /etc/tinc/nets.boot
+cp -a tinc $INIT_FOLDER
diff --git a/retiolum/scripts/autostart/tinc b/retiolum/scripts/autostart/tinc
new file mode 100755
index 00000000..12e77d6a
--- /dev/null
+++ b/retiolum/scripts/autostart/tinc
@@ -0,0 +1,94 @@
+#! /bin/sh
+#
+### BEGIN INIT INFO
+# Provides: tinc
+# Required-Start: $remote_fs $network
+# Required-Stop: $remote_fs $network
+# Should-Start: $syslog $named
+# Should-Stop: $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start tinc daemons
+# Description: Create a file $NETSFILE (/etc/tinc/nets.boot),
+# and put all the names of the networks in there.
+# These names must be valid directory names under
+# $TCONF (/etc/tinc). Lines starting with a # will be
+# ignored in this file.
+### END INIT INFO
+#
+# Based on Lubomir Bulej's Redhat init script.
+
+DAEMON="/usr/sbin/tincd"
+NAME="tinc"
+DESC="tinc daemons"
+TCONF="/etc/tinc"
+NETSFILE="$TCONF/nets.boot"
+NETS=""
+
+modprobe tun
+
+test -f $DAEMON || exit 0
+
+[ -r /etc/default/tinc ] && . /etc/default/tinc
+
+# foreach_net "what-to-say" action [arguments...]
+foreach_net() {
+ if [ ! -f $NETSFILE ] ; then
+ echo "Please create $NETSFILE."
+ exit 0
+ fi
+ echo -n "$1"
+ shift
+ egrep '^[ ]*[a-zA-Z0-9_-]+' $NETSFILE | while read net args; do
+ echo -n " $net"
+ "$@" $net $args
+ done
+ echo "."
+}
+
+start() {
+ $DAEMON $EXTRA -n "$@"
+}
+stop() {
+ $DAEMON -n $1 -k
+}
+reload() {
+ $DAEMON -n $1 -kHUP
+}
+restart() {
+ stop "$@"
+ sleep 0.5
+ i=0;
+ while [ -f /var/run/tinc.$1.pid ] ; do
+ if [ $i = '10' ] ; then
+ break
+ else
+ echo -n "."
+ sleep 0.5
+ i=$(($i+1))
+ fi
+ done
+ start "$@"
+}
+
+case "$1" in
+ start)
+ foreach_net "Starting $DESC:" start
+ ;;
+ stop)
+ foreach_net "Stopping $DESC:" stop
+ ;;
+ reload|force-reload)
+ foreach_net "Reloading $DESC configuration:" reload
+ ;;
+ restart)
+ foreach_net "Restarting $DESC:" restart
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/retiolum/scripts/github_listener/INSTALL b/retiolum/scripts/github_listener/INSTALL
new file mode 100644
index 00000000..20c0845c
--- /dev/null
+++ b/retiolum/scripts/github_listener/INSTALL
@@ -0,0 +1,13 @@
+# HowTo
+
+ useradd -r tinc
+ mkdir -p /opt/
+ git init github_listener
+ git remote add -f origin https://github.com/krebscode/painload.git
+ git config core.sparsecheckout true
+ echo retiolum/hosts/ >> .git/info/sparse-checkout
+ git pull origin master
+ ln -s $static_painload/retiolum/{scripts,bin} retiolum/
+ cp scripts/github_listener/github_listener.conf /etc/supervisor/conf.d/
+ cd ..
+ chown tinc:tinc -R github_listener
diff --git a/retiolum/scripts/github_listener/README b/retiolum/scripts/github_listener/README
new file mode 100644
index 00000000..57c30896
--- /dev/null
+++ b/retiolum/scripts/github_listener/README
@@ -0,0 +1,22 @@
+GITHUB_LISTENER
+===============
+
+The github listener is an application which listens for github post-receive
+hook calls and runs a script each time currently the github listener is
+used to create a tarball of all nodes in the retiolum darknet. the current
+tarball can be retrieved at http://euer.krebsco.de/retiolum/hosts.tar
+
+listen script
+=============
+
+the listen script is a quick hack which runs netcat in an e-loop together
+with a "logger" command to signalise successful tarball generation.
+
+
+github_listener.conf
+===================
+the supervisor config file
+
+References
+==========
+also see //retiolum/doc/git_checkout_only_hosts
diff --git a/retiolum/scripts/github_listener/github_listener.conf b/retiolum/scripts/github_listener/github_listener.conf
new file mode 100644
index 00000000..3ab07a21
--- /dev/null
+++ b/retiolum/scripts/github_listener/github_listener.conf
@@ -0,0 +1,6 @@
+[program:github_listener]
+command=nc -lvv -p 5432 -c "./handle_request /opt/github_listener/retiolum/hosts /var/www/euer.krebsco.de/retiolum/"
+user=tinc
+directory=/krebs/retiolum/scripts/github_listener/
+autorestart=true
+environment=GRAPHITE_HOST=no_omo
diff --git a/retiolum/scripts/github_listener/handle_request b/retiolum/scripts/github_listener/handle_request
new file mode 100755
index 00000000..211ca776
--- /dev/null
+++ b/retiolum/scripts/github_listener/handle_request
@@ -0,0 +1,28 @@
+#!/bin/sh
+# Possible Shell Vars
+# WEBDIR
+# HOSTFOLDER
+
+set -euf
+export GRAPHITE_HOST=${GRAPHITE_HOST:-no_omo}
+PATH=$PATH:../../../util/bin
+if [ "x${2:-}" = x ];then
+ echo "usage: $0 HOSTDIRECTORY WEBDIRECTORY"
+ exit 1
+fi
+NOW=$(timer)
+export HOSTDIR=${1:-../../hosts}
+WEBDIR=${2:-/var/www/euer.krebsco.de/retiolum/}
+echo "sorry for keeping you waiting, please be patient"
+
+cd $(dirname $(readlink -f $0))
+
+cd "$HOSTDIR"
+git pull origin master >&2
+echo "First step done"
+cd - >&2
+../../bin/create-supernode-tar $WEBDIR
+echo "almost done..."
+../../bin/create-host-tar $WEBDIR
+echo "Thank you for your patience! I stole $(timer $NOW)ms of your time, sorry about that."
+graphitec 'retiolum.pack.build_time' $(timer $NOW)
diff --git a/retiolum/scripts/routing/defaultroute.sh b/retiolum/scripts/routing/defaultroute.sh
new file mode 100755
index 00000000..d54e8bcf
--- /dev/null
+++ b/retiolum/scripts/routing/defaultroute.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+usage()
+{
+ echo "usage:"
+ echo "-h, print this help youre currently reading"
+ echo "-a activate routing"
+ echo "-d deactivate routing"
+}
+
+defaultroute=$(ip route show | grep default | awk '{ print $3 }')
+tincdir="/etc/tinc/retiolum"
+
+if [[ $(id -u) -gt 0 ]]; then
+ echo "This script should be run as root."
+ exit 1
+fi
+
+case "$1" in
+ -h|-help)
+ usage
+ exit 0;;
+ -a)
+ command="add"
+ ;;
+ -d)
+ command="del"
+ ;;
+ -*|*)
+ usage
+ exit 1;;
+esac
+
+cat $tincdir/tinc.conf | grep ConnectTo | cut -b 13- |
+while read host
+do
+ addr=$(cat $tincdir/hosts/$host | grep Address | cut -b 11-)
+ route $command $addr gw $defaultroute && echo $command $addr via $defaultroute
+done
diff --git a/retiolum/scripts/tinc_setup/README b/retiolum/scripts/tinc_setup/README
new file mode 100644
index 00000000..11d6f6e9
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/README
@@ -0,0 +1,18 @@
+This directory contains the build and install scripts for shack-retiolum
+
+1. build_arch
+ arch linux build script
+2. build_debian
+ debian build script
+3. build_debian_clean
+ debian script which builds a clean tinc daemon
+4. build_ec2
+ Amazon ec2 base instance build script
+5. install.sh
+ configures the tinc daemon
+ $1 is the nickname
+ $2 is the ip-address
+ also writes a python file inside the tinc/retiolum folder which posts
+ the public key into the IRC:freenode/#tincspasm
+6. build_no.de
+ nonfunct no.de smartmachine build script
diff --git a/retiolum/scripts/tinc_setup/autoupdate_cron.sh b/retiolum/scripts/tinc_setup/autoupdate_cron.sh
new file mode 100644
index 00000000..d5d41aaf
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/autoupdate_cron.sh
@@ -0,0 +1,7 @@
+cat <<EOF
+# Add these lines to your crontab:
+
+12 23 * * * /home/node/usr/sbin/tincd -n retiolum &>/dev/null
+12 23 * * * cd /home/node/etc/tinc/retiolum/hosts/ && /opt/local/bin/git pull && pkill -HUP tincd
+EOF
+
diff --git a/retiolum/scripts/tinc_setup/build_arch.sh b/retiolum/scripts/tinc_setup/build_arch.sh
new file mode 100755
index 00000000..5ef5d765
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/build_arch.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+set -e
+sudo pacman -S openssl gcc lzo
+curl http://www.tinc-vpn.org/packages/tinc-1.0.13.tar.gz | tar xz
+cd tinc-1.0.13
+./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+make
+sudo make install
+cd ..
+
+echo "overwriting python to python2"
+sed 's/\/usr\/bin\/python/\/usr\/bin\/python2/g' install.sh >install2.sh
+mv install2.sh install.sh
+
diff --git a/retiolum/scripts/tinc_setup/build_debian.sh b/retiolum/scripts/tinc_setup/build_debian.sh
new file mode 100755
index 00000000..52e61390
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/build_debian.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+set -x
+if [ ! "$MYIP" ]
+then
+ MYIP=10.0.7.7.55
+fi
+if [ ! "$MYHOSTNAME" ]
+then
+ MYHOSTNAME="penis"
+fi
+
+if [ "$MYHOSTNAME" = "penis" ];
+then
+ read -n1 -p "name is penis, are u sure? [yN]"
+ if [[ "$REPLY" != [yY] ]]
+ then
+ echo "then better RTFC"
+ echo "bailing out"
+ exit 0
+ fi
+fi
+apt-get install tinc git curl python
+
+./install.sh "$MYHOSTNAME" "$MYIP"
+
+# for autostart
+sed -i '/retiolum/d' /etc/tinc/nets.boot
+echo "retiolum" >> /etc/tinc/nets.boot
+sed -i '/EXTRA/d' /etc/tinc/nets.boot
+echo "EXTRA=\"\"" >> /etc/default/tinc
+
+/etc/init.d/tinc start
diff --git a/retiolum/scripts/tinc_setup/build_debian_clean.sh b/retiolum/scripts/tinc_setup/build_debian_clean.sh
new file mode 100755
index 00000000..a7332f4e
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/build_debian_clean.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+set -xe
+MYIP=10.0.7.7.55
+
+apt-get install tinc git curl gcc gcc-dev build-essential libssl-dev python
+
+git clone https://github.com/makefu/shack-retiolum.git
+
+mkdir build
+cd build
+curl http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz | tar
+xz
+cd lzo-2.04
+./configure --prefix=/usr
+make
+sudo make install
+cd ..
+curl http://www.tinc-vpn.org/packages/tinc-1.0.13.tar.gz | tar xz
+cd tinc-1.0.13
+./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+make
+sudo make install
+cd ../..
+
+cd shack-retiolum
+./install.sh `hostname` $MYIP
+
+rm shack-retiolum
+# for autostart
+echo "retiolum" >> /etc/tinc/nets.boot
+echo "EXTRA=\"--user=tincd --chroot\"" >> /etc/default/tinc
diff --git a/retiolum/scripts/tinc_setup/build_ec2.sh b/retiolum/scripts/tinc_setup/build_ec2.sh
new file mode 100755
index 00000000..79f2af28
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/build_ec2.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+sudo yum install -y gcc openssl-devel
+mkdir build
+cd build
+curl http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz | tar xz
+cd lzo-2.04
+./configure --prefix=/usr
+make
+sudo make install
+cd ..
+curl http://www.tinc-vpn.org/packages/tinc-1.0.13.tar.gz | tar xz
+cd tinc-1.0.13
+./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+make
+sudo make install
diff --git a/retiolum/scripts/tinc_setup/build_no.de.sh b/retiolum/scripts/tinc_setup/build_no.de.sh
new file mode 100644
index 00000000..2976d3a2
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/build_no.de.sh
@@ -0,0 +1 @@
+pkgin in lzo gcc-tools gcc-compiler gcc34
diff --git a/retiolum/scripts/tinc_setup/install.sh b/retiolum/scripts/tinc_setup/install.sh
new file mode 100755
index 00000000..9efe863c
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/install.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# USE WITH GREAT CAUTION
+set -eu
+
+if test "${nosudo-false}" != true -a `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo "$0" "$@"
+ exit 23 # go to hell
+fi
+
+#make -C ../../ update
+set -e
+DIRNAME=`dirname $0`
+CURR=`readlink -f ${DIRNAME}`
+MYBIN=${CURR}/../../bin
+netname=retiolum
+# create configuration directory for $netname
+mkdir -p /etc/tinc/$netname/hosts
+cd /etc/tinc/$netname
+
+echo "added known hosts:"
+ls -1 hosts | LC_ALL=C sort
+echo "delete the nodes you do not trust!"
+
+hostname="${HOSTNAME-`cat /etc/hostname`}"
+myname="${1:-}"
+if [ ! "$myname" ]
+then
+ printf "select node name [$hostname]: "
+ read myname
+ if test -z "$myname"; then
+ myname="$hostname"
+ fi
+fi
+if [ ! -e "hosts/$myname" ]
+then
+
+ # TODO eloop until we found a free IPv4
+ # myipv4=$(echo 42.$(for i in `seq 1 3`; do echo "ibase=16;`bin/fillxx xx|tr [a-f] [A-F]`" | bc; done)|tr \ .)/32
+
+ myipv4="${2:-}"
+ mynet4=10.243.0.0
+
+ if [ ! "$myipv4" ]
+ then
+ printf 'select v4 subnet ip (1-255): '
+ read v4num
+ until $MYBIN/check-free-retiolum-v4 10.243.0.$v4num; do
+ echo "your're an idiot!"
+ printf 'select unused v4 subnet ip (1-255): '
+ read v4num
+ done
+ myipv4="10.243.0.$v4num"
+ fi
+ echo "Subnet = $myipv4" > hosts/$myname
+
+ myipv6=`$MYBIN/fillxx 42:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx`/128
+ echo "Subnet = $myipv6" >> hosts/$myname
+else
+ echo "own host file already exists! will not write again!"
+fi
+
+cat>tinc.conf<<EOF
+Name = $myname
+ConnectTo = euer
+ConnectTo = albi10
+ConnectTo = pigstarter
+ConnectTo = slowpoke
+Device = /dev/net/tun
+EOF
+
+if [ ! -e rsa_key.priv ]
+then
+ echo "creating new keys"
+ tincd -n $netname -K
+ $MYBIN/announce_pubkey $myname || \
+ echo "cannot write public key to IRC, you are on your own. Good Luck"
+else
+ echo "key files already exist, skipping"
+ echo "if you know what you are doing, remove rsa_key.priv"
+fi
+# add user tincd
+# this is what the setup scripts for the distribution has to do
+#useradd tincd
diff --git a/retiolum/scripts/tinc_setup/new_install.sh b/retiolum/scripts/tinc_setup/new_install.sh
new file mode 100755
index 00000000..76ed9e70
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/new_install.sh
@@ -0,0 +1,358 @@
+#!/bin/sh
+
+#get sudo
+if test "${nosudo-false}" != true -a `id -u` != 0; then
+ echo "we're going sudo..." >&2
+ exec sudo -E "$0" "$@"
+ exit 23 # go to hell
+fi
+set -euf
+#
+SUBNET4=${SUBNET4:-10.243}
+SUBNET6=${SUBNET6:-42}
+TEMPDIR=${TEMPDIR:-auto}
+TINCDIR=${TINCDIR:-auto}
+exists() { type "$1" >/dev/null 2>/dev/null; }
+
+if exists hostname ;then SYSHOSTN=${HOSTNAME:-$(hostname)}
+elif exists uci ;then SYSHOSTN=$(uci get system.@system[0].hostname)
+elif [ -e /etc/hostname ] ;then SYSHOSTN=$(cat /etc/hostname)
+else SYSHOSTN="unknown"
+fi
+
+#overwrite `found` hostname
+HOSTN=${HOSTN:-$SYSHOSTN}
+NETNAME=${NETNAME:-retiolum}
+MASK4=${MASK4:-16}
+MASK6=${MASK6:-16}
+RMASK=${RMASK:-255.255.0.0}
+URL=${URL:-http://euer.krebsco.de/retiolum/hosts.tar.gz}
+SURL=${SURL:-http://euer.krebsco.de/retiolum/supernodes.tar.gz}
+
+IRCCHANNEL=${IRCCHANNEL:-"#krebs_incoming"}
+IRCSERVER=${IRCSERVER:-"irc.freenode.net"}
+IRCPORT=${IRCPORT:-6667}
+
+OS=${OS:-0}
+TELNET=${TELNET:-}
+
+IP4=${IP4:-0}
+IP6=${IP6:-0}
+
+RAND4=1
+RAND6=1
+
+#convert hostmask to subnetmask only version 4
+host2subnet()
+{
+ NEEDDOTSINSUB=$(expr 3 - $( echo $SUBNET4 | tr -C -d . | wc -c))
+ case $NEEDDOTSINSUB in
+ 3) FULLSUBNET=$SUBNET4.0.0.0 ;;
+ 2) FULLSUBNET=$SUBNET4.0.0 ;;
+ 1) FULLSUBNET=$SUBNET4.0 ;;
+ 0) FULLSUBNET=$SUBNET4 ;;
+ *) echo "cannot read subnet" && exit 1;;
+ esac
+}
+
+#check if ip is valid ipv4 function
+check_ip_valid4()
+{
+ if [ "$(echo $1 | awk -F"\." ' $0 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ && $1 <=255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ' 2>/dev/null)" == "$1" ] && [ ${1:0:${#SUBNET4}} == $SUBNET4 ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+#check if ip is valid ipv6 function
+check_ip_valid6()
+{
+ if [ "$(echo $1 | awk -F"." ' $0 ~ /^([0-9a-fA-F]{1,4}\:){7}[0-9a-fA-F]{1,4}$/' 2>/dev/null)" == $1 ] && [ ${1:0:${#SUBNET6}} == $SUBNET6 ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+#check if ip is taken function
+check_ip_taken()
+{
+ if grep -q -r -E "$1(#|/)" $TEMPDIR/hosts/ ;then
+ return 1
+ else
+ return 0
+ fi
+}
+
+#if hostname is taken, count upwards until it isn't taken function
+get_hostname()
+{
+ TSTFILE=$TEMPDIR/hosts/$1
+ LCOUNTER=0
+ if test -e $TSTFILE; then
+ while test -e $TSTFILE; do
+ : $((LCOUNTER+=1))
+ TSTFILE=$TEMPDIR/hosts/$1$LCOUNTER
+ done
+ HOSTN=$1$LCOUNTER
+ else
+ HOSTN=$1
+ fi
+}
+
+#os autodetection
+find_os()
+{
+ if grep -qe 'Linux' /etc/*release 2>/dev/null || grep -qe 'Linux' /etc/issue 2>/dev/null; then
+ OS='linux'
+ elif exists getprop ; then
+ OS='android'
+ elif test -e /etc/openwrt_release; then
+ OS='openwrt'
+ elif uname -s | grep -qi 'darwin'; then
+ OS='osx'
+ else
+ echo "Cannot determine your operating system, falling back to Linux"
+ OS='linux'
+ fi
+}
+
+find_telnet(){
+ if exists telnet >/dev/null;then
+ TELNET="`command -v telnet`"
+ elif exists busybox >/dev/null;then
+ TELNET="`command -v busybox` telnet"
+ else
+ echo "cannot find telnet binary, please install either telnet-client or busybox"
+ echo "bailing out!"
+ exit 1
+ fi
+}
+
+if [ $IP4 -eq 0 ]; then
+ RAND4=1
+elif ! check_ip_valid4 $IP4; then
+ echo 'ip4 is invalid'
+ exit 1
+fi
+if [ $IP6 -eq 0 ]; then
+ RAND6=1
+elif ! check_ip_valid6 $IP6; then
+ echo 'ip6 is invalid'
+ exit 1
+fi
+
+#find OS
+if [ $OS -eq 0 ]; then
+ find_os
+fi
+if [ -z "$TELNET" ]; then
+ find_telnet
+fi
+#check if everything is installed
+if ! exists awk ; then
+ echo "Please install awk"
+ exit 1
+fi
+
+if ! exists curl ; then
+ if ! exists wget ; then
+ echo "Please install curl or wget"
+ exit 1
+ else
+ LOADER='wget -O-'
+ HEAD_LOADER="$LOADER --spider"
+ fi
+else
+ LOADER=curl
+ HEAD_LOADER="$LOADER -I"
+fi
+
+if ! $HEAD_LOADER $SURL >/dev/null 2>/dev/null ;then
+ echo "Cannot find supernode package, check if your internet is working"
+ exit 1
+fi
+
+#check if everything is installed
+if [ $OS = 'android' ]; then
+ if ! test -e /data/data/org.poirsouille.tinc_gui/files/tincd; then
+ echo "Please install tinc-gui"
+ exit 1
+ else
+ TINCBIN=/data/data/org.poirsouille.tinc_gui/files/tincd
+ DEV="/dev/tun"
+ if [ $TINCDIR = 'auto' ]; then TINCDIR="/usr/local/etc/tinc" ;fi
+ if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/storage/sdcard0/tinc-fu" ;fi
+ mount -o remount,rw /
+ mount -o remount,rw /system
+ fi
+elif [ $OS = 'osx' ]; then
+ if ! exists tincd >/dev/null; then
+ echo "Please install tinc"
+ exit 1
+ else
+ TINCBIN=tincd
+ DEV="/dev/net/tun"
+ if [ $TINCDIR = 'auto' ]; then TINCDIR="/usr/local/etc/tinc" ;fi
+ if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/tmp/tinc-install-fu" ;fi
+ fi
+else
+ if ! exists tincd >/dev/null; then
+ echo "Please install tinc"
+ exit 1
+ else
+ TINCBIN=tincd
+ DEV="/dev/net/tun"
+ if [ $TINCDIR = 'auto' ]; then TINCDIR="/etc/tinc" ;fi
+ if [ $TEMPDIR = 'auto' ]; then TEMPDIR="/tmp/tinc-install-fu" ;fi
+ fi
+fi
+
+#generate full subnet information for v4
+
+#test if tinc directory already exists
+if test -e $TINCDIR/$NETNAME; then
+ echo "tinc config directory $TINCDIR/$NETNAME does already exist. (backup and) delete config directory and restart"
+ exit 1
+fi
+
+#get tinc-hostfiles
+mkdir -p $TEMPDIR/hosts
+$LOADER $URL | tar zx -C $TEMPDIR/hosts/
+
+#check for free ip
+#version 4
+until check_ip_taken $IP4; do
+ if [ $RAND4 -eq 1 ]; then
+ IP4="$SUBNET4.$(( $(head /dev/urandom | tr -dc "123456789" | head -c3) %255)).$(( $(head /dev/urandom | tr -dc "123456789" | head -c3) %255))"
+ else
+ printf 'choose new ip: '
+ read IP4
+ while ! check_ip_valid4 $IP4; do
+ printf 'the ip is invalid, retard, choose a valid ip: '
+ read IP4
+ done
+ fi
+done
+
+#version 6
+until check_ip_taken $IP6; do
+ if [ $RAND6 -eq 1 ]; then
+ NETLENGTH=$(expr $(expr 128 - $MASK6) / 4)
+ IP6="$SUBNET6$(head /dev/urandom | tr -dc "0123456789abcdef" | head -c$NETLENGTH | sed 's/..../:&/g')" #todo: generate ip length from hostmask
+ else
+ printf 'ip taken, choose new ip: '
+
+ read IP6
+ while ! check_ip_valid6 $IP6; do
+ printf 'the ip is invalid, retard, choose a valid ip: '
+ read IP6
+ done
+ fi
+done
+
+
+#check for free hostname
+get_hostname $HOSTN
+
+
+#create the configs
+mkdir -p $TINCDIR/$NETNAME
+cd $TINCDIR/$NETNAME
+
+if [ $OS = 'openwrt' ]; then
+ mkdir hosts
+ $LOADER $SURL | tar xz -C hosts/
+else
+ mv $TEMPDIR/hosts ./
+fi
+
+rm -r $TEMPDIR || echo "$TEMPDIR does not exist, skipping removal"
+
+echo "Subnet = $IP4" > hosts/$HOSTN
+echo "Subnet = $IP6" >> hosts/$HOSTN
+
+cat>tinc.conf<<EOF
+Name = $HOSTN
+Device = $DEV
+
+#newer tinc features
+LocalDiscovery = yes
+AutoConnect = 3
+
+#ConnectTos
+ConnectTo = slowpoke
+ConnectTo = pigstarter
+ConnectTo = pico
+EOF
+
+host2subnet $MASK4
+
+#check if ip is installed
+if exists ip >/dev/null; then
+ echo 'dirname="`dirname "$0"`"' > tinc-up
+ echo '' >> tinc-up
+ echo 'conf=$dirname/tinc.conf' >> tinc-up
+ echo '' >> tinc-up
+ echo 'name=$(sed -n "s|^ *Name *= *\([^ ]*\) *$|\\1|p" $conf)' >> tinc-up
+ echo '' >> tinc-up
+ echo 'host=$dirname/hosts/$name' >> tinc-up
+ echo '' >> tinc-up
+ echo 'ip link set $INTERFACE up' >> tinc-up
+ echo '' >> tinc-up
+ echo "addr4=\$(sed -n \"s|^ *Subnet *= *\\($SUBNET4[.][^ ]*\\) *\$|\\\\1|p\" \$host)" >> tinc-up
+ echo 'ip -4 addr add $addr4 dev $INTERFACE' >> tinc-up
+ echo "ip -4 route add $FULLSUBNET/$MASK4 dev \$INTERFACE" >> tinc-up
+ echo '' >> tinc-up
+ echo "addr6=\$(sed -n \"s|^ *Subnet *= *\\($SUBNET6[:][^ ]*\\) *\$|\\\\1|p\" \$host)" >> tinc-up
+ echo 'ip -6 addr add $addr6 dev $INTERFACE' >> tinc-up
+ echo "ip -6 route add $SUBNET6::/$MASK6 dev \$INTERFACE" >> tinc-up
+else
+ echo 'dirname="`dirname "$0"`"' > tinc-up
+ echo '' >> tinc-up
+ echo 'conf=$dirname/tinc.conf' >> tinc-up
+ echo '' >> tinc-up
+ echo 'name=$(sed -n "s|^ *Name *= *\([^ ]*\) *$|\\1|p" $conf)' >> tinc-up
+ echo '' >> tinc-up
+ echo 'host=$dirname/hosts/$name' >> tinc-up
+ echo '' >> tinc-up
+ echo "addr4=\$(sed -n \"s|^ *Subnet *= *\\($SUBNET4[.][^ ]*\\) *$|\\\\1|p\" \$host)" >> tinc-up
+ echo 'ifconfig $INTERFACE $addr4' >> tinc-up
+ echo "route add -net $FULLSUBNET netmask $RMASK dev \$INTERFACE " >> tinc-up
+fi
+
+#fix permissions
+chmod +x tinc-up
+chown -R 0:0 .
+
+#generate keys with tinc
+if exists tincctl ; then
+ yes | tincctl -n $NETNAME generate-keys
+ cat rsa_key.pub >> hosts/$HOSTN
+else
+ yes | $TINCBIN -n $NETNAME -K
+fi
+
+if [ $OS = 'android' ]; then
+ mkdir /etc/tinc
+ cd /
+ mv $TINCDIR/$NETNAME /etc/tinc/
+ cd /etc/tinc/$NETNAME
+fi
+#write to irc-channel
+NICK="${HOSTN}_$(head /dev/urandom | tr -dc "0123456789" | head -c3)"
+
+( echo "NICK $NICK";
+ echo "USER $NICK $IRCSERVER bla : $NICK";
+ echo "JOIN $IRCCHANNEL";
+ sleep 23;
+ echo "PRIVMSG $IRCCHANNEL : This is $HOSTN";
+ sed "s/^\(.*\)/PRIVMSG $IRCCHANNEL : \1/" hosts/$HOSTN;
+ sleep 5; ) | $TELNET $IRCSERVER $IRCPORT
+
+
+# finish what you have begun!
+tincd -n $NETNAME
diff --git a/retiolum/scripts/tinc_setup/tinc-up b/retiolum/scripts/tinc_setup/tinc-up
new file mode 100755
index 00000000..a829528d
--- /dev/null
+++ b/retiolum/scripts/tinc_setup/tinc-up
@@ -0,0 +1,25 @@
+# source: krebscode/painload/retiolum/scripts/tinc_setup/tinc-up
+
+dirname="`dirname "$0"`"
+
+conf=$dirname/tinc.conf
+
+name=`sed -n 's|^ *Name *= *\([^ ]*\) *$|\1|p' $conf`
+
+host=$dirname/hosts/$name
+
+ip link set $INTERFACE up
+
+addr4=`sed -n 's|^ *Subnet *= *\(10[.][^ ]*\) *$|\1|p' $host`
+if [ "$addr4" != '' ];then
+ ip -4 addr add $addr4 dev $INTERFACE
+ ip -4 route add 10.243.0.0/16 dev $INTERFACE
+else
+ addr4=`sed -n 's|^ *Subnet *= *\(42[.][^ ]*\) *$|\1|p' $host`
+ ip -4 addr add $addr4 dev $INTERFACE
+ ip -4 route add 42.0.0.0/16 dev $INTERFACE
+fi
+
+addr6=`sed -n 's|^ *Subnet *= *\(42[:][^ ]*\) *$|\1|p' $host`
+ip -6 addr add $addr6 dev $INTERFACE
+ip -6 route add 42::/16 dev $INTERFACE
[cgit] Unable to lock slot /tmp/cgit/fe000000.lock: No such file or directory (2)