IPv6

Forum for developers

IPv6

Beitragvon Erik_S » So Sep 07, 2014 12:33 pm

Hallo,

ich habe gestern mal ein bisschen mit IPv6 als Konfiguration rumgespielt, in der YaCy-Version 1.73/9340:

Als erstes habe ich die öffentliche IPv6-Adresse des Servers auf dem mein YaCy-Peer läuft als statische IP konfiguriert (vorher war dort die IPv4-Adresse). Das hat auch so weit ich sehen konnte funktioniert, sogar in der Seed-Liste (per '/yacy/seedlist.json') stand meine IPv6-Adresse drin (im Eintrag "Address" sogar korrekt mit eckigen Klammern und folgender Port-Nummer). Ich war also erstmal zufrieden.
Gewundert hat mich das auf der Seite '/Status.html' rechts in der Info-Box steht
Adresse
Host: IPv4-Adresse:8090 | SSL: enabled (port 8443)
Öffentliche Adresse: http://[IPv6-Adresse]:8090
YaCy Adresse: ***.yacy
Mal davon abgesehen das diese Info-Box deutlich zu schmal ist ist es gut das auch hier die IPv6-Adresse mit eckigen Klammern versehen ist aber warum eine Zeile darüber meine IPv4-Adresse steht erschließt sich mir nicht. Okay, die angegebene IPv4-Adresse ist richtig, der Server auf dem der YaCy-Peer läuft hat schließlich eine Dual-Stack-Anbindung, so das ich schlussfolgere das es in YaCy irgendwo Code gibt der in der Lage ist die eigene IP-Adresse zu ermitteln aber offensichtlich immer eine IPv4-Adresse bevorzugt.

Als viel problematischer sehe ich aber das mein YaCy-Peer nach der Umstellung auf IPv6 quasi vereinsamt ist, es gab immer weniger ankommende Verbindungen von anderen YaCy-Peers und die Verbindungen die noch kamen benutzten alle die IPv4-Adresse meines Servers, unter der YaCy natürlich nach wie vor erreichbar war. Ich konnte in den Seeds und Peer-Listen der anderen Peers meinen Peer auch mit meiner IPv6-Adresse finden aber keiner dieser Peers war wohl in der Lage meinen Peer per IPv6 zu kontaktieren.
Mir stellt sich also die Frage ob die anderen YaCy-Peers über keine IPv6-Anbindung verfügen oder ob es im Quell-Code oder in der Konfiguration von YaCy irgendein Hindernis gibt andere Peers per IPv6 anzusprechen.
Mein Peer hat trotzdem weiterhin andere Peers kontaktiert, natürlich nur per IPv4 weil mein Peer offensichtlich der einzigste Peer war der eine IPv6-Adresse publiziert hat.

Da es eh nur eine Test-Installation war hab ich auch einfach mal beide IP-Adressen als statische IP konfiguriert, also IPv6 und IPv4 per Komma getrennt hintereinander eingetragen, und die Status-Seite hat gemeldet
Adresse
Host: IPv4-Adresse:8090 | SSL: enabled (port 8443)
Öffentliche Adresse: http://[IPv6-Adresse,IPv4-Adresse]:8090
YaCy Adresse: ***.yacy
nach welcher Logik die eckigen Klammern dazu kommen weiß ich zwar nicht aber das die IPv4-Adresse da mit eingeschlossen wird ist sicher nicht gewollt. Ich vermute das liegt daran das als statische IP immer nur eine einzelne IP-Adresse erwartet wird, aber es gibt wohl nirgends eine Prüfung ob der Inhalt in diesem Feld auch wirklich eine einzelne und gültige IP-Adresse ist. Auch das gesamte Format der Peer-to-Peer-Elemente (also Seed-Lists usw.) scheint auf eine einzelne IP-Adresse ausgerichtet zu sein. In der JSON-Seed-Liste waren ebenfalls beide IP-Adressen drin, im Feld "IP" würde ich "IPv6-Adresse,IPv4-Adresse" sogar als korrekt bezeichnen (das Komma als Trenner eignet sich gut da es weder in IPv6 noch in IPv4 vorkommt) aber der Inhalt vom Feld "Address" ist mit "[IPv6-Adresse,IPv4-Adresse]:8090" definitiv als defekt zu bezeichnen.


Mein Fazit aus meinen Versuchen mit IPv6 ist einfach: YaCy ist derzeit noch nicht IPv6-ready.
Eine der Ursachen ist das die YaCy-Peers offensichtlich keine IPv6-Verbindungen aufbauen können wobei hier natürlich erstmal der Grund untersucht werden sollte. Zu diesem Zeck wäre es schön wenn es mehrere YaCy-Peers gäbe die auf einem System mit korrekt funktionierender Dual-Stack-Anbindung laufen und bei denen im Start-Script auch IPv6 freigeschalten ist. Dann könnte man sich beim Debuggen auf diese Peers konzentrieren um herauszufinden wie die anderen Peers über den eigenen Peer denken.
Das zweite Problem ist das YaCy pro Peer nur eine einzige IP-Adresse verwaltet, das verkennt aber die Realität in der nicht nur IPv6 und IPv4 parallel existieren sondern gerade für IPv6 Multihoming eher die Regel als eine Ausnahme ist (abgesehen davon das es auch bei IPv4 Multihoming-Konstellationen gibt aber ziemlich selten). Für IPv6 gibt es z.B. die Privacy-Extensions die in allen aktuellen Windows/OS-X/Linux-Versionen per default aktiv sind, damit bekommt jedes Netzwerk-Interface regelmäßig eine neue IPv6-Adresse zugewiesen die ab dann auch für alle rausgehenden Verbindungen als Absender-Adresse benutzt wird. Die alten IPv6-Adressen stehen für reinkommende Verbindungen noch eine Weile zur Verfügung aber werden irgendwann komplett abgeschalten. Wenn YaCy also auch nach dem Abschalten von IPv4 noch funktionieren will ist es zwingenst erforderlich das YaCy mit mehreren IP-Adressen pro Peer zurecht kommt und es auch verträgt das sich diese IP-Adressen relativ schnell ändern können. Es wird natürlich auch weiterhin YaCy-Peers geben die über konstante IP-Adressen verfügen (all jene die auf Root-Servern u.ä. im Internet laufen) aber die Mehrheit der YaCy-Peers die auf privaten PCs laufen werden im IPv6-Zeitalter schnell wechselnde IP-Adressen und damit mehrere IP-Adressen (weil die älteren nicht sofort verschwinden) parallel haben.

IPv6 wird für YaCy einige Probleme lösen, so werden mit IPv6 auch PCs hinter (privaten) Routern eine individuelle öffentlich erreichbare IP-Adresse (ohne NAT) bekommen was die Anzahl der Junior-Peers drastisch verringern dürfte (und damit sicher auch Übergangslösungen wie UPnP (oder das Mentor-Mentee-Konzept) an Bedeutung verlieren). Auf der anderen Seite stellt IPv6 YaCy vor einige neue Herausforderungen wie z.B. Multihoming. Auch der IPv4-Sunset wird sicher noch etliche Jahre dauern und es erforderlich machen das YaCy mit beiden IP-Versionen parallel umgehen kann, was auf Multihoming-Unterstützung in YaCy hinausläuft.


Meckern kann jeder, ich würde gerne dabei helfen das YaCy die kommenden Herausforderungen im Umgang mit IPv6 erfolgreich meistert.
Ich habe gut 20 Jahre Erfahrung als Programmierer, auch in anspruchsvollen industriellen Projekten. Mein Haupteinsatzfeld war dabei immer Embedded-Technik, von GUI usw. hab ich keine Ahnung. IP-basierte Netzwerkkommunikation war dabei oft mein Schwerpunkt. Mein privates Netzwerk zuhause ist seit Jahren IPv6-only und wird von einem von mir selber programmierten SOCKS5-Proxy geschützt ans Internet angebunden. Mein Proxy enthält u.a. einen DNS-Server fürs lokale Netz, einen HTTP-Server für das Management-Interface (fürs lokale Netz), den PPPoE-Client für die DSL-Einwahl ins Internet, den eigentlichen SOCKS-Proxy und für jedes Interface einen eigenen speziell zugeschnittenen IP-Stack. Ich bin auch den Umgang mit Werkzeugen wie nmap und Wireshark geübt. Meine letzten Kontakte mit Java sind zwar schon einige Jahre her aber ich denke das verlernt man nicht so schnell, nebst dessen das C/C++ mein tägliches Handwerkszeug sind so das mir weder Syntax noch Sprachkonzepte von Java völlig fremd sind.

