Hetzner
Vorab: Dies ist keine korrekte Lösung. Es ist lediglich ein sehr unschöner Hack. Eine Lösung kann für solche Situationen nur in Zusammenarbeit mit dem Hoster erfolgen. Verweigert sich dieser, bleibt nur der Hack.
Hetzner monitored den Traffic, den die Gateways verursachen. Sollten Verbindungsversuche zu nicht gerouteten IPs dabei sein, generiert Hetzner Abuse und schickt es (Achtung!) nicht an die hinterlegte Abuse-Adresse. Was man dagegen tun kann ist hier beschrieben.
Man benötigt zunächst alle routbaren Adresse/Prefixe. Diese kann man sich z.B. bei routeviews.org runterladen. Diese Adressen können dann in die Routing-Tabelle eingepflegt werden. Am besten geht das, wenn das Gateway in einer VM ist, dann kann der Host die Filterung übernehmen.
In diesem Beispiel kommunizieren die Gateways, welche in VMs laufen, über das Interface "f3n". Normalerweise wird jeder Traffic von diesem Interface einfach weiter zum default Gateway geschickt. (Bei professionellen Hostern wird dann spätestens beim Border-Gateway jeglicher auf null geroutet). Der Mechanismus ist nun, per "ip rules" alle Verbindungen, die aus f3n (also von den VMs) kommen in eine eigene Routing Tabelle (hetzner1) zu sperren. In dieser werden alle routbaren Prefixe mit dem default gateway von Hetzner als next-hop eingetragen. Als default gateway in dieser Tabelle wird 127.0.0.1 über lo eingetragen. Alle x Stunden sollte die Tabelle aufgefrischt werden. Dazu wird eine neue (hetzner2) angelegt und anschließend die Regel umgebogen.
/etc/iproute2/rt_tables:
.. 11 hetzner1 12 hetzner2
hetzner.sh:
cd /tmp current=$(ip ru | grep hetzner | sed 's/.*hetzner//g' | tr -d '[:space:]') if [ "$current" = "1" ]; then next="2" else next="1" fi echo "Downloading routing snapshot" wget -q http://archive.routeviews.org/oix-route-views/oix-full-snapshot-latest.dat.bz2 -O oix-full-snapshot-latest.dat.bz2 echo "Unpacking" bzip2 -d -f oix-full-snapshot-latest.dat.bz2 echo "Parsing" allIP=oix-full-snapshot-latest.uniq tail -n+6 oix-full-snapshot-latest.dat | cut -d' ' -f3 | uniq | grep -v "0.0.0.0/0" > $allIP echo "Aggregating the prefixes" filterIP=oix-full-snapshot-latest.filtered unlink $filterIP for i in $(seq 0 255); do (grep "^$i\." $allIP | aggregate >> $filterIP) 2>&1 | grep -v "aggregate: maximum prefix length permitted will be 32" | grep -v "aggregate: no prefixes supplied" done echo "Cleaning up hetzner$next" ip ro flush ta hetzner$next echo "Inserting new valid routes to hetzner$next" for prefix in $(cat $filterIP | grep -v "^#"); do ip ro add $prefix via 5.9.89.33 table hetzner$next done echo "Inserting null route to hetzner$next" ip ro add default via 127.0.0.1 dev lo table hetzner$next echo "Adding new rule for hetzner$next" ip ru add from all iif f3n lookup hetzner$next if [ -n "$current" ]; then echo "Removing old rule for hetzner$current" ip ru del from all iif f3n lookup hetzner$current echo "Cleaning up old hetzner$current" ip ro flush ta hetzner$current fi