summaryrefslogtreecommitdiffstats
path: root/retiolum
diff options
context:
space:
mode:
Diffstat (limited to 'retiolum')
-rw-r--r--retiolum/Makefile32
-rwxr-xr-xretiolum/bin/check-free-retiolum-v421
-rwxr-xr-xretiolum/bin/check-free-retiolum-v62
-rwxr-xr-xretiolum/bin/get-tinc-dir9
-rwxr-xr-xretiolum/bin/hosts4
-rwxr-xr-xretiolum/bin/ipv62
-rwxr-xr-xretiolum/bin/my-ip2
-rwxr-xr-xretiolum/bin/pgrep-retiolum-tincd-args2
-rwxr-xr-xretiolum/bin/restart-tincd14
-rwxr-xr-xretiolum/bin/supernode-update-hosts-and-hup44
l---------retiolum/bin/tinc_stats1
-rwxr-xr-xretiolum/bin/update-retiolum-hosts16
-rwxr-xr-xretiolum/bin/update_tinc_hosts8
-rw-r--r--retiolum/doc/routing/ip-ranges5
-rw-r--r--retiolum/doc/routing/tun30
-rw-r--r--retiolum/hosts/Lassulus11
-rw-r--r--retiolum/hosts/Shepherd10
-rw-r--r--retiolum/hosts/Styx10
-rw-r--r--retiolum/hosts/ThinkArmageddon9
-rw-r--r--retiolum/hosts/TodesBrot9
-rw-r--r--retiolum/hosts/UTART9
-rw-r--r--retiolum/hosts/ach10
-rw-r--r--retiolum/hosts/albi710
-rw-r--r--retiolum/hosts/alphalabs12
-rw-r--r--retiolum/hosts/also12
-rw-r--r--retiolum/hosts/armageddon421_de11
-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/chinaman10
-rw-r--r--retiolum/hosts/destroy11
-rw-r--r--retiolum/hosts/eigenserv11
-rw-r--r--retiolum/hosts/euer11
-rw-r--r--retiolum/hosts/exile9
-rw-r--r--retiolum/hosts/exitium_mobilis10
-rw-r--r--retiolum/hosts/filebitch10
-rw-r--r--retiolum/hosts/fuerkrebs10
-rw-r--r--retiolum/hosts/horreum_magnus15
-rw-r--r--retiolum/hosts/iiso11
-rw-r--r--retiolum/hosts/kaah10
-rw-r--r--retiolum/hosts/krebsbitch10
-rw-r--r--retiolum/hosts/krebsbob11
-rw-r--r--retiolum/hosts/krebsnode11
-rw-r--r--retiolum/hosts/kremium10
-rw-r--r--retiolum/hosts/miefda11
-rw-r--r--retiolum/hosts/minikrebs10
-rw-r--r--retiolum/hosts/monitoring7
-rw-r--r--retiolum/hosts/no_omo10
-rw-r--r--retiolum/hosts/oxberg11
-rw-r--r--retiolum/hosts/pa_sharepoint7
-rw-r--r--retiolum/hosts/pfleidi9
-rw-r--r--retiolum/hosts/pico11
-rw-r--r--retiolum/hosts/pornocauster10
-rw-r--r--retiolum/hosts/rtjure10
-rw-r--r--retiolum/hosts/sir_krebs_a_lot11
-rw-r--r--retiolum/hosts/skirfir11
-rw-r--r--retiolum/hosts/steve10
-rw-r--r--retiolum/hosts/supernode13
-rw-r--r--retiolum/hosts/taschenkrebs11
-rw-r--r--retiolum/hosts/temperator10
-rw-r--r--retiolum/hosts/upm9
-rw-r--r--retiolum/hosts/urkrebs10
-rw-r--r--retiolum/hosts/xso10
-rw-r--r--retiolum/hosts/ytart9
-rw-r--r--retiolum/hosts/zerg10
-rwxr-xr-xretiolum/openwrt/tinc-up19
-rwxr-xr-xretiolum/openwrt/updater6
-rw-r--r--retiolum/scripts/adv_graphgen/BackwardsReader.py35
-rw-r--r--retiolum/scripts/adv_graphgen/Makefile4
-rwxr-xr-xretiolum/scripts/adv_graphgen/all_the_graphs.sh5
-rwxr-xr-xretiolum/scripts/adv_graphgen/anonytize.sh31
-rwxr-xr-xretiolum/scripts/adv_graphgen/find_legacy_hosts.py59
-rwxr-xr-xretiolum/scripts/adv_graphgen/parse.py102
-rwxr-xr-xretiolum/scripts/adv_graphgen/parse_tinc_anon.py135
-rwxr-xr-xretiolum/scripts/adv_graphgen/parse_tinc_stats.py185
-rwxr-xr-xretiolum/scripts/adv_graphgen/sanitize.sh39
-rwxr-xr-xretiolum/scripts/adv_graphgen/tinc_stats.py83
-rw-r--r--retiolum/scripts/autostart/Makefile14
-rwxr-xr-xretiolum/scripts/autostart/create-startup.sh22
-rwxr-xr-xretiolum/scripts/routing/defaultroute.sh38
-rwxr-xr-xretiolum/scripts/tinc_setup/install.sh46
-rwxr-xr-xretiolum/scripts/tinc_setup/tinc-up21
-rw-r--r--retiolum/scripts/tinc_setup/write_channel.py9
84 files changed, 1399 insertions, 170 deletions
diff --git a/retiolum/Makefile b/retiolum/Makefile
index 0d99ee70..cd0a543c 100644
--- a/retiolum/Makefile
+++ b/retiolum/Makefile
@@ -1,15 +1,29 @@
-.phony: update it all so install
+.PHONY: update all install hosts
-all: select-target
+EXES := update_tinc_hosts fillxx update-retiolum-hosts
-it: so
-so: it
+all: update links
-/etc/tinc/retiolum/hosts:
- cd $(dir $@) && git clone https://github.com/krebscode/hosts
+links:
+ for x in $(EXES); do ln -vsnf ../retiolum/bin/$$x ../bin; done
-update: /etc/tinc/retiolum/hosts
- cd $< && git pull
-install:
+install: upgrade
+ ../punani/bin/punani tinc python
scripts/tinc_setup/install.sh
+ cp scripts/tinc_setup/tinc-up /etc/tinc/retiolum/tinc-up
+ scripts/autostart/create-startup.sh
+
+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" || true
+ bin/update_tinc_hosts restart
+ sudo pkill -HUP tincd || :;
+
+hosts:
+ bin/update-retiolum-hosts || true
diff --git a/retiolum/bin/check-free-retiolum-v4 b/retiolum/bin/check-free-retiolum-v4
new file mode 100755
index 00000000..3f0dbdf8
--- /dev/null
+++ b/retiolum/bin/check-free-retiolum-v4
@@ -0,0 +1,21 @@
+#! /bin/sh
+netname=retiolum
+myipv4=${1-10.7.7.-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/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
index 6939f52c..4856d494 100755
--- a/retiolum/bin/hosts
+++ b/retiolum/bin/hosts
@@ -6,6 +6,8 @@ netname=${1-retiolum}
cd /etc/tinc/$netname/hosts
for i in `ls`; do
- sed -rn 's|^ *Subnet *= *([^ /]*)(/[0-9]*)? *$|\1\t'$i' '$i'.'$netname'|p' $i
+ sed -n '
+ s|^ *Subnet *= *\([^ /]*\)\(/[0-9]*\)\? *$|\1\t'$i'.'$netname' '$i'|p
+ ' $i
done | sort
diff --git a/retiolum/bin/ipv6 b/retiolum/bin/ipv6
index 65a1eaa1..34c6de71 100755
--- a/retiolum/bin/ipv6
+++ b/retiolum/bin/ipv6
@@ -13,7 +13,7 @@ if test `id -u` != 0; then
fi
file=/etc/tinc/retiolum/hosts/`hostname`
-addr=`sed -rn 's|^Subnet *= *(42:[0-9A-Fa-f:]*/128)|\1|p' $file`
+addr=`sed -n 's|^Subnet *= *\(42:[0-9A-Fa-f:]*/128\)|\1|p' $file`
route=42::/16
start() {
diff --git a/retiolum/bin/my-ip b/retiolum/bin/my-ip
new file mode 100755
index 00000000..fcfbba05
--- /dev/null
+++ b/retiolum/bin/my-ip
@@ -0,0 +1,2 @@
+#!/bin/sh
+curl http://euer.krebsco.de/live/ip.php
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_stats b/retiolum/bin/tinc_stats
new file mode 120000
index 00000000..6a58af60
--- /dev/null
+++ b/retiolum/bin/tinc_stats
@@ -0,0 +1 @@
+/home/makefu/repos/krebs/retiolum/scripts/adv_graphgen/tinc_stats.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..1fecfe15
--- /dev/null
+++ b/retiolum/bin/update-retiolum-hosts
@@ -0,0 +1,16 @@
+#! /bin/sh
+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
+
+# cd //retiolum
+cd $(dirname $(readlink -f $0))/..
+
+mkdir -v -p /etc/tinc/retiolum/hosts
+cp -v -r hosts/* /etc/tinc/retiolum/hosts
+pkill -HUP tincd
+pkill -ALRM tincd
diff --git a/retiolum/bin/update_tinc_hosts b/retiolum/bin/update_tinc_hosts
index fe0785e3..b3529a7f 100755
--- a/retiolum/bin/update_tinc_hosts
+++ b/retiolum/bin/update_tinc_hosts
@@ -17,7 +17,7 @@ es='# END OF RETIOLUM'
case "${*-I am made of stupid}" in
(start|restart)
- hosts | $0 replace magic
+ hosts | grep -P "^(10|42)" | $0 replace magic
;;
(stop)
$0 clear magic
@@ -29,9 +29,13 @@ case "${*-I am made of stupid}" in
;;
('create magic')
$0 has magic || $0 print magic >> $hosts < /dev/null
+ $0 start
;;
('destroy magic')
- $0 has magic && sed -ie "/^$bs$/,/^$es$/d" $hosts
+ 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
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/Lassulus b/retiolum/hosts/Lassulus
new file mode 100644
index 00000000..98bd01e0
--- /dev/null
+++ b/retiolum/hosts/Lassulus
@@ -0,0 +1,11 @@
+Subnet = 42:0:0:0:0:0:0:dea7/128
+Subnet = 10.243.0.2/32
+Compression = 9
+-----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/Shepherd b/retiolum/hosts/Shepherd
new file mode 100644
index 00000000..4b6c5f42
--- /dev/null
+++ b/retiolum/hosts/Shepherd
@@ -0,0 +1,10 @@
+Subnet = 10.243.0.145/32
+Subnet = 42:0f19:8a1e:7865:721b:2378:beef:1158/128
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsW0Pbgvl+hATKqQR6H4yPg1kphMsxrXvh/CMQY8dXVVD2mDWBHaL
+Y/yXCanDxyYRGu80SVwdIUWQIwjGD0SiESRGqABl2qPsD1uIbbqI5SlSwzb8UrJk
++oCszLxZrhD14HWTjAduQ5GcBNZ8Ht133rR07s+XRAYcKJOMauod3yD3g3IfZw6L
+/MAQ8GSptSa+JPm5Kk1/QBZi8oH0aIseaVH9b6l8+P27LwxdwJG+S/82iKOUvszw
+qocqNbKJ0iySs3ZPZTDpKa/MPAN9H/m/OqM66w6IG4iwIttqix5mET+kM2TUaH29
+tApWA1ChYy61aKBykdcT+IbJHl/0unOU6QIDAQAB
+-----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/TodesBrot b/retiolum/hosts/TodesBrot
new file mode 100644
index 00000000..f76b72b2
--- /dev/null
+++ b/retiolum/hosts/TodesBrot
@@ -0,0 +1,9 @@
+Subnet = 10.243.0.12/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAzGIijXaoIRG09v5sIXyVdqdpDruPMqKJfvZUXCF/POMCZEsZ4tjd
+jHHdbTfREExvSNBUxS6GaYwg/HR2R7nprzOazSN9kzp9fmFJofbCOxz6X/8O/fMM
+gTBmZzYu4cfysjTD5tsrJp/dQOZ0wKpUXBOWWWDUTLM9Zo3+6Bxe/6pN+gphvl6m
+ReIAwl34QkZ24mq1W4YZofU2PxLxnhtuBgXuJRfn8FDlgKKPhPpKX070J5pamzpp
+1/Idxl0zTmoKeXWhJ0wY0SNeglaWgH1P2EeNUNoVEX4Egk4XQGkzOfShRG7zoJMA
+tKJlNZOw/4EF3E/IM8mG1yG3NqtFlIyNYQIDAQAB
+-----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..26ee10f2
--- /dev/null
+++ b/retiolum/hosts/ach
@@ -0,0 +1,10 @@
+Subnet = 42:c50f:d371:cf01:8cf0:0b77:bb01:5013/128
+Subnet = 42.135.28.73/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA2d5RaWiFmkuw0UhPsQCrFBNNgBwzHQMDO69rU6XlH8VSGI8HTPuI
+v5Jjyhrf2p/ktLAnafBUHO32bNRu/9lbM0rjPZna5t1MjJpUaja6yF5TzdAQ4YMD
+KTkGqjI9QEuGBPixFNRq+P9QK5FLx1/wtF0ZE1CYS+A6iwQ9S+IPCIYYswUmhYQF
+ik2IaixG6EkZj2NSJqvDF4HDJz8lnwQIQfFqZ8WdP2MtMUng09PdjQHss0jqRbPO
+4J7UpDkrXSABjDnEYk4CKH0YhLGPB3VDYeD4rQjKuDTYOWXQ8OYIyPVucKe2RABc
+dJF6MQ+z+2m1vMqEYPBOH69Ggncq9GQ4xwIDAQAB
+-----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..e7265e67
--- /dev/null
+++ b/retiolum/hosts/alphalabs
@@ -0,0 +1,12 @@
+Address = 10.9.0.10
+Subnet = 42:0:0:0:0:0:0:a1fa/128
+Subnet = 10.243.0.10/32
+Compression = 9
+-----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/also b/retiolum/hosts/also
new file mode 100644
index 00000000..59a251a7
--- /dev/null
+++ b/retiolum/hosts/also
@@ -0,0 +1,12 @@
+Subnet = 42:9c90:a590:e88a:52cf:126f:b710:1a9c/128
+Subnet = 23.42.0.1/16
+Subnet = 10.243.0.50/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAsnF1eyd/R4qXMGo8UEZ98hnJK+6ZEKUubgdzEwAuSxK40B6nX8Ry
+Euy3v3s0ps/GMdE52gUbFB+bhM99hHiKW+7zcxnoMJ69a9yK6VG0Im+7ib0WTliZ
+llgUfRETQd/2KaIfJWH/nVsBuK0hp1LscroWcoO08BCw6v94q3He8502Bk/ZYZQF
+wD7Y6LldipWKo/K9YtIU3zD3taj2NGnetOc0BRRncSgGiicXJKhtfcs+Ti2Y/ITz
+bFkHnFgB0KnhjwJBumxdmgjHWknlwVkROvmzIgyoXxqEw31bF+g/XzA7RTMXsiFM
+w0SZ15k4HG5L1PWpUyY2Th5yIjMW+sSrhQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/armageddon421_de b/retiolum/hosts/armageddon421_de
new file mode 100644
index 00000000..13a2c946
--- /dev/null
+++ b/retiolum/hosts/armageddon421_de
@@ -0,0 +1,11 @@
+Address = armageddon421.de
+Port = 1655
+Subnet = 42.233.216.106/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAqBfXS402JOadodsFB4a/aX/eBkuQxPHjEPpW7QBueEPbCHBAyPnT
+GzpC9tJSfkaUfI5pL+kE5vCXqVuLErlJtESENI0FvtfFGHm/KxRwX6QEAiZZT0d0
+C331udvRwqDrjY3HVMcQo7ppcaRHTGNldIATZVVLvm8V8zJ28L/FIioGysNYFuLb
+8V5ZVTFpXwUfeJOAbmz0CHB/hiQliP0CR/Y7sZ0dX9/DAg13z2iZc2HA65N1AqZc
+L6knsC7DnzjY48d5BhbZXqcCybecx3s4igLuDZjoyHOyAtbR1QueDF/CRVnYsqSs
+YItynNjtN9TEEvCG1klvCV7hyM8t2ecpwQIDAQAB
+-----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/chinaman b/retiolum/hosts/chinaman
new file mode 100644
index 00000000..22f64b02
--- /dev/null
+++ b/retiolum/hosts/chinaman
@@ -0,0 +1,10 @@
+Subnet = 42:5a1d:f491:9e47:c4cd:175f:bd87:6da5/128
+Subnet = 42.207.40.226/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwQWG4shbMq2Y2s2GH05DSR9God0ppslCgXLpM8I+L+khpF8JL83z
+KdevKDl0mA4iVnSgqWKVUDCK5IN29wQAlPDiNvBir98vxTeuckvdeTZat0rr0O7t
+o4MBMfZ0yXBxruu2/TjCyAkE/VN3h7tfzBh9HUQyVFWjaEhh8v2kOmGLt1UT3hKr
+KdFFtCvbIAeHa6axiQvX0kmVZY8n2XK/1pPHSuxkKWUvum1jMplIQ6NewjeTbaan
+6hNFcMFwbB333Wan1EKP3D7N/oniGspoyLXdO4Q/AXmfwMJvHdLZri4uLFMdOB/e
+n2jo/GTcm7kzUW/IibqyeBvJ6xuTaQXb7QIDAQAB
+-----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/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..8a38150f
--- /dev/null
+++ b/retiolum/hosts/euer
@@ -0,0 +1,11 @@
+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..523ff7ff
--- /dev/null
+++ b/retiolum/hosts/filebitch
@@ -0,0 +1,10 @@
+Subnet = 42:0356:a364:cc79:4c96:2c7c:13fc:0c5b/128
+Subnet = 10.143.131.98/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAoqTUa54dkplzU6IqWdvCiGM8FLpZ6X6AmgGgl5r9RZ+Af08iy4Js
+FPdco+1Lj5OthXJnd5Xx8cO5qQx5CRzUN59ec8o0jxQOBZ5EpuN42RLMmQNBJWm7
+moVpEDuPQTHQrlyvsYwXOx1+T4rvSnG7hldiHoCL4XVn8FpZLPMXL5alGHSuNuYq
+dG++5LtPpmRLOg0Pwlk3nVfJpKKn4u2FVmhmxe9CdV9c5B5Ze0nVH6sekaG0gXzX
+ktoJG83/yc2XYhn+rel4kvLFyP/XqdAxsO6v7mpmQVNgsppqm2A9unDacTfOG//z
+2O+/dHkkW7ukOfk2Tr6z/CSDDxySMzx2NwIDAQAB
+-----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/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/iiso b/retiolum/hosts/iiso
new file mode 100644
index 00000000..3700cec5
--- /dev/null
+++ b/retiolum/hosts/iiso
@@ -0,0 +1,11 @@
+Subnet = 42:b2cd:6c75:d528:e736:ec4e:fc39:8bdc/128
+Subnet = 10.243.0.37/32
+Compression = 9
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAvsjBR0FUkjiNNLhz3AArosLqEiLZY7O8L6LorfUplD/IjG9P7XXx
+ry4gbKEH57GPn11IOPP1AKQcz7SfW7EwvUS8U1IZgkQq8BuuD3oGBQxOqwnOwzVN
++XKSZjUfmT/Uf81PHfWE52BfbitI+SBTi0m9cIuhgyYRAjD7We97ogkWDogBXKvC
+p1YYH44wcLte7lzWmId9hNOJtTu4KnCVgtXi/DYVLvuofrEk28DhhRSFiun4dkN6
+qMl8ZWOILOhUVSZN+cx/dslCwoog1FuEj7TyuhJFj8yoWIdI4xUGugzmV6npzTvU
+bLkcVfuQQYlIV9D7YYPyEFB11U6mifZ5uwIDAQAB
+-----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/krebsbitch b/retiolum/hosts/krebsbitch
new file mode 100644
index 00000000..a776368a
--- /dev/null
+++ b/retiolum/hosts/krebsbitch
@@ -0,0 +1,10 @@
+Subnet = 42:0398:5d7c:06c6:9978:4383:154b:3564/128
+Subnet = 42.35.192.96/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAuSPMGAVr8vLstf/4KnkFreYPhZGxmpE0IWaPIi39vz7d5Y8aE07R
+DslQNV51X6YZ0qwfu1axfgn8cd679N9+X6fVxCV22ICPq9Rv6tCU4K//b08mIgxv
+75D7RdWjPa3XbJiayK3SN8HuvcSo2cDXuvpG3D0yM5Cpjwu+40UZCVtSM7bZMY4M
+E3urXJfdPZMh5Ajst4B/s5PymaiiUadvRnbVXjWCbtWIySHgg+Rg4Ww/47Sml1MJ
+0DFEYb3RIsAW3sBsbfs54cF4jgO8YT2Pd0kIq4xey+/S14E6F6qxWizGwC2ZSF/o
+qSbE1GJ2HlwhCt+cIr0g6s9s6QtzaLE36wIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/krebsbob b/retiolum/hosts/krebsbob
new file mode 100644
index 00000000..cd01e5a4
--- /dev/null
+++ b/retiolum/hosts/krebsbob
@@ -0,0 +1,11 @@
+Address = krebsbob.no.de
+Port = 1655
+Subnet = 42.195.17.113/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAwF9uuth4ffpvSVd8gre70Mu6kmEQdnjlBnNu/25IPEtZIRW/nVJW
+dOMUcKdHOX8oqLhixoJ81xUmas+nPMbo6qyoPHDwMsQP4/ShvnNiTmmxHjAL3ac6
+zMSf7upnYCgY/4Btb4hIHGFEWDxkoT6PrSUCykx9TASLat8jvalOHAbbS9EjD4Fw
+WXJvoJIRCggeMggkJbiWHdKozE4ra0EUVPaVO1FJLVsmiH7q7KuF/MQwly125Mo0
+Mg3XRhEMNe7mpiTznRxwA/w8h8DRPi8Qp1cfg9vgh5bKvPMDwTWhGVEKUlWDyiob
+7LR/O3rM8qkOWI4nx5GhtxdaCt0V9tPebwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/krebsnode b/retiolum/hosts/krebsnode
new file mode 100644
index 00000000..187fee86
--- /dev/null
+++ b/retiolum/hosts/krebsnode
@@ -0,0 +1,11 @@
+Address = krebs.no.de
+Port = 1655
+Subnet = 42.18.77.65/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA8V86UoV5Eu3qWyXvMSfNG/OLHu9rOREwf+aNSRlpf0zGuHtH8Hzl
+AJrfDe7ucKnn4YYhscpZB9Ae/wmQN3JytOzL1o0yxxdtehP8HjLVUCMCvF7Sx2++
+3PdpNMw7iUo08bRH8+8yRuxxJCrL+PJCbvE1/Speu/7jGioT8q+TKSl7f/bD0cSg
+3TmDRG1lHVm/Synbd/aGeuI9CewGs3WukDVC6mmpWT0Q5bCG2YwJRO2kHz3ppUEO
+sOyDfEeNiV6Cs3QF3j9DqQGIVvWrO4BKJoqhQ661UId7vokYRf3gkLSYs2/mkoWR
+gMgBzL5++u4majp3p05wXua3j07eQE9qJQIDAQAB
+-----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/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..ad7278e2
--- /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..8bc6dd16
--- /dev/null
+++ b/retiolum/hosts/monitoring
@@ -0,0 +1,7 @@
+Subnet = 42:82cb:f60c:6f27:611a:42f8:906c:2c70/128
+Subnet = 42.160.97.250/32
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAMjS8WxgbfJKVGRIFD0Bv+odQ7THNWDIcr1p4riVbOUPxtce+abasYGl
+DOwaejcHP5bF11EAOOvdEtrivZReIZqYbMz5oWHLO6GCJn7nOCZVCW4LnUuNP3u8
+KQEU5oKj7LsKrBEEOtwpfNoWuZFzuzF0A6A2n+YYoea/Ak+hEbSbAgMBAAE=
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/no_omo b/retiolum/hosts/no_omo
new file mode 100644
index 00000000..8b286381
--- /dev/null
+++ b/retiolum/hosts/no_omo
@@ -0,0 +1,10 @@
+Address = leechi.kicks-ass.org
+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/oxberg b/retiolum/hosts/oxberg
new file mode 100644
index 00000000..c267b582
--- /dev/null
+++ b/retiolum/hosts/oxberg
@@ -0,0 +1,11 @@
+Address = 84.23.80.172
+Subnet = 42:c154:3219:a91c:77eb:91bb:2f18:ff75/128
+Subnet = 42.160.213.134/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA57j66efrYrB7jlBVu6XD6433n/j1QL86KI/l7BCVTE11mJrElElc
+YSAOB44arnFurSlU8RZIZAC4gnScmDnjJqCqudxps4wO0JTPqUCvUXkaZQ1fUf7W
+H00K05Jkrr6xFHyDwZNrU4uitBfMuAXlUE2A0sFLJiBmFLMSS0abaUg0ALRwFsMI
+5ftLHZPMV/TwUollCHQTfwMiMGo28WBm+nYvY+nUZRu3sx8HPLskYWmvt9giu7eo
+iQCDee/bHym5Ax9vETpCrkZITq2MJtQdJX46iwvlgKxsV7VkCXAtmU3lMLyTSeRX
+582RdmjFP2DdTPEulbL2YyfXVuLs0QIiRQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/pa_sharepoint b/retiolum/hosts/pa_sharepoint
new file mode 100644
index 00000000..dd31362e
--- /dev/null
+++ b/retiolum/hosts/pa_sharepoint
@@ -0,0 +1,7 @@
+Address = pa-sharepoint.informatik.ba-stuttgart.de
+Subnet = 42.80.54.58/32
+-----BEGIN RSA PUBLIC KEY-----
+MIGJAoGBAKSle+5vi8j+auGIC41PwFRPdzuyhP/paAEht+9mWpTYYC1meyPDwQR8
+EPNLwj1ccjsAvhubfaDmI3B13cBQx5q1BbTCK81Y5RS1tj384kvAabJAtKsz3aIg
+1hWXjiDJUGNpQhKsD7IIg4lkkDcgOBAbdtXlynCQXdQL+YjLTavBAgMBAAE=
+-----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/pico b/retiolum/hosts/pico
new file mode 100644
index 00000000..8fc732b8
--- /dev/null
+++ b/retiolum/hosts/pico
@@ -0,0 +1,11 @@
+Address = pu11.de
+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/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/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/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/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/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/temperator b/retiolum/hosts/temperator
new file mode 100644
index 00000000..25c54bf2
--- /dev/null
+++ b/retiolum/hosts/temperator
@@ -0,0 +1,10 @@
+Subnet = 42:0b56:87fb:b3ab:677f:1158:bfa0:b937/128
+Subnet = 42.93.117.146/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEArV5wUD4DqM0RoqL47aPb4EcK8Fi7s+PaFwSqVYibMvjeh/zbRUqa
+GQzEWa9ZR9dIzc0YNQKLOSKsiJNpdEwsWT5kUIUQq/YpFAQjcb/vEFbfZwesG08U
+bmkiqXBVaRDYgdGvnJsfkxVYFuTBKstZk5zdK4/uUSVV6oB3G1xP29Umpjn13Dc6
+28F4aYSQ6U8wJaGpZWXiQrmGtFwaM3gY7MCGq3L/5ec+qo7/zqC3BNYYbuFPycs5
+O3H/Gu1E060YsThhtC4NbChupf0llJcHa7wpPyE2f31YBAQZMo5NpmQqWWLuLqSk
+sT1QtjqIsNcMBK9ogxGb6fcMmycOUSsEFwIDAQAB
+-----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/urkrebs b/retiolum/hosts/urkrebs
new file mode 100644
index 00000000..ecffaec4
--- /dev/null
+++ b/retiolum/hosts/urkrebs
@@ -0,0 +1,10 @@
+Subnet = 42:0c61:780c:bf22:7624:fca8:d4d7:a4fd/128
+Subnet = 42.171.152.235/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAl6vUmUL8w8r2gUTpUF8QWx0U3nzDPao2I7l0WU1NnGcR8DVug7YN
+595guvDkRGcM4eYGizgVYVvDCmjTQRXRn57ucVud2bGE1NGtdomVs6wggpgzLiaf
+m9BJwsigoCyMv+8ewGfc+D10TupulcIiZSp/RAewYlX0rhmgdsEGnCt+TWvXRsIa
+kY1pvt4YeKjs2ctib3OmaPuNokK4ophxSpdZ5arjHCaiVMj2O6pPAQbU7WFY63Fw
+UP64cAmtqBM+uMteT7bdG1jT3KZS6W7Dy8rIBd+pp+vB656A5PhrDcGEUMFSXqPD
+BwIxhV7OAejSn4XjrZyd5eNtMOQKopIMQwIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/xso b/retiolum/hosts/xso
new file mode 100644
index 00000000..1f035a78
--- /dev/null
+++ b/retiolum/hosts/xso
@@ -0,0 +1,10 @@
+Subnet = 42:fb16:96ad:c849:f5d4:2170:103d:e86b/128
+Subnet = 42.124.174.80/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEA1p1WG0yDOku0u8XPzN2BAcrkVeR11c8Si3sz2BNoYPitdA2wW/TE
+mHjGw4Dxt1Q+lWmxtsNnV2x5IoZBSIovS8Tuj4O6mVTmgSJSta988gzmeImQksb6
++/d4LQmqc6/u24sKrWEPQ7sCpb5sPGr1K1yLNtAnD7pt3rGiX/VK/SKBYKpB5wGf
+snRHB5fj/4yc5M7YjQI+TO0jTKdlf9B4JrRX/DhbmZ9n/EPGREGUgrDyi66Jk8ea
+yRyCg/5UcHD6z74ZN6Is4bbQXZaQ4S61r+JmFebsC2CxkZ20jayDBRKcQL6yH0ZZ
+a1rAdUqyh894vNctn52GAp7P96dhwAnwEQIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/hosts/ytart b/retiolum/hosts/ytart
new file mode 100644
index 00000000..9df79635
--- /dev/null
+++ b/retiolum/hosts/ytart
@@ -0,0 +1,9 @@
+Subnet = 42.82.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/hosts/zerg b/retiolum/hosts/zerg
new file mode 100644
index 00000000..9e9b0a4e
--- /dev/null
+++ b/retiolum/hosts/zerg
@@ -0,0 +1,10 @@
+Subnet = 42:448b:2bdc:d090:9f0f:a957:01a7:7254/128
+Subnet = 42.20.21.115/32
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAxLkTKBXMgChxgPlMlLqqGRx/MSZos2dkXdCw7pzyO9HRwYi2Ax1j
+frVG8Z6YQJAxGv4mOtSLEkSfgzgg0AgCb1o0/fniFabYgBVBMr7K5HvnoJz+ODP2
+49O7+m8t495ygOVY/qO6u4ezSbzDTqcPUjQxUHRo1Ik4/uDjvkPe+rbxC2ZTVW/Z
+YnhSaWwH/GkzI9T8OCmAGetdrsXKY+h/ukVJB89qHXAs2fqWIUvujyfwN/mj5mx4
+BT28RJr2/Mx2ivb1Dq1t8iaxNx+I8q5/WVl0EfZBKkSHsXtqzg9xqwzMS37dF356
+0uq2uuysIDbFMXF3jYvFSZyxCmgXNzvN5QIDAQAB
+-----END RSA PUBLIC KEY-----
diff --git a/retiolum/openwrt/tinc-up b/retiolum/openwrt/tinc-up
new file mode 100755
index 00000000..3b8bb978
--- /dev/null
+++ b/retiolum/openwrt/tinc-up
@@ -0,0 +1,19 @@
+# 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
+
+addr4=`sed -n 's|^ *Subnet *= *\(10[.][^ ]*\) *$|\1|p' $host`
+if [ "$addr4" != '' ];then
+ ifconfig $INTERFACE $addr4
+ route add -net 10.243.0.0 netmask 255.255.0.0 dev retiolum
+else
+ addr4=`sed -n 's|^ *Subnet *= *\(42[.][^ ]*\) *$|\1|p' $host`
+ ifconfig $INTERFACE $addr4
+ route add -net 42.0.0.0 netmask 255.0.0.0 dev retiolum
+fi
diff --git a/retiolum/openwrt/updater b/retiolum/openwrt/updater
new file mode 100755
index 00000000..4dbc7d78
--- /dev/null
+++ b/retiolum/openwrt/updater
@@ -0,0 +1,6 @@
+#!/bin/sh
+cd /etc/tinc/retiolum/hosts
+wget http://vpn.miefda.org/hosts.tar.gz
+tar xzf hosts.tar.gz
+rm hosts.tar.gz
+tincd -n retiolum -kHUP
diff --git a/retiolum/scripts/adv_graphgen/BackwardsReader.py b/retiolum/scripts/adv_graphgen/BackwardsReader.py
new file mode 100644
index 00000000..6bdbf43c
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/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/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/all_the_graphs.sh b/retiolum/scripts/adv_graphgen/all_the_graphs.sh
new file mode 100755
index 00000000..36b37f03
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/all_the_graphs.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+echo "`date` begin all graphs" >> /tmp/build_graph
+cd $(dirname $(readlink -f $0))
+(./anonytize.sh /srv/http/pub/graphs/retiolum/ && echo "`date` anonytize done" >> /tmp/build_graph)&
+(./sanitize.sh /srv/http/priv/graphs/retiolum/ && echo "`date` sanitize done" >> /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..1ebfe972
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/anonytize.sh
@@ -0,0 +1,31 @@
+#!/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=/var/log/syslog
+TYPE=svg
+TYPE2=png
+OPENER=/bin/true
+DOTFILE=`mktemp`
+trap 'rm $DOTFILE' INT TERM
+sudo LOG_FILE=$LOG_FILE python tinc_stats.py |\
+ python parse_tinc_anon.py> $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 -resize 20% $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/find_legacy_hosts.py b/retiolum/scripts/adv_graphgen/find_legacy_hosts.py
new file mode 100755
index 00000000..52388b6d
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/find_legacy_hosts.py
@@ -0,0 +1,59 @@
+#!/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 some 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
+ #sys.stderr.write ( "Getting Node availability of %s\n" % name)
+ 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
+ #sys.stderr.write("%s offline at timestamp %f\n" %(name,current))
+ last = ts
+ all_the_time = last - begin
+ try:
+ return uptime/ all_the_time
+ except:
+ return 1
+
+
+generate_stats()
diff --git a/retiolum/scripts/adv_graphgen/parse.py b/retiolum/scripts/adv_graphgen/parse.py
deleted file mode 100755
index 9c2dd051..00000000
--- a/retiolum/scripts/adv_graphgen/parse.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/python2
-# -*- coding: utf8 -*-
-
-import sys
-""" TODO: Refactoring needed to pull the edges out of the node structures again,
-it should be easier to handle both structures"""
-
-def write_digraph(nodes):
- """
- writes the complete digraph in dot format
- """
- print ('digraph retiolum {')
- print (' node[shape=box,style=filled,fillcolor=grey]')
- print (' overlap=false')
- generate_stats(nodes)
- nodes = delete_unused_nodes(nodes)
- merge_edges(nodes)
- for k,v in nodes.iteritems():
- write_node(k,v)
- print ('}')
-def generate_stats(nodes):
- """ Generates some statistics of the network and nodes
- """
- for k,v in nodes.iteritems():
- v['num_conns'] = len(v.get('to',[]))
-def delete_unused_nodes(nodes):
- new_nodes = {}
- for k,v in nodes.iteritems():
- if v.get('to',[]):
- new_nodes[k] = v
- 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[con['name']].get('to',[])):
- if k == secon['name']:
- del (nodes[con['name']]['to'][i])
- con['bidirectional'] = True
-
-
-def write_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 += "external:"+v['external-ip']+":"+v['external-port']+"\\l"
- if v.has_key('num_conns'):
- node += "Num Connects:"+str(v['num_conns'])+"\\l"
- for addr in v.get('internal-ip',['¯\\\\(°_o)/¯']):
- node += "internal:"+addr+"\\l"
- node +="\""
- if v['external-ip'] == "MYSELF":
- node += ",fillcolor=steelblue1"
- node += "]"
- print node
-
- for con in v.get('to',[]):
- edge = " "+k+ " -> " +con['name'] + "[weight="+str(float(con['weight']))
- if con.get('bidirectional',False):
- edge += ",dir=both"
- edge += "]"
- print edge
-
-def parse_input():
- nodes={}
- for line in sys.stdin:
- line = line.replace('\n','')
- if line == 'Nodes:':
- nodes={}
- for line in sys.stdin:
- if line == 'End of nodes.\n':
- break
- l = line.replace('\n','').split() #TODO unhack me
- nodes[l[0]]= { 'external-ip': l[2], 'external-port' : l[4] }
- if line == 'Subnet list:':
- for line in sys.stdin:
- if line == 'End of subnet list.\n':
- 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 line == 'Edges:':
- edges = {}
- for line in sys.stdin:
- if line == 'End of edges.\n':
- 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
-nodes = parse_input()
-write_digraph(nodes)
diff --git a/retiolum/scripts/adv_graphgen/parse_tinc_anon.py b/retiolum/scripts/adv_graphgen/parse_tinc_anon.py
new file mode 100755
index 00000000..3b0383da
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/parse_tinc_anon.py
@@ -0,0 +1,135 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+from BackwardsReader import BackwardsReader
+import sys,json
+#supernodes= [ "kaah","supernode","euer","pa_sharepoint","oxberg" ]
+""" 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 write_digraph(nodes):
+ """
+ writes the complete digraph in dot format
+ """
+ print ('digraph retiolum {')
+ #print (' graph [center rankdir=LR packMode="clust"]')
+ print (' graph [center packMode="clust"]')
+ print (' node[shape=circle,style=filled,fillcolor=grey]')
+ print (' overlap=false')
+ generate_stats(nodes)
+ merge_edges(nodes)
+ nodes = anon_nodes(nodes)
+ for k,v in nodes.iteritems():
+ write_node(k,v)
+ write_stat_node(nodes)
+ print ('}')
+
+def anon_nodes(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
+
+def write_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
+ '''
+ num_conns = 0
+ num_nodes = len(nodes)
+ for k,v in nodes.iteritems():
+ num_conns+= len(v['to'])
+ node_text = " stats_node [shape=box,label=\"Statistics\\l"
+ 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 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):
+ 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(new_nodes[k])
+ 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 write_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 += "avg weight: %.2f\\l" % v['avg_weight']
+ #if v.has_key('num_conns'):
+ # node += "Conns:"+str(v['num_conns'])+"\\l"
+ #node +="\""
+ #node +=",group=\""+v['external-ip'].replace(".","") + "\""
+ #node += "]"
+ print node
+
+ 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)
+ #weight = "1000" #str(300/float(con['weight']))
+ #weight = str((100/float(con['weight'])))
+ #weight = str(-1 * (200-100000/int(con['weight'])))
+ if float(weight) < 0 :
+ weight= "1"
+
+ #sys.stderr.write(weight + ":"+ length +" %s -> " %k + str(con) + "\n")
+ edge = " "+k+ " -> " +con['name'] + " [label="+label + " weight="+weight #+ " minlen="+length
+ if con.get('bidirectional',False):
+ edge += ",dir=both"
+ edge += "]"
+ print edge
+
+def decode_input(FILE):
+ return json.load(FILE)
+nodes = decode_input(sys.stdin)
+nodes = delete_unused_nodes(nodes)
+write_digraph(nodes)
diff --git a/retiolum/scripts/adv_graphgen/parse_tinc_stats.py b/retiolum/scripts/adv_graphgen/parse_tinc_stats.py
new file mode 100755
index 00000000..54dcc4ab
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/parse_tinc_stats.py
@@ -0,0 +1,185 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+from BackwardsReader import BackwardsReader
+import sys,json
+supernodes= [ "kaah","supernode","euer","pa_sharepoint","oxberg" ]
+""" 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 write_digraph(nodes):
+ """
+ writes the complete digraph in dot format
+ """
+ print ('digraph retiolum {')
+ #print (' graph [center rankdir=LR packMode="clust"]')
+ print (' graph [center packMode="clust"]')
+ print (' node[shape=box,style=filled,fillcolor=grey]')
+ print (' overlap=false')
+ generate_stats(nodes)
+ merge_edges(nodes)
+ write_stat_node(nodes)
+ for k,v in nodes.iteritems():
+ write_node(k,v)
+ print ('}')
+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 write_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
+ '''
+ num_conns = 0
+ num_nodes = len(nodes)
+ for k,v in nodes.iteritems():
+ num_conns+= len(v['to'])
+ node_text = " stats_node [label=\"Statistics\\l"
+ 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 generate_stats(nodes):
+ """ Generates some statistics of the network and nodes
+ """
+ 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():
+ 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)
+ v['availability'] = get_node_availability(k,jlines)
+ sys.stderr.write( "%s -> %f\n" %(k ,v['availability']))
+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 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
+ #sys.stderr.write ( "Getting Node availability of %s\n" % name)
+ 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
+ #sys.stderr.write("%s offline at timestamp %f\n" %(name,current))
+ last = ts
+ all_the_time = last - begin
+ try:
+ return uptime/ all_the_time
+ except:
+ return 1
+
+def delete_unused_nodes(nodes):
+ 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(new_nodes[k])
+ 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 write_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']
+ #node += "avg weight: %.2f\\l" % v['avg_weight']
+ 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',['¯\\\\(°_o)/¯']):
+ node += "internal:"+addr+"\\l"
+ node +="\""
+ if k in supernodes:
+ node += ",fillcolor=steelblue1"
+ #node +=",group=\""+v['external-ip'].replace(".","")+"\""
+ node += "]"
+ print node
+
+ 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)
+ #weight = "1000" #str(300/float(con['weight']))
+ #weight = str((100/float(con['weight'])))
+ #weight = str(-1 * (200-100000/int(con['weight'])))
+ if float(weight) < 0 :
+ weight= "1"
+
+ #sys.stderr.write(weight + ":"+ length +" %s -> " %k + str(con) + "\n")
+ edge = " "+k+ " -> " +con['name'] + "[label="+label + " weight="+weight #+ " minlen="+length
+ if con.get('bidirectional',False):
+ edge += ",dir=both"
+ edge += "]"
+ print edge
+
+def decode_input(FILE):
+ return json.load(FILE)
+nodes = decode_input(sys.stdin)
+nodes = delete_unused_nodes(nodes)
+try:
+ dump_graph(nodes)
+except Exception,e:
+ sys.stderr.write("Cannot dump graph: %s" % str(e))
+write_digraph(nodes)
diff --git a/retiolum/scripts/adv_graphgen/sanitize.sh b/retiolum/scripts/adv_graphgen/sanitize.sh
index 2febc54c..50f1659f 100755
--- a/retiolum/scripts/adv_graphgen/sanitize.sh
+++ b/retiolum/scripts/adv_graphgen/sanitize.sh
@@ -1,17 +1,32 @@
+#!/bin/sh
+set -euf
+cd $(dirname `readlink -f $0`)
GRAPH_SETTER1=dot
GRAPH_SETTER2=circo
-GRAPH_SETTER3=neato
-GRAPH_SETTER3=sfdp
-LOG_FILE=/var/log/everything.log
+GRAPH_SETTER3='neato -Goverlap=prism '
+GRAPH_SETTER4=sfdp
+LOG_FILE=/var/log/syslog
+TYPE=svg
+TYPE2=png
OPENER=/bin/true
+DOTFILE=`mktemp`
+trap 'rm $DOTFILE' INT TERM
+sudo LOG_FILE=$LOG_FILE python tinc_stats.py |\
+ python parse_tinc_stats.py > $DOTFILE
-sudo pkill -USR2 tincd
-sudo sed -n '/tinc.retiolum/{s/.*tinc.retiolum\[[0-9]*\]: //gp}' $LOG_FILE |\
- ./parse.py > retiolum.dot
-$GRAPH_SETTER1 -Tpng -o $1retiolum_1.png retiolum.dot
-$GRAPH_SETTER2 -Tpng -o $1retiolum_2.png retiolum.dot
-$GRAPH_SETTER3 -Tpng -o $1retiolum_3.png retiolum.dot
-$GRAPH_SETTER4 -Tpng -o $1retiolum_4.png retiolum.dot
-$OPENER retiolum_1.png &>/dev/null
-#rm retiolum.dot
+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 -resize 20% $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.py b/retiolum/scripts/adv_graphgen/tinc_stats.py
new file mode 100755
index 00000000..d0d47aff
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_stats.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+from BackwardsReader import BackwardsReader
+import os
+import re
+import sys
+import json
+
+
+TINC_NETWORK = os.environ.get("TINC_NETWORK","retiolum")
+os.environ["LOG_FILE"]
+SYSLOG_FILE = os.environ.get("LOG_FILE","/var/log/everything.log")
+
+
+# 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 get_tinc_block(log_file):
+ """ returns an iterateable block from the given log file (syslog) """
+ tinc_block = []
+ in_block = False
+ bf = BackwardsReader(log_file)
+ BOL = re.compile(".*tinc.retiolum\[[0-9]+\]: ")
+ 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_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__':
+ import subprocess,time
+ subprocess.call(["pkill","-SIGUSR2", "tincd"])
+ time.sleep(1)
+ print json.dumps(parse_input((get_tinc_block(SYSLOG_FILE))))
diff --git a/retiolum/scripts/autostart/Makefile b/retiolum/scripts/autostart/Makefile
deleted file mode 100644
index aba6bd33..00000000
--- a/retiolum/scripts/autostart/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-INIT_FOLDER=/etc/init.d
-.phony: all
-debian:
- #TODO change the tinc file before writing
- cp tinc /etc/init.d/tinc
- chmod +x /etc/init.d
- echo "retiolum" > /etc/tinc/nets.boot
- update-rc.d tinc defaults
-arch:
- @cp tinc /etc/rc.d
- @chmod +x /etc/rc.d/tinc
- @echo "add tinc to DAEMONS in /etc/rc.conf"
-
-
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/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/install.sh b/retiolum/scripts/tinc_setup/install.sh
index 9df38df7..a6b50b8a 100755
--- a/retiolum/scripts/tinc_setup/install.sh
+++ b/retiolum/scripts/tinc_setup/install.sh
@@ -1,11 +1,18 @@
#! /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=../../bin
+MYBIN=${CURR}/../../bin
netname=retiolum
# create configuration directory for $netname
mkdir -p /etc/tinc/$netname/hosts
@@ -15,45 +22,50 @@ 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
- echo "select username: "
+ 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.7.7.0
+ mynet4=10.243.0.0
if [ ! "$myipv4" ]
then
- echo "select v4 subnet ip (1-255) :"
+ printf 'select v4 subnet ip (1-255): '
read v4num
- myipv4=10.7.7.$v4num
- if [ "$v4num" -gt 0 -a "$v4num" -lt "256" ];
- then
- echo "check"
- else
- echo "you are made of stupid. bailing out"
- exit 1
- fi
+ until $MYBIN/check-free-retiolum-v4 $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=`${CURR}/../../bin/fillxx 42:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx`/128
+ 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
-cp $CURR/tinc-up /etc/tinc/$netname/
-
cat>tinc.conf<<EOF
Name = $myname
-ConnectTo = supernode
-ConnectTo = kaah
+ConnectTo = euer
+ConnectTo = oxberg
ConnectTo = pa_sharepoint
+ConnectTo = supernode
Device = /dev/net/tun
EOF
diff --git a/retiolum/scripts/tinc_setup/tinc-up b/retiolum/scripts/tinc_setup/tinc-up
index ae7c68e6..a829528d 100755
--- a/retiolum/scripts/tinc_setup/tinc-up
+++ b/retiolum/scripts/tinc_setup/tinc-up
@@ -4,17 +4,22 @@ dirname="`dirname "$0"`"
conf=$dirname/tinc.conf
-name=`sed -rn 's|^ *Name *= *([^ ]*) *$|\1|p' $conf`
+name=`sed -n 's|^ *Name *= *\([^ ]*\) *$|\1|p' $conf`
host=$dirname/hosts/$name
-route4=10.7.7.0/24
-addr4=`sed -rn 's|^ *Subnet *= *(10\.[^ ]*) *$|\1|p' $host`
+ip link set $INTERFACE up
-route6=42::/16
-addr6=`sed -rn 's|^ *Subnet *= *(42:[^ ]*) *$|\1|p' $host`
+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
-ifconfig $INTERFACE up $addr4
-route add -net $route4 dev $INTERFACE
+addr6=`sed -n 's|^ *Subnet *= *\(42[:][^ ]*\) *$|\1|p' $host`
ip -6 addr add $addr6 dev $INTERFACE
-ip -6 route add $route6 dev $INTERFACE
+ip -6 route add 42::/16 dev $INTERFACE
diff --git a/retiolum/scripts/tinc_setup/write_channel.py b/retiolum/scripts/tinc_setup/write_channel.py
index a11d4605..8299fa8d 100644
--- a/retiolum/scripts/tinc_setup/write_channel.py
+++ b/retiolum/scripts/tinc_setup/write_channel.py
@@ -3,18 +3,19 @@ import random, sys, time, socket
try:
myname=sys.argv[1]
except:
- print "you are made of stupid"
+ print("you are made of stupid")
exit (23)
-CHANNEL = '#tincspasm'
+CHANNEL = '#krebsco'
HOST='irc.freenode.net'
FILE="/etc/tinc/retiolum/hosts/"+myname
PORT=6667
NICK= myname+"_"+str(random.randint(23,666))
+print("Connecting...")
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
-print NICK
+print(NICK)
sock.send("NICK %s\r\n" % NICK)
sock.send("USER %s %s bla : %s\r\n" %(NICK,HOST,NICK))
sock.send("JOIN %s\r\n" % CHANNEL)
@@ -22,5 +23,5 @@ time.sleep(23)
f = open(FILE,'r')
a = [ sock.send("PRIVMSG %s : %s" % ( CHANNEL,line)) for line in f]
time.sleep(5) #because irc is so lazy
-print "closing socket"
+print("closing socket")
sock.close()
[cgit] Unable to lock slot /tmp/cgit/43200000.lock: No such file or directory (2)