Ich weiß nicht, ob dies ein Bug ist oder nicht! Ich verwende die gleichen Scripte für IPv4 über lange Zeit und dort funktionieren diese einwandfrei. Angepaßt auf IPv6 solle eine Setzen von IPv6s in einer Sperrliste eigentlich ähnlich möglich sein, aber daß funktioniert überhaupt nicht.
Die Kombination in den Beispielen 9999:9999 ist eine faked IP wegen der Sicherheit!
Und Du könntest mal in einer Zeile versuchen, das letzte Zeichen 7 Stellen nach vorne zu verschieben. Wird zwar eh nichts bringen, weil die auskommentiert wurde, aber ich meine ja nur mal so …
also bei den IPv4 sieht es ganz normal aus. Bei den IPv6 dann fehlerhaft! Ich habe nur die letzten Zeilen mal aus dem Output angehängt: - Die IPs habe ich aus Sicherheitsgründen verwandelt (*)
+ ipset add blocklist_all-build 223.*.189.148/32
+ read host
+ ipset add blocklist_all-build 223.*.242.90/32
+ read host
+ ipset add blocklist_all-build 223.*.32.73/32
+ read host
+ ipset swap blocklist_all-build blocklist_all
+ ipset destroy blocklist_all-build
+ ipset -exist create blocklist_all-v6 hash:net family inet6
+ ipset -exist create blocklist_all-build-v6 hash:net family inet6
+ read host
' echo 'HOST: 2001:41d0:1004:***::759
HOST: 2001:41d0:1004:***::759
+ ipset add blocklist_all-build-v6 $'2001:41d0:1004:***::759\r'
' to an IPv6 address: Name or service not known01:41d0:1004:***::759
: resolving to IPv6 address failedd0:1004:***::759
+ read host
' echo 'HOST:
HOST:
+ ipset add blocklist_all-build-v6 $'\r'
' to an IPv6 address: Name or service not known
: resolving to IPv6 address failed
+ read host
+ ipset swap blocklist_all-build-v6 blocklist_all-v6
+ ipset destroy blocklist_all-build-v6
Was hier auffällig ist, daß Linux Debian ein $’ einfügt und eine \r und dann aber anschließend $'20
offensichtlich als ASCII-Zeichen interpretiert!
Hier noch mal die Script-Zeilen:
while read host
do
echo "HOST: $host"
ipset add blocklist_all-build-v6 $host
done < $SCRIPTPATH/all2_ipv6.txt
In der all2_ipv6.txt steht nur diese Zeile wie folgt drin:
Eine leere Host-Zeile muß noch raus - war eine Leerzeile am Ende noch in der Liste der IPv6 !
Man sieht, daß der Echo funktioniert! Daß mit dem $’\r’ war nur die Leerzeile. Ich füge daher noch mal das Ergebnis an, jetzt sogar mit einem Leerzeichen in den Anführungszeichen:
+ ipset add blocklist_all-build 223.*.242.90/32
+ read host
+ ipset add blocklist_all-build 223.*.32.73/32
+ read host
+ ipset swap blocklist_all-build blocklist_all
+ ipset destroy blocklist_all-build
+ ipset -exist create blocklist_all-v6 hash:net family inet6
+ ipset -exist create blocklist_all-build-v6 hash:net family inet6
+ read host
' echo 'HOST: 2001:41d0:1004:***::759
HOST: 2001:41d0:1004:***::759
' ipset add blocklist_all-build-v6 ' 2001:41d0:1004:***::759
' to an IPv6 address: Name or service not known001:41d0:1004:***::759
: resolving to IPv6 address failed1d0:1004:***::759
+ read host
+ ipset swap blocklist_all-build-v6 blocklist_all-v6
+ ipset destroy blocklist_all-build-v6
root@pm4-host:~/scripte/blocklist.de$
Also warum wird bei ipset aus einer Variablen der Inhalt dieser verändert und eine IP-Auflösung probiert?
Habe ich auch probiert mit ; hinter $host und nicht in Anführungszeichen, aber bringt auch nichts!
Auch nicht, wenn die IPv6 als volle IPv6 umgewandelt wurde:
Statt **** steht z.B. 1234 oder 01ab drin
+ read host
' echo 'HOST: 2001:41d0:1004:****:0000:0000:0000:0759
HOST: 2001:41d0:1004:****:0000:0000:0000:0759
+ ipset add blocklist_all-build-v6 $'2001:41d0:1004:****:0000:0000:0000:0759\r'
' to an IPv6 address: Name or service not known01:41d0:1004:****:0000:0000:0000:0759
: resolving to IPv6 address failedd0:1004:****:0000:0000:0000:0759
+ read host
Es muß also irgendwo an dem ipset liegen, daß die Variable verändert, denn im Echo wird die Variable sauber aufgelöst! Die $’ und \r’ werden eingefügt und dann wird beim Prüfen der IPv6 die 20 vorne entfernt, also gehe ich davon aus, daß die ersten 2 Stellen der IPv6 dabei in ein ASCII - Zeichen gewandelt werden
Was mir noch aufgefallen ist: Wurde deine Textdatei auf einem Windows-System erstellt? Ich tippe darauf, da bei deiner Ausgabe das Zeichen „\r“ (Carriage return) auftaucht.
Wie schon geschrieben, ist es egal, ob bei ipset die Variable $host in Anführungszeichen gesetzt ist oder nicht und in meiner Anwort vom 27.07.2016 - 13:42 Uhr ist diese Variante so aufgeführt! Mit einfachen ’ wird die Variable nicht aufgelöst! Also alles probiert! Bei der IPv4 - Variante funktioniert das Script sauber - es ist im Prinzip dort der gleiche Weg und auf dem gleichen Weg werden auch die notwendigen Text-Dateien erzeugt! Aber selbst wenn diese über den VI in Linux erzeugt werden, ändern sich nichts daran, daß ipset hier einen Fehler macht!
Die andere Variante mit einem Restore zu arbeiten, funktioniert dabei korrekt und sauber!