Ein Umbau von YaCy in Richtung vollwertiger IPv6-Unterstützung ist mit Sicherheit keine Kleinigkeit und wird wohl viele Quell-Dateien betreffen aber ich möchte da gerne einen Anteil zu beisteuern. Mir ist bewusst das alle Änderungen auf keinen Fall Kompatibilitätsprobleme mit älteren YaCy-Versionen verursachen dürfen und ich denke ich habe ein tragfähiges Konzept in meinem Kopf das wir natürlich vorher diskutieren sollten. Ich hätte gerne eine klare Aussage der YaCy-Maintainer ob ein Umbau in Richtung IPv6 überhaupt gewünscht ist und ob meine Mitarbeit daran erwünscht ist. Ich sollte dabei aber nicht verschweigen das ich manchmal ein schwieriger Typ sein kann und das ich vieles einfach so ausdrücke wie es mir durch den Kopf geht.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Mo Sep 08, 2014 9:00 am

wie (bereits anderwo) gesagt: wenn ich eine Entwicklungsumgebung in einem IPv6 Netz hätte, könnte ich hier mehr als nur 'blind' entwickeln. Hier hilft alles schreiben nicht: jemand (anderes) der/die eine IPv6 Umgebung hat muss da herumtracen und Bugs fixen!
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mo Sep 08, 2014 11:25 am

Hallo,

Orbiter hat geschrieben:wie (bereits anderwo) gesagt: wenn ich eine Entwicklungsumgebung in einem IPv6 Netz hätte, könnte ich hier mehr als nur 'blind' entwickeln.
Okay, diesen Part würde ich gerne übernehmen, ich verfüge über alle erforderlichen Mittel.

Orbiter hat geschrieben:Hier hilft alles schreiben nicht: jemand (anderes) der/die eine IPv6 Umgebung hat muss da herumtracen und Bugs fixen!
Es geht nicht ums fixen von Bugs. Es ist nicht so das es in YaCy Code gäbe der IPv6 explizit verhindern würde sondern es fehlt Code der die für IPv6 erforderlichen Features zur Verfügung stellt! Das mit den fehlenden Klammern ist zwar ein Bug und vielleicht gibt es von der Sorte noch ein paar Problemchen im YaCy-Code aber das ist meiner Meinung nach trotzdem nur ein Nebenschauplatz.
Die für IPv6 erforderlichen Features müssen in einer möglichst großen Anzahl an YaCy-Peers vorhanden sein, selbst wenn diese Peers selber noch nicht über IPv6 verfügen, damit es sich lohnt IPv6 in wenigstens ein paar Test-Peers aktiv einzuschalten. Und nur wenn das sauber funktioniert (also alle zwischenzeitlich eventuell gefundenen Bugs gefixt sind) ist es vernünftig IPv6 per Default bei allen Peers anzuschalten, auch wenn es dann gewiss immer noch einige Peers geben dürfte denen keine IPv6-Anbindung zur Verfügung steht aber das soll der YaCy-Code dann selbstständig erkennen.

Um YaCy überhaupt grundsätzlich die zusätzliche Nutzung von IPv6 zu ermöglichen ist die Unterstützung von Multihoming in allen (oder zumindest den meisten) YaCy-Peers grundlegende Voraussetzung. Das ist aber nicht nur mal ein kleiner Bug-Fix sondern das ist ein tiefgreifender Umbau in einer der zentralen Komponenten von YaCy: dem Peer-to-Peer-Netzwerk-Management.
So einen Umbau würde ich auf jeden Fall nur dann anfangen wenn ich sicher bin das die Maintainer da auch wirklich dahinter stehen, nebst dessen das an gewissen Punkten der neue Code auch in die offiziell veröffentlichten YaCy-Versionen einfließen muss damit es sich lohnt den nächsten Schritt anzufangen.

So wie YaCy derzeit aufgebaut ist ist eine Nutzung von IPv6 zwar theoretisch möglich (falls nicht doch noch irgendwo ein subtiler Bug drin steckt) würde aber bedeuten dass das YaCy-Netzwerk in zwei komplett getrennte Welten aufgespalten würde und das ist doch sicher nicht das Ziel der Sache.

Ich bin bereit die nötige Weiterentwicklung von YaCy anzugehen aber ich möchte dafür Rückendeckung durch die Maintainer!
Über meine Ideen wie das konkret zu bewerkstelligen ist sollten wir auch vorher diskutiert haben.
Die Unterstützung von Multihoming ist insgesamt keine Kleinigkeit sondern eine Menge Arbeit die auch einige sehr zentrale Stellen von YaCy nachhaltig berühren wird und das werde ich nicht machen wenn es nicht wirklich gewollt ist.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Mi Sep 24, 2014 5:08 pm

arrrgh, mich hats erwischt: ich habe den Provider gewechselt und bekomme IPv4 nur noch über einem IPv6-Tunnel und einem NAT beim Provider :x :x :x
D.h. ich habe momentan meine Peers im Junior-Modus laufen und muss nun aktiv werden um zumindest einen IPv6-Backping der remote Hosts erzwingen zu können, damit man meinen Senior Mode über einen offenen Port auf einer IPv6 Adresse testen kann.

D.h.: jetzt habe ich eine IPv6 Entwicklungsumgebung! Seid also auf die schlimmsten Commits gespannt...
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mi Sep 24, 2014 10:32 pm

Hallo,

Orbiter hat geschrieben:und bekomme IPv4 nur noch über einem IPv6-Tunnel und einem NAT beim Provider
Du darfst Dir meines tiefsten Mitgefühls sicher sein. Carrier-Grade-NAT ist meiner Meinung nach eine der miesesten Krücken die sich die Provider haben einfallen lassen um den IPv6-Umstieg hinauszuzögern.

Orbiter hat geschrieben:jetzt habe ich eine IPv6 Entwicklungsumgebung!
Meinen Glückwunsch und herzlich willkommen im Internetz der Zukunft.

Orbiter hat geschrieben:um zumindest einen IPv6-Backping der remote Hosts erzwingen zu können
Das dürfte aber mit den meisten YaCy-Peers schon wegen dem Parameter "-Djava.net.preferIPv4Stack=true" der Java-VM relativ schwer werden, falls die Peers überhaupt IPv6-Konektivität haben. Beim YaCy-Peer den ich betreibe habe ich das Java-VM-Parameter entfernt und er reagiert ganz sicher auf IPv6-Verbindungen und sollte auch selber IPv6-Verbindungen initiieren können. Wenn Du möchtest sende ich Dir per PM die statische IPv6-Adresse meines Peers, falls Du mir Hash und Name Deines Peers gibst wird mein Analyse-Tool die Augen offen halten wenn sich was in den Seed-Listen tut. Als ich meinem YaCy-Peer, der eine vollwertige Dual-Stack-Anbindung hat, probeweise die IPv6-Adresse als statische IP konfiguriert hatte hat sich diese auch in den Seed-Listen der anderen Peers rumgesprochen aber kein anderer Peer hat per IPv6 Verbindung zu meinem Peer aufgenommen, alles was noch von außen kam kam nur von Peers die noch die alte IPv4 (die natürlich weiterhin gültig war und auf die mein Peer auch weiterhin geantwortet hat) in ihren Listen hatten aber das wird bei Dir wohl nicht der Fall sein, ich fürchte Dein Peer wird fürs erste relativ einsam sein.

Wenn Du Code schreibst der die öffentliche IPv6-Adresse Deines Computers ermittelt vergiss nicht das bei IPv6 jedes Netzwerkinterface grundsätzlich mehrere IPv6-Adressen hat und das wenn die IPv6-Privacy-Extensions aktiv sind (bei Mac OS X wimre seit mehreren Jahren die Defaulteinstellung) dann hast Du auch mehrere öffentliche global routbare IPv6-Adressen (die regelmäßig geändert werden, zusätzlich zu den privaten IPv6-Adressen) an dem Netzwerkinterface das zum Router geht.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Do Sep 25, 2014 12:23 pm

hm, ich habe mal nach den -Djava.net.preferIPv4Stack=true geguckt und das scheint nur bei den Start scripten für linux incl. debian und Windows im Debug-Modus noch drin zu sein. Das normale Windows Start Script und meine Entwicklungsumgebung hat die Option nicht und alles geht trotzdem. Scheint ein guter Grund zu sein die Option ganz raus nehmen zu können. Mache ich mal. Bei dir gehts ja auch.

Die Varianten bei den IPv6 Adressen habe ich schon entdeckt, als ich versucht habe alle lokalen Adressen aufzusammeln. Bei mir kommen auch noch Bonding-Adressen vor denn ich habe meinen Rechner über zwei Sockets als Bond an einem aktiven Switch hängen. Ich muss mal rausfinden wie man die erkennt.

Bei meinen ersten Tests bin ich aber noch in andere Fallen gestolpert, z.B. hat der httpd nicht mehr erkannt dass ich von Localhost komme und ich damit authentifiziert bin. Das hat ganz schön Schlaglöcher..

Immerhin habe ich es geschafft wieder einen Port im Router aufzumachen und von einer Testseite aus per ipv6 darauf zu pingen, der YaCy httpd hat geantwortet.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Fr Sep 26, 2014 10:04 am

Hallo,

Orbiter hat geschrieben:Scheint ein guter Grund zu sein die Option ganz raus nehmen zu können. Mache ich mal.
Seht gut, dann kann ich mir beim nächsten Update von YaCy ersparen das StartScript händisch von der alten Installation in die neue zu kopieren. Ich hab das fehlende Parameter mit einem 64Bit-Linux und einem 32Bit-Linux getestet, auf beiden Systemen bindet Java den TCP-Server-Socket an TCP6 und ist damit in der Lage auch IPv4-Verbindungen entgegenzunehmen.

Orbiter hat geschrieben:Bei mir kommen auch noch Bonding-Adressen vor denn ich habe meinen Rechner über zwei Sockets als Bond an einem aktiven Switch hängen. Ich muss mal rausfinden wie man die erkennt.
Ich hab zwar keine Ahnung was Du mit Bonding-Adressen meinst, ich vermute mal Du hast mehrere Ethernet-Verbindungen zu einem logischen Link zusammengeschaltet um die Bandbreite/Ausfallsicherheit zu erhöhen, falls ja dann solltest Du eigentlich für diesen logischen Link ein neues (virtuelles) Ethernet-Interface haben und diesem sollten die entsprechenden IP-Adressen zugeordnet sein. Falls die physischen Ethernet-Interfaces trotzdem noch zusätzliche IP-Adressen haben dann sollten das meiner Meinung nach reine private IP-Adressen sein. Bevor Du versuchst die IP-Adressen zu ordnen solltest Du erstmal alle IP-Adressen ausfiltern die nicht "global routable Unicast" sind.

Orbiter hat geschrieben:Bei meinen ersten Tests bin ich aber noch in andere Fallen gestolpert, z.B. hat der httpd nicht mehr erkannt dass ich von Localhost komme und ich damit authentifiziert bin. Das hat ganz schön Schlaglöcher..
Das kann ich mir gar nicht erklären, http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#isLoopbackAddress() sollte doch auch für IPv6-Adressen Out-of-the-Box korrekt arbeiten.

Orbiter hat geschrieben:der YaCy httpd hat geantwortet.
Sehr gut, der nächste Schritt müsste sein einen IPv6-Back-Ping von einem anderen YaCy-Peer zu erreichen von dem Du sicher weißt das er IPv6-Konektivität hat, ich geb Dir da gerne eine passende IP-Adresse. Der Schritt danach müsste beinhalten das YaCy in der Lage ist für jeden Peer mehr als eine IP-Adresse (oder alternativ einen einzelnen Host-Namen) zu verwalten, nur so können Peers die über IPv4 und IPv6 verfügen auch für beide Welten ansprechbar bleiben. Eine Teilung des YaCy-Kontinuums in IPv4-only und IPv6-only ist doch hoffentlich nicht angestrebt, oder?

Orbiter hat geschrieben:Immerhin habe ich es geschafft wieder einen Port im Router aufzumachen
Aha, ich dachte bei IPv6 wäre sowas nicht mehr notwendig weil doch damit wieder eine echte Ende-zu-Ende-Kommunikation zwischen Deinem PC und dem Server im Internet stattfindet. Oder beinhaltet Dein Router für IPv6 eine statefull Firewall? NAT oder sowas gibt es bei IPv6 eigentlich nicht mehr.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Fr Sep 26, 2014 2:12 pm

Erik_S hat geschrieben:
Orbiter hat geschrieben:Bei mir kommen auch noch Bonding-Adressen vor denn ich habe meinen Rechner über zwei Sockets als Bond an einem aktiven Switch hängen. Ich muss mal rausfinden wie man die erkennt.
Ich hab zwar keine Ahnung was Du mit Bonding-Adressen meinst, ich vermute mal Du hast mehrere Ethernet-Verbindungen zu einem logischen Link zusammengeschaltet um die Bandbreite/Ausfallsicherheit zu erhöhen, falls ja dann solltest Du eigentlich für diesen logischen Link ein neues (virtuelles) Ethernet-Interface haben und diesem sollten die entsprechenden IP-Adressen zugeordnet sein. Falls die physischen Ethernet-Interfaces trotzdem noch zusätzliche IP-Adressen haben dann sollten das meiner Meinung nach reine private IP-Adressen sein. Bevor Du versuchst die IP-Adressen zu ordnen solltest Du erstmal alle IP-Adressen ausfiltern die nicht "global routable Unicast" sind.

die sind aber merkwürdigerweise auch public, ich weiss noch nicht wie man in Java das abfragen kann. Wenn ich von Java aus nach den eigenen IP-Adressen frage, bekomme ich drei: die beiden Netzwerkadressen die per Bonding zu einer virtuellen gebündelt werden.

Erik_S hat geschrieben:
Orbiter hat geschrieben:Bei meinen ersten Tests bin ich aber noch in andere Fallen gestolpert, z.B. hat der httpd nicht mehr erkannt dass ich von Localhost komme und ich damit authentifiziert bin. Das hat ganz schön Schlaglöcher..
Das kann ich mir gar nicht erklären, http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#isLoopbackAddress() sollte doch auch für IPv6-Adressen Out-of-the-Box korrekt arbeiten.

ja.. theoretisch. Wir haben früher einfach Java die Eigenschaft isLocalIP testen lassen, da gab es dann aber merkwürdigerweise von Java aus DNS Abfragen die darüberhinaus auch noch nicht concurrencyfähig waren. Wir haben dann mit regulären Ausdrücken vorher getestet ob eine IP ggf. eine Localhost-Adresse ist, dieses Verfahren ist eine üble Kaffeesatzleserei in der ich jetzt wahrscheinlich ganz gut aufgeräumt habe. Die Pattern für localhost-Erkennung waren m.E. nach auch unvollständig. Du kannst ja dann mal in den Code schauen...

Erik_S hat geschrieben:
Orbiter hat geschrieben:der YaCy httpd hat geantwortet.
Sehr gut, der nächste Schritt müsste sein einen IPv6-Back-Ping von einem anderen YaCy-Peer zu erreichen von dem Du sicher weißt das er IPv6-Konektivität hat, ich geb Dir da gerne eine passende IP-Adresse. Der Schritt danach müsste beinhalten das YaCy in der Lage ist für jeden Peer mehr als eine IP-Adresse (oder alternativ einen einzelnen Host-Namen) zu verwalten, nur so können Peers die über IPv4 und IPv6 verfügen auch für beide Welten ansprechbar bleiben. Eine Teilung des YaCy-Kontinuums in IPv4-only und IPv6-only ist doch hoffentlich nicht angestrebt, oder?

nein eine Teilung mache ich nicht. Ich erweitere gerade das Protokoll und da wird es dann möglich sein mehrere IP-Adressen an einem Peer zu haben, z.B. eine IPv4 und eine IPv6 oder auch mehrere IPv6. Ich versuche hier mal kleine Schritte, den bisherigen Feldern weise ich erst mal nur IPv4 Adressen zu um keine Katastrophe auszulösen.

Die Idee ist, dass ein Peer der per 'hello'-Ping angesprochen wird versuchen soll auf der IPv6 Adresse den Packping zu machen. Nur kann der httpd keine IPv6 Backping-Adresse dem Servlet geben, wenn er über IPv4 angesprochen wurde. Daher muss eine oder mehrere IPv6-Adresse(n) im http-Get Attribut mitgegebe werden und der Packping muss dann an den client Host (IPv4) und alle angegebenen IPv6 Adressen gleichzeitig gehen, und die Adresse wo eine Antwort kommt geht dann wieder als Antwort von 'hello.html' zurück an den anpingenden Peer. Der muss dann wiederum Fälle unterscheiden wie: manche Peers können mich mit IPv4 anpingen, manche IPv6. Diese Varianten müssen auch in den Seed rein, denn dort wird das gespeichert und weiter propagiert. Und das ganze p2p-Protokoll muss sich dann aus den Varianten die IP raussuchen, die geeignet scheinen: Peers die keine eigene IPv6 Adresse haben, sollten auch nicht die IPv6 probieren.

Erik_S hat geschrieben:
Orbiter hat geschrieben:Immerhin habe ich es geschafft wieder einen Port im Router aufzumachen
Aha, ich dachte bei IPv6 wäre sowas nicht mehr notwendig weil doch damit wieder eine echte Ende-zu-Ende-Kommunikation zwischen Deinem PC und dem Server im Internet stattfindet. Oder beinhaltet Dein Router für IPv6 eine statefull Firewall? NAT oder sowas gibt es bei IPv6 eigentlich nicht mehr.

Das macht ja Hoffnung dass mit IPv6 wir weniger junior Peers haben die dann Senior werden aber meine neue Fritzbox hat per default eine Firewall auf IPv6 drauf wo ich wieder Ports freischalten darf oder ein 'exposed' Flag setzen darf was dann die Firewall weg macht.
Das neue UPnP scheint sich auch mit meiner Fritzbox zu vertragen, da kommen ganz anständige Logmeldungen raus. Ich muss auch mal probieren das UPnP zuzulassen, mal schauen was dann passiert.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Fr Sep 26, 2014 4:12 pm

Hallo,

Orbiter hat geschrieben:die sind aber merkwürdigerweise auch public
Dann nimm doch einfach irgendeine oder alle. Wenn es echte öffentliche global routbare Unicast-IP-Adressen sind dann sollte dein PC auch aus dem Internet mit diesen IP-Adressen ansprechbar sein. Ping die doch einfach mal aus dem Internet an oder schick mir ne PN ich mach gerne einen kurzen Scan o.ä.

Orbiter hat geschrieben:Wenn ich von Java aus nach den eigenen IP-Adressen frage, bekomme ich drei: die beiden Netzwerkadressen die per Bonding zu einer virtuellen gebündelt werden.
Wie kann man Netzwerkadressen bündeln? Egal. Drei IP-Adressen sind bei drei Netzwerk-Interfaces eigentlich zu wenige, es sei denn Du meinst nur die globalen und hast keine Privacy-Extensions aktiv. Für erste Tests ist das Abschalten der Privacy-Extensions sicher von Vorteil aber später muss YaCy auch damit zurechtkommen.

Orbiter hat geschrieben:Wir haben früher einfach Java die Eigenschaft isLocalIP testen lassen, da gab es dann aber merkwürdigerweise von Java aus DNS Abfragen die darüberhinaus auch noch nicht concurrencyfähig waren.
Ach ja richtig, die Klasse InetAddress hat so ihre Macken. Ich hab vor fast 10 Jahren mal eine Art virtuellen Switch für einen proprietären Hausautomatisierungsbus auf IP/Ethernet-Basis entwickelt, was auch sowas ähnliches wie ein Peer-to-Peer-Netzwerk ist, und dazu ein Management-Tool in Java programmiert das Teil dieses virtuellen Switch sein sollte und dabei auch massive Probleme mit dieser Klasse gehabt. Eine meiner Schwierigkeiten war das es keine Ableitung gibt die nur dazu dient einen Host-Namen aufzunehmen ohne gleich eine IP-Adresse daraus zu machen, als Lösung habe ich damals eine eigene Container-Klasse für IP-Adressen und Host-Namen gebaut. Es war auch eine Ableitung für IPv6 mit dabei aber ich denke die war nicht richtig funktionsfähig mangels Verfügbarkeit von IPv6 (das lieft damals noch unter Windows 2000). Wenn Du möchtest such ich den Code mal raus und mache die IPv6-Ableitung fit und schick Dir das zu. Ich bin mir ziemlich sicher das die Methoden isLoopback() und isGlobalUnicast() zuverlässig funktionierten.

Orbiter hat geschrieben:Wir haben dann mit regulären Ausdrücken vorher getestet ob eine IP ggf. eine Localhost-Adresse ist
Reguläre Ausdrücke kannst Du für IPv6 komplett vergessen, "::1" , "0:0:0:0:0:0:0:1" , "0000:0000:0000:0000:0000:0000:0000:0001" , "0000::0001" , "0000:0000::0000:0001" , "0000:0:0:0000::1" , "0000:0:0:0:0:0:0:0001" usw. sind alles gültige Schreibweisen für die selbe IP-Adresse. Spätestens im Eingabefeld für die "statische IP" erwarten die User IP-Adressen so eintragen zu können wie sie ihnen vorliegen und da wirst Du mit regulären Ausdrücken nicht sehr weit kommen. IP-Adressen als String zu verarbeiten ist keine gute Idee.

Orbiter hat geschrieben:nein eine Teilung mache ich nicht.
Das beruhigt mich.

Orbiter hat geschrieben:Ich erweitere gerade das Protokoll
Dokumentierst Du das irgendwo oder könntest Du hier im Thread ein paar kurze Zeilen dazu schreiben? Ich würde mein Analyse-Tool gerne so bald als möglich anpassen um den Start von IPv6 im YaCy-Netzwerk möglichst live miterleben zu können.

Orbiter hat geschrieben:und da wird es dann möglich sein mehrere IP-Adressen an einem Peer zu haben, z.B. eine IPv4 und eine IPv6 oder auch mehrere IPv6. Ich versuche hier mal kleine Schritte, den bisherigen Feldern weise ich erst mal nur IPv4 Adressen zu um keine Katastrophe auszulösen.
Wenn Du schon am Format der Seed-Liste arbeitest solltest Du das Feld "Address" meiner persönlichen Meinung nach komplett einstampfen, das ist redundant, dafür wäre ein Feld mit der SSL-Port-Nummer recht interessant. Das Feld "IP" auch weiterhin nur für eine einzelne IPv4-Adresse oder einen einzelnen Host-Namen zu benutzen halte ich auch für geschickt aber das bedeutet das dieses Feld für Peers die keine echte IPv4-Konectivität mehr haben (so wie Dein PC) leer bleiben wird. Ich hatte das vorhin zwar noch als Bug betrachtet aber vielleicht ist es von Vorteil das die heute laufenden Peers bereits mit sowas umgehen können.

Orbiter hat geschrieben:und die Adresse wo eine Antwort kommt geht dann wieder als Antwort von 'hello.html' zurück an den anpingenden Peer.
vielleicht sollte der angepingte Peer nach dem ersten erfolgreichen Back-Ping zum pingenden Peer kurz warten ob noch andere Back-Pings ebenfalls erfolgreich sind und dann alle erfolgreichen IP-Adressen zurückmelden.
Aber auch der pingende Peer muss genau wählen welche IP-Adressen er dem angepingten Peer als potentielle Back-Ping-Adressen übermittelt. Wenn die Privacy-Extensions eingeschaltet sind sollte immer nur die jeweils aktuellste IP-Adresse pro Interface propagiert werden damit die älteren IP-Adressen auch wirklich auslaufen können.

Orbiter hat geschrieben:Das macht ja Hoffnung dass mit IPv6 wir weniger junior Peers haben die dann Senior werden
Ja, das ist der große Vorteil von IPv6, es herrscht keine Adressknappheit mehr. Das jeder PC dann aber wieder aus dem Internet direkt ansprechbar ist hat aber auch Schattenseiten, ich wette die Viren- und Wurm-Programmierer freuen sich schon drauf wenn wieder jede Windows-Kiste direkt im öffentlichen Internet präsent ist.

Orbiter hat geschrieben:Das neue UPnP scheint sich auch mit meiner Fritzbox zu vertragen, da kommen ganz anständige Logmeldungen raus. Ich muss auch mal probieren das UPnP zuzulassen, mal schauen was dann passiert.
Ich wusste gar nicht das bei IPv6 UPnP noch zur Router-Konfiguration benutzt werden kann. Meines Wissens nach sollte bei IPv6 das Port-Controll-Protocol benutzt werden um z.B. Ports in Firewalls zu öffnen. Beim Design von PCP wurde jedenfalls IPv6 explizit mit berücksichtigt.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Sa Sep 27, 2014 11:55 am

nur ganz kleine Annahmen in den Verwaltungsklassen ("ein Peer kann mehrere IPs haben") habe ich nun mit @Deprecated an den alten Methoden markiert was eine ganze Welle von 'da muss man was ändern' ausgelöst hat. Ich bin nun größere Teile am umschreiben, oh je..

Dem entsprechend pinge ich nun mehrere IP-Optionen beim Backping an. Ich mache ein gleichzeitiges Backping mit einem Time-Out, wo mehrere reporten können. Es werden auch mehrere beim 'hello' übermittelt. Mehrere müssen optional zurück kommen dürfen. Die alten Parameter werden mit den IPv4 Varianten gefüllt. Im Ergebnis ist es aber dann so, dass alte Peers die neuen IPv6-Seniorpeers nicht mehr sehen können und auch nicht mit DHT-Werten beschicken können, es sei denn bei fehlendem IPv4 fülle ich die alten Werte doch mit IPv6. Mal sehen ob das klappt.

Die regulären Ausdrücke für IPv6 funktionieren schon, sie sind halt unvollständig. Sie sind ja auch nur eine Heuristik damit möglichst selten die InetAdress Klasse localhost/intranet-Checks machen muss.

Welches Feld 'Address' meist du, ich habe nichts gefunden. SSL muss ich mal sehen, in einem weiteren Schritt.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » So Sep 28, 2014 10:56 am

Hallo,

Orbiter hat geschrieben:Im Ergebnis ist es aber dann so, dass alte Peers die neuen IPv6-Seniorpeers nicht mehr sehen können und auch nicht mit DHT-Werten beschicken können
Das Peers die noch keine IPv6-Konektivität haben andere Peers die keine IPv4-Konektivität mehr haben nicht erreichen können ist eben so. Ich denke Du solltest, sobald YaCy mit IPv6 umgehen kann, die anderen Leute zum updaten ermuntern damit möglichst viele YaCy-Instanzen von einer eventuell doch vorhandenen IPv6-Konektivität profitieren und auch das YaCy-Netzwerk als ganzes profitiert weil so auch die IPv4-only-Peers zumindest die Verteilung von IPv6-Informationen unterstützen.

Orbiter hat geschrieben:es sei denn bei fehlendem IPv4 fülle ich die alten Werte doch mit IPv6. Mal sehen ob das klappt.
Also bei meinem Versuch kam keine einzige Verbindung mit IPv6 an und ich glaube nicht das wirklich gar kein anderer Peer IPv6 hatte. Sobald mein Analyse-Tool soweit ist das ich es interaktiv nach bestimmten Peers befragen kann werde ich das noch einmal probieren und schauen ob mein Peer dann zumindest auf die Abfragen meines Tools per IPv6 korrekt reagiert.

Orbiter hat geschrieben:Welches Feld 'Address' meist du, ich habe nichts gefunden.
In allen von mir ausgewerteten Seed-Listen ist für alle Peers eine Zeile in der Art
"Address":"1.2.3.4:8090"
vorhanden (natürlich mir korrekter IP-Adresse). Keine Ahnung wo die her kommt aber einen Sinn ergibt diese Zeile meiner Meinung nach nicht denn die Informationen sind eh schon vorhanden und spätestens bei mehreren IP-Adressen wird diese Zeile so nicht mehr funktionieren. Zumindest hat dort auch Dein Fix wegen den eckigen Klammern gewirkt.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Erik_S » So Sep 28, 2014 6:32 pm

Hallo,

Orbiter hat geschrieben:Du kannst ja dann mal in den Code schauen...
Das würde ich gerne aber ich sehe auf Gitorious keine aktuellen Commits zu diesem Thema.

Orbiter hat geschrieben:Peers die keine eigene IPv6 Adresse haben, sollten auch nicht die IPv6 probieren.
Beim feststellen ob eigene IPv6-Adressen vorhanden sind solltest Du eventuell nicht nur die rein privaten IPv6-Adressbereiche (0000::/7 und FF00::/6) ausfiltern sondern eventuell auch Toredo-Tunnel u.ä. da diese es nicht immer ermöglichen unter der IP-Adresse wirklich global ansprechbar zu sein.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Di Sep 30, 2014 2:01 pm

ich habe gerade ein gewaltiges commit rausgehauen um erste IPv6 Peer-Ping Möglichkeiten zu schaffen. Ich hab aber noch so einige Probleme mit vielen kleinen Details die ich noch fixen muss. Ein Problem ist die geringen Testmittel, der IPv6-Host den ich zum gegenpingen benutzt habe spinnt entweder oder das ganze funktioniert noch nicht. Ich habe damit jetzt schon drei Tage herumdebugt, ist also kein Schnellschuss sondern habe einige Nächte darüber geschlafen um das Konzept zu verbessen:
https://gitorious.org/yacy/rc1/commit/6 ... 211e0d6b2b

Das einize was ihr aber nun sehen könnt, ist ggf. eine IPv6 Adresse in /Status.html in der Randspalte, wenn ihr eine habt.
An der ganzen 'wie ist denn nun meine IP' und dem Backping habe ich schwer gedreht, das ist auch voller Debug-Meldungen um beim Testen sehen zu können was denn passiert. Die Meldungen kommen wieder raus wenn alles geht.

Die Änderungen haben einige Methoden als @Deprecated markiert mit dem Ergebnis dass nun über 100 Aufrufe als solche beim Compilieren angemahnt werden. Das muss nun im Laufe der Zeit gefixt werden. Die Aufrufe sind aber im Sinne der bisherigen Vorgehensweise nicht falsch sondern zeigen nur Bedarf für die Fertigstellung von IPv6 Kompatibilität an.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mi Okt 01, 2014 11:03 am

Hallo,

ich habe die aktuelle Entwickler-Version mal noch parallel auf meinen Server im Internet installiert und bin begeistert was da alles neues zu sehen ist, vor allen '/Network.html?page=1' gefällt mir ganz gut. Mich würde nur interessieren welche Bedeutung die unterschiedlichen Hintergrundfarben bei den verschiedenen IPv4- und IPv6-Logos haben. Eine kleine Legende o.ä. wäre eventuell nützlich.
Dieser YaCy-Peer erkennt problemlos seine IPv6-Adresse und ist konfiguriert sich alle 48 Stunden zu updaten. Wenn Du möchtest kannst du diesen Peer gerne als Test-Gegenstelle benutzen.

Es sind zu meiner positiven Überraschung doch einige Peers mit IPv6-Adressen in diesen Listen aufgetaucht, ich denke das ist ein gutes Zeichen das IPv6 bei den Leuten tatsächlich langsam aber sicher ankommt.
(es wird also höchste Zeit das YaCy mit IPv6 souverän umgehen kann, aber das soll kein drängeln sein)

Ich habe auch gleich mal meinen Analyse-Tool das neue Feld "IP6" der Seed-Listen beigebracht und habe leider auch gleich einen Kritikpunkt: die IPv6-Adressen haben alle einen Interface-Identifier, mit '%' abgetrennt, und das darf eigentlich nicht sein. Der Interface-Identifier ist nur innerhalb des jeweiligen Hosts gültig und sollte diesen niemals verlassen und hat eigentlich auch nur bei den Link-Local-Adressen "FE80::/10" eine Bedeutung.
(zur Domains-Klasse: der Adressbereich FE80::/10 hat nichts mit Local-Host zu tun sondern das ist ein privater Adressbereich äquivalent zu 169.254../16 bei IPv4 also was ähnliches wie 10.../8 oder 192.168../16, weil dieser Adressbereich in mehreren unabhängigen Netzen parallel benutzt werden darf und ein Host auch mehreren dieser Netze angehören darf ist der Interface-Identifier speziell für diesen Adressbereich eingeführt worden um zu wissen über welches Interface solche IP-Adressen erreichbar sind, da es in allen anderen IPv6-Adressbereichen keine Kollisionen geben darf ist der Netzwerk-Identifier nur für FE80::/10 erlaubt)
Ich bitte also darum diesen Interface-Identifier aus den Seed-Listen zu entfernen, eigentlich benötigt YaCy sowas nirgends es sei den YaCy wird nur innerhalb eines lokalen Netzwerks betrieben aber auch da ist der Adressbereich FE80::/10 eher ungeeignet, dann wird mein Tool sicher ganz bald in der Lage sein YaCy-Peers auch per IPv6 regulär anzusprechen.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Mi Okt 01, 2014 11:40 am

ok, also es wird ein wenig rumpelig am Anfang und da ist noch einiges zu machen:

- ich gebe zu dass ich nicht wusste was ich mit den Interface-Identifiern machen soll, also werfe ich sie jetzt mal weg. Oder soll ich alle IPv6 weglassen die einen Interface-Identifier haben?
- Die Farben im IPv4/IPv6 Icon spiegeln den Node Status wieder (ein Mouseover sollte das auch zeigen, das ist die Legende!). Ich habe das Node Status Icon deswegen ersetzt, weil der Node Status überdacht werden muss. Ein Node ist ein Peer dessen interne IP-Adressen den extern reporteten IP Adressen entsprechen und der innerhalb von 1 Sekunde ein Backping bekommt. Weil IPv6-interne und externe Adressen immer übereinstimmen ist dieser Test nun nicht mehr aussagekräftig. Die Farbe des Icons ist momentan deswegen nur von der Antwortzeit bestimmt, aber das ist auch noch nicht das Ende vom Lied. Hinter den Icons liegen nun die Klartext-IPs der jeweiligen IPv4/IPv6 Interfaces, daher ist auch der Link hinter dem Peernamen verschwunden.

Zur Zeit werden noch viel zu viele IPv6 Adressen angezeigt, u.a. alle die lokal gefunden werden. Das macht keinen Sinn wenn die alle bis auf einen nicht erreichbar sind. Wenns fertig ist soll auch nur der eine in der Seedliste auftauchen, oder eben mehr wenn mehr funktionieren.

Mein eigener, hinter dem Provider-NAT verschwundener Peer hat nun auch wieder Senior-Status und bekommt auch RWI transmissions, was ein gutes Zeichen ist. Die Methoden, die p2p-Kommunikation machen, selektieren aber bislang nur eine IP aus der nun neuen Liste von IPs, das muss auch noch geändert werden. Insbesondere die Suche macht das noch nicht. Da ist also noch einiges zu tun.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mi Okt 01, 2014 4:45 pm

Hallo,

also mein erster Zwischenstatus nachdem mein Tool nun auch das Feld "IP6" auswerten kann ist das bereits einige Peers eine oder mehrere IPv6-Adressen melden.
Mal von dem Interface-Identifier abgesehen sind mit diesem neuen Feld nur zwei neue Probleme aufgetaucht:
Zum einen gibt es Peers die im Feld "IP" einen Domain-Namen publizieren und trotzdem im Feld "IP6" eine oder mehrere IP-Adressen melden, das sollte nicht sein da bei Peers die Domain-Namen haben zum Zeitpunkt des Zugriffs immer das normale DNS-System befragt werden sollte um die zugehörigen IP-Adressen zu ermitteln.
Zum anderen ist eine neue nicht global routbare IP-Adresse aufgetaucht: 0:0:0:0:0:0:0:2 (mal mit und mal ohne Interface-Identifier) aber da kann ich mir gar nicht erklären wo die herkommt, diese IP-Adresse ist komplett ungültig (die ist weder Local-Host noch Link-Local noch irgendeine andere Art Unicast) so dass das Betriebssystem so eine IP nie melden dürfte.

Ich denke mit Deinem Versuch die ungültigen IP-Adressen einzeln auszufiltern wirst Du bei der enormen Anzahl an IPv6-Adressen wohl nie fertig werden, meiner Meinung nach solltest Du einen Test haben der bestätigt ob die IP-Adresse global routbar (oder eventuell lokal routbar falls YaCy nur in einem lokalen Netzwerk als private Suchmaschine läuft) ist und alles andere ist ungültig.

Der Interface-Identifier gibt an über welches Interface eine IP-Adresse erreichbar ist bzw. bei eigenen IP-Adressen welchem Interface diese zugeordnet ist. Das ist eigentlich nur bei den Link-Lokalen-Adressen FE80::/10 von Interesse da alle anderen IPv6-Netze grundsätzlich niemals mehrfach vorhanden sein dürfen. Solange YaCy nicht in einem lokalem Netzwerk (als rein private Suchmaschine) läuft und dort nur dieser Adressbereich vorhanden ist, was eigentlich so nicht in Ordnung ist (für rein lokale Netze gibt es FC00::/7), kann YaCy den Interface-Identifier immer ignorieren. Andere Peers können damit sowieso nichts anfangen da sie ja andere Interfaces haben. Gültige öffentliche IP-Adressen nur wegen dem Interface-Identifier wegzuwerfen ist meiner Meinung nach keine gute Idee, filtere den Interface-Identifier bei allen Adressen außer FE80::/10 weg und beim Verteilen als Seed-Liste muss der immer weg auch bei FE80::/10.

Für einen von 0 auf fast 100 Start war der IPv6-Startschuss in YaCy durchaus recht erfolgreich, dazu gratuliere ich Dir.
In den Peer-Listen sind auch schon eine ganze Menge Peers mit IPv6-Adresse vorhanden und auch mein Analyse-Tool findet bereits schon einige davon und kann die auch erfolgreich per IPv6 ansprechen.
Selbst die allten Versionen meines Tools, die noch immer laufen, haben bereits ein paar Peers per IPv6 kontaktiert falls diese im Feld "IP" eine IPv6 melden (falls die blaue Kiste Dir gehört dann trifft das auch auf Deinen Peer zu, seitdem die Portsperre wieder weg ist).
Sobald die aktuellen kleinen Problemchen gefixt sind sollte versucht werden so viele Peers wie möglich auf die aktuelle Version zu updaten, ich bin mir ziemlich sicher das somit das YaCy-Netzwerk um einige Senior-Peers größer wird.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Erik_S » Do Okt 02, 2014 8:40 am

Hallo,

ich habe die Vermutung das in dem Ping/Back-Ping-Mechanismus auf Seiten des angepingten Peers (der dann den Back-Ping durchführt) noch irgendwo ein Problem ist wenn der pingende Peer nur IPv6-Adressen meldet aber über eine IPv4-Verbindung kommt, eventuell liegt das aber auch an Peers mit alter Softwareversion, zumindest tauchen einige Peers die eigentlich nur eine IPv6-Verbindung haben in den Seed-Listen wieder als IPv4-only auf. So hab ich das u.a. an einem Peer "blaue Schachtel" mit IP-Adressen aus dem Bereich des deutschen ISP Unitymedia beobachtet, auch wenn die IPv4-Adressen in den Seed-Listen wohl nur die öffentlichen Adressen des Provider-NAT sind und über diese eigentlich kein Back-Ping funktionieren kann so kommen diese IPv4-Adressen leider doch in die Seed-Liste anderer Peers und diese anderen Peers melden den ursprünglich pingenden Peer trotzdem als Senior mit IPv4-only Anbindung.

Ich vermute das für wirklich zufriedenstellendes Arbeiten per IPv6 eine gewisse kritische Masse an Peers mit aktueller Software-Version erforderlich ist.

Darüber hinaus denke ich das ich in meinem Tool pro IP-Adresse einen eigenen LastSeen-Timestamp benötige damit ich empfangene IP-Adressen in sinnvoller Weiße in meiner Datenbank halten kann, bisher verdrängen neue Seed-Listen-Einträge (mit neuerem LastSeen-Zeitpunkt) die alten Einträge aus meiner Datenbank vollständig (es werden alle IP-Adressen ersetzt was eben dazu führt das fehlerhafte neue Seeds korrekte alte Seeds verdrängen können) weil ich natürlich nicht will das sich alte IP-Adressen ewig ansammeln oder ich müsste beim Abfragen eines Peers immer grundsätzlich alle IP-Adressen durchgehen und nicht erreichbare IPs individuell löschen. Ein wirklich gutes Management der Seed-Listen ist auf jeden Fall keine einfache Sache, ich kann Deine Probleme voll und ganz nachvollziehen.

Grüße
Erik

PS.: falls die blaue Schachtel als IPv6-only gemeldet wird tauchen auch sporadisch "Access Denied" Fehler auf, scheinbar macht die Firewall im Heimrouter doch noch ein paar Probleme.
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Do Okt 02, 2014 1:08 pm

Die 0:0:0:0:0:0:0:2 ist mir auch aufgefallen und kann mir nicht erklären wie die dahin kommen konnte. Ich muss wohl noch mehr Heuristiken in der Vorfilterung einbauen.

Das Rausfiltern von falschen Addressen sollte nicht so kritisch sein weil es ja eine verteilte Aufgabe ist. Das Problem ist nur, dass es noch nicht passiert, das ist halt eine Baustelle und noch nicht dran gewesen 8-) Ich denke das sollte das nächste sein.

Ich vermute aber mal dass das Netz nicht instabil wird weil die alten IPv4 Peers genau das filtern eben noch gut können: was sie nicht erreichen können kicken sie raus. Da sind eben auch die neuen IPv6 Peers dabei. Die werden zur Zeit hin und wieder das Glück haben einen anderen IPv6-fähigen zu treffen und dann geben sie sich gegenseitig Senior-Status. Dann treffen sie aber immer wieder auch auf einen IPv4 der sie rauskickt. Das Rauskicken ist aber keine Propagierung: die Peers geben nicht bekannt dass da einer ist der nicht erreicht werden kann, sie geben halt statt dessen einfach nicht mehr deren Seed weiter.

Jetzt ein bisschen Geduld, an diesem WE kann ich nicht..
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Do Okt 02, 2014 6:03 pm

Hallo,

das mit der ::2 ist meiner Meinung nach nicht so arg kritisch, deswegen werden von meinem Tool nur ein paar Peers weggefiltert, der Interface-Identifier ist da häufiger ein Problem.
Wenn ich mir was wünschen dürfte dann das die Probleme mit der LastSeen-Zeit gelöst würden, das ist mit Abstand die häufigste Fehlermeldung von meinem Tool. Die verursacht auch die meisten Probleme beim updaten meiner Peer-Datenbank weil dann alte Einträge mit fehlerhafter LastSeen-Zeit als neuer wirken und umgekehrt.

Eine Instabilität des YaCy-Netzes kann ich jedenfalls nicht sehen, ich denke das einfach genügend Peers eine aktuelle Software-Version benötigen damit IPv6 wirklich wirksam wird und die IPv6-only-Peers auch einen vollen Senior-Beitrag leisten können.

Nachdem ich mein Tool nun so umgebaut habe das es immer alle IP-Adressen eines Peers (nacheinander) abfragt, ist mir aufgefallen das an der blauen Schachtel eine IPv6-Adrsse immer mit "Permision denied" abgelehnt wird wogegen die andere IPv6-Adresse gut funktioniert. Die abgelehnte IP-Adresse sieht so aus als würde sie den Privacy-Extensions entstammen und endet auf ::2BC0, die andere IP-Adresse hat eine MAC-Adresse (des Herstellers Pegatron Corporation) als Host-Teil (untere 64Bit) und endet auf ::7A82. Allem Anschein nach hat der Heim-Router ein Problem damit alle IP-Adressen eines Hosts einer Firewall-Regel für diesen Host zuzuordnen, falls das ein generelles Problem solcher Heim-Router ist könnte das für YaCy zusätzliche Schwierigkeiten bedeuten.

Gerade zu den IP-Adressen die den Privacy-Extensions entstammen muss noch einiges überlegt werden, es könnte sein das ein Host regelmäßig eine neue IP-Adresse auswürfelt während die alten IP-Adressen solange gültig bleiben wie sie benutzt werden und wenn im großen YaCy-Netzwerk die alten IP-Adressen nicht aus den Seed-Listen verschwinden und die immer weiter benutzt werden könnte es sein das ein Host nach längerer Laufzeit sehr viele IP-Adressen hat (und die YaCy-Seed-Listen entsprechend groß werden). Ich denke hier ist eine Art vorsätzlicher Obsoleszenz erforderlich wo bei genügend neuen IP-Adressen die alten langsam aber sicher gelöscht werden, selbst wenn sie noch funktionieren würden, damit der betreffende Host die auch irgendwann endgültig abschalten kann. Auch hierfür wäre es praktisch wenn die LastSeen-Zeitstempel immer verlässlich wären. Ich werde auf jeden Fall mal nachdenken wie dieses Problem zu lösen ist.

Grüße
Erik

edit:
Der Fehler "Permision denied" beim Zugriff per IPv6 ist mir noch bei mehreren anderen Peers aufgefallen während IPv4 problemlos klappt, offensichtlich sind wohl auch andere Heim-Router so eingestellt das per IPv6 ankommende TCP-Verbindungen grundsätzlich geblockt werden (die alten Port-Weiterleitungsregeln gelten ja nur für IPv4). UPnP u.ä. werden vermutlich doch nicht ganz so obsolet wie ich dachte.
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Erik_S » So Okt 26, 2014 11:07 am

Hallo,

Erik_S hat geschrieben:der Interface-Identifier ist da häufiger ein Problem
Seit dem IPv6-Adressen von einigen Peers auch innerhalb des Feldes "IP" gemeldet werden ist dieser Aspekt noch wichtiger geworden. Die anderen Peers scheinen Peers mit so einer IP-Adresse im Feld "IP" nicht so gut zu verstehen. Ich möchte daher noch einmal anregen das der Interface-Identifier von allen IP-Adressen entfernt wird. Er ist nicht nur einfach unnötig sondern stellt auch eine Art Security-Leak dar.

Ansonsten möchte ich erwähnen das ein gewisser Anstieg der IPv6-fähigen Peers zu verzeichnen ist, es wäre also im Interesse des YaCy-Netzwerks ansich wenn die noch vorhandenen Probleme mit IPv6 gelöst würden.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Mo Okt 27, 2014 1:13 am

ich nehme an du meinst wir sollten die IPv6 Adressen mit dem "ff:fe" Anteil im Interface-Identifier entfernen, nicht die Interface-Identifier? Wenn es sich herausstellt dass die übrig bleibenden IPv6-Adressen erreichbar sind ist das sicherlich eine gute Vorgehensweise.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mo Okt 27, 2014 10:16 am

Hallo,

nein, ich meine es soll der Interface-Identifier der mit einem '%' abgetrennt ist aus allen IP-Adressen entfernt werden. Dieser Interface-Identifier verrät eventuell interne Details der Computer-Konfiguration (manchmal steht dort keine Zahl sondern z.B. "eth0" und sowas geht niemanden was an) und erfüllt außerhalb des betreffenden Computers keinen Nutzwert (vom ausspionieren mal abgesehen).

IPv6-Adressen die sich auf die MAC-Adresse einer Ethernet-Karte beziehen sind natürlich wenn möglich mit niedrigerer Priorität zu veröffentlichen aber das geht nur wenn andere IPv6-Adressen, also solche die per Privacy-Extensions generiert werden, zur Verfügung stehen und auch tatsächlich von Außen zu erreichen sind. Mit der Erreichbarkeit sieht es leider nicht so arg gut aus. Ich beobachte die wenigen per IPv6 erreichbaren Peers per "/tool_query" von meinem Tool und teste dabei alle IP-Adressen (sind ja alle als funktionsfähiger Link aufgelistet) und falls mehrere IPv6-Adressen angegeben sind funktioniert meistens nur die mit "FF:FE" in der Mitte des Host-Teils. Die anderen IPv6-Adressen werden meistens mit "Permision denied" abgeblockt (ich vermute mal das macht der betreffende Heim-Router). Dieses Problem existiert bei dem von Dir betriebenen YaCy-Peer ebenfalls. Ich weiß leider nicht ob sich dieses Problem per UPnP o.ä. lösen lässt aber es wäre schön wenn ja, damit die YaCy-Peer-Betreiber nicht so arg leicht verfolgbar sind.

Ein weiterer wichtiger Aspekt zu den per Privacy-Extension generierten IPv6-Adressen ist das diese, wenn neue Verfügbar sind, aus den Seed-Listen langsam entfernt werden sollten. Es wäre also gut wenn alle IP-Adressen nach Alter sortiert werden und nur die neuesten in der Seed-Liste drin bleiben. Der betreffende Peer weiß doch schließlich wann er eine IP-Adresse das erste mal vom Betriebssystem gemeldet bekommen hat und dieser Zeitpunkt sollte der IP-Adresse fest zugeordnet und auch per Seedlisten verteilt werden und dann als Sortier-Kriterium dienen. Mit dieser Methode wäre sichergestellt das abgelaufene IPv6-Adressen auch langsam aus den Seed-Listen verschwinden und damit irgendwann nicht mehr benutzt werden so das der Betreffende Host diese dann auch endgültig abschalten kann. Ich hab zwar keine Ahnung wie oft die einzelnen Betriebssysteme neue IPv6-Adressen per Privacy-Extension generieren aber es wäre doof wenn sich nach langer Laufzeit des Computers sehr viele davon ansammeln.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Mo Okt 27, 2014 10:27 am

also das was "mit einem '%' abgetrennt ist", ist die Zone ID und die habe ich bereits entfernt. Wo tritt die denn bei dir auf?
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mo Okt 27, 2014 11:03 am

Hallo,

an fast allen IPv6-Adressen bis hin zur Software-Version 1.81009114. Vor allem im Feld "IP" aber auch im Feld "Address" und manchmal im Feld "IP6" ist das mit drin. Ich denke Du solltest das gleich ausfiltern wenn Du die IP-Adressen vom Betriebssystem entgegen nimmst.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Di Okt 28, 2014 4:00 pm

Die Zone ID ist wohl noch durchgerutscht bisher, aber nur in dieser Seedliste so aufgelistet. Innnerhalb der technischen Schnittstellen wurden die Zone IDs bereits entfernt. Hab eben einen Patch hochgeladen der auch die andern Zone IDs nicht mehr im Feld IP6 erzeugen sollte, brauch natürlich Zeit bis die jetzt alle verschwinden.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Mi Okt 29, 2014 2:52 pm

Hallo,

Orbiter hat geschrieben:nicht mehr im Feld IP6 erzeugen sollte, brauch natürlich Zeit bis die jetzt alle verschwinden
Ja, es werden sichtbar weniger IPv6-Adressen mit angehängter Zone-ID. Mein Tool hat sich aber in den letzten Tagen primär daran gestört das die Zone-ID auch ins Feld "IP" kam, das hat Verwirrung beim Unterscheiden zwischen Domain-Namen und IP-Adresse gestiftet. Aber nun scheint es sich wieder zu normalisieren.

Erfreulich ist auf jeden Fall das eindeutig nicht global routbare IP-Adressen weniger werden, die IP "::2" ist komplett verschwunden und es kommen nur noch vereinzelt 10.../8 und 192.168../16 und 127.0.0.1 vor.
Was im Feld "IP" aber immer noch fehlerhaft ist sind Domain-Namen mit angehängtem Port und einem ':' dazwischen. Ich vermute mal das die jeweiligen Anwender das so ins Konfigurations-Feld "statische IP" händisch eingetragen haben.

Interessant ist das nun auch IPv6-Adressen aus dem Bereich 2002::/16 (also per 6to4-Tunnel) auftauchen und generell IPv6-Adressen von normalen Endkunden-Providern zunehmen.
Ich denke YaCy ist auf einem guten Weg, wenn auch noch ein erheblicher Teil dieses Weges übrig ist.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Orbiter » Mi Nov 19, 2014 8:00 pm

ich vermute es wird noch lage dauern bis alle warnings beim Compilieren wegen IPv6 gefixt sind weil es immer Konzepte braucht um mehrere IPs zu verarbeiten. Aber momentan schein ein Punkt erreicht zu sein wo es zwar 'noch nicht fertig' aber 'viel besser als gar nichts zu IPv6' ist und ein Kriterium für ein Release in diesem Zustand Sinn machen würde, wenn dadurch nichts kaputt gehen kann. Ich glaube man könnte das machen.. Einwände/Anmerkungen?
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IPv6

Beitragvon Erik_S » Fr Nov 21, 2014 4:39 pm

Hallo,

Orbiter hat geschrieben:weil es immer Konzepte braucht um mehrere IPs zu verarbeiten
Ja, genau das ist richtig, aber gerade Konzeptionell ist meiner Meinung nach noch einiges zu tun.

Ein aus meiner Sicht sehr offensichtliches Problem ist das die Peers oft denken das sie über ganz andere IP-Adressen erreichbar sind als es tatsächlich der Fall ist. Trage mal hier die IP-Adresse Deiner BlauSchachtel ein (also die eine IPv6-Adresse mit dem ":??FF:FE??:" die tatsächlich funktioniert) und betätige den Button darunter, ruhig mehrmals über einen längeren Zeitraum verteilt, und Du wirst sehen das Dein Peer eine wechselhafte Meinung über seine eigene Erreichbarkeit hat. Ich nehme an das kommt dadurch das Dein Peer zu verschiedenen anderen Peers einen Ping ausführt und das Back-Ping der anderen Peers nicht immer so funktioniert wie es sollte. Ich vermute einige IPv4-only-Peers liefern als Antwort auf das Ping Deines Peers Deine scheinbare IPv4-Absender-Adresse zurück und Dein Peer übernimmt das ungeprüft. Falls es möglich ist zu erkennen von welchem anderen Peer ein Back-Ping kommt sollte der pingende Peer das immer dem laufenden Ping-Vorgang zuordnen und dann am Ende des Ping-Vorgangs nur gemeldete IP-Adressen akzeptieren deren Version auch mit den tatsächlichen empfangenen Back-Pings korreliert (z.B. nur IPv6-Adressen wenn zugehörige Back-Pings nur per IPv6 kamen). Und wenn für einen Ping gar keine Back-Pings registriert werden dann sollte der pingende Peer gar keine der zurückgemeldeten IP-Adressen übernehmen.

Hast Du den eine Möglichkeit die Pings und Back-Pings detailliert zu debuggen? Falls nein würde ich Dir vorschlagen das ich in mein Tool yacyDNS eine passende Funktionalität einbaue, also ein Web-Interface mit dem man einen beliebigen YaCy-Peer gezielt anpingen kann und alle Infos über die registrierten Back-Pings zusammen mit der eigentlichen Ping-Antwort detailliert ausgegeben werden. Mit den so gewonnenen Informationen sollte es möglich sein den Quell-Code robuster zu gestalten.

Orbiter hat geschrieben:Aber momentan schein ein Punkt erreicht zu sein wo es zwar 'noch nicht fertig' aber 'viel besser als gar nichts zu IPv6' ist und ein Kriterium für ein Release in diesem Zustand Sinn machen würde, wenn dadurch nichts kaputt gehen kann.
Das "viel besser als gar nichts zu IPv6" bekommt meine uneingeschränkte Zustimmung, in den letzten 2 Monaten ist es in diesem Punkt deutlich vorwärts gegangen. Ich hätte zwar noch einige Wünsche, vor allem wäre es schön wenn das Eingabe-Feld "statische IP" einen gründlichen Plausibilitätstest bekommen würde und nicht mehr "alles" akzeptiert, aber grundsätzlich bin ich ebenfalls der Meinung das man sich baldmöglichst bemühen sollte die IPv6-Unterstützung einer breiteren Masse an YaCy-Peer-Betreibern zugänglich zu machen.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Erik_S » Mi Dez 10, 2014 6:26 pm

Hallo,

nur mal als Info zur aktuellen Lage:
Nicht-routbare IP-Adressen scheinen ein Comeback feiern zu wollen, es sind u.a. 0.0.0.42 (von einem YaCy-Peer mit Version 1.81009160) und 0:0:0:0:0:0:0A2A:???? + 0:0:0:0:0:0:7F00:0001 (von einem YaCy-Peer mit Version 1.81009256) aufgetaucht. Mich würde wirklich mal interessieren was für ein Betriebssystem solche IP-Adressen meldet. Die 0.0.0.42 ist bei dem betreffenden Peer die einzigste IP-Adresse in der Seed-Liste (gesehen bei etlichen anderen Peers da der betreffende Peer selber so natürlich nicht ansprechbar ist, trotz Senior-Status) im Feld "IP" und im Feld "Address", das Feld "IP6" ist leer. Die anderen beiden IP-Adressen sind offensichtlich in IPv6 verkappte IPv4-Addressen (10.42.??.?? und 127.0.0.1) welche ebenfalls offensichtlich nicht routbar sind aber normalerweise werden IPv4-Adressen per ::FFFF:0:0/96 Prefix in IPv6 verpackt aber das scheint beim betreffenden Betriebssystem wohl nicht zu funktionieren (zumindest der Java-VM kann man für diesen Murks keine Schuld zuweisen). Dieser Peer meldet noch weitere IPv6-Adressen (alle im Feld "IP6") und ist über diese auch tatsächlich erreichbar (der Senior-Status ist also berechtigt). Manchmal meldet dieser Peer auch nur eine einzelne IPv4-Adresse welche aber offensichtlich zu Carrier-Grade-NAT gehört (der IPv4-Adress-Range gehört einem Provider aus New York und ist wirklich recht klein) und somit nicht funktioniert aber über wechselhafte Ansichten der YaCy-Peers über ihre eigene Erreichbarkeit hatten wir ja schon mal ergebnislos nicht diskutiert.

Ich bin was die YaCy-Versionen angeht nicht ganz auf dem laufenden aber beide Peers scheinen mir doch sehr aktuell zu sein. Alle IP-Adressen die in den ersten 8 Bit mit 00 anfangen sind niemals global routbar, das gilt sowohl für IPv4 (0.?.?.?/8) als auch für IPv6 (00??::/8).

Der zweite Peer macht auf jeden Fall Hoffnung das zukünftig auch Peers die nur noch eine kastrierte IPv4-Konektivität haben trotzdem Senior-Status erlangen können und somit einen wertvollen Beitrag zum YaCy-Netzwerk als ganzes leisten können.
Ich würde es sehr begrüßen wenn die verbliebenen Probleme mit IPv6 und generell wechselnder Erreichbarkeit demnächst gelöst würden und das ganze als Stable-Release verfügbar wäre.

Es gibt derzeit doch schon einige YaCy-Peers die per IPv6 und IPv4 erreichbar sind und auch stabil im 24/7-Betrieb laufen, ich bin recht zuversichtlich das diese Anzahl mit der nächsten Stable-Release weiter steigen kann.

Grüße
Erik
Erik_S
 
Beiträge: 185
Registriert: Sa Aug 30, 2014 11:13 am

Re: IPv6

Beitragvon Micki » Sa Apr 04, 2015 8:25 am

Gibt es denn schon eine Möglichkeit Yacy auf IP V4 zu "zwingen"? Sprich zu sagen bitte die 4er IP verwenden?
Micki
 
Beiträge: 86
Registriert: Sa Feb 21, 2015 10:38 pm

Re: IPv6

Beitragvon LA_FORGE » So Apr 05, 2015 5:28 pm

-djava.net.preferipv4stack=true in der StartYaCy.bat
LA_FORGE
 
Beiträge: 559
Registriert: Sa Okt 11, 2008 5:24 pm


Zurück zu YaCy Coding & Architecture

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron