Beiträge von SpaceRat


    SSH ist zunächst einmal das erste was laufen muss. Ich komme von aussen aber nicht an dropbear heran.


    Kommst Du denn innerhalb des LAN via Dropbear per IPv6 auf die Box?



    Kannst du mir, anhand der dm800se/OE2.0 genau sagen was zu tun ist um dropber IPv6 ansprechbar zu machen.


    Dazu müßte ich sie (also die DM800SE) genauer kennen.
    Außerdem müßte ich auch wissen, was überhaupt das Problem ist (IPv6 auf der Box, die Box-Config oder die Freigabe der Box nach draußen).
    Dropbear sollte normalerweise automagisch auch IPv6 unterstützen, wenn IPv6 im Kernel aktiv ist.


    Wenn man kernel-module-ipv6 installiert, unterstützt der Kernel IPv6.
    Was ist aber beispielsweise mit telnet und sshd Clients?
    Sollten die dann nicht auch automatisch IPv6 unterstützen?


    Hängt vom Startmodus ab.


    Dienste. die über inetd gestartet werden, müßte man auch dort, also in /etc/inetd.conf, umkonfigurieren:


    Vorher:

    Code
    8001			stream	tcp nowait root /usr/bin/streamproxy	streamproxy
    ftp				stream	tcp nowait	root /usr/sbin/vsftpd		vsftpd
    telnet			stream	tcp nowait	root /usr/sbin/telnetd		telnetd
    microsoft-ds	stream	tcp nowait root /usr/sbin/smbd			smbd
    netbios-dgm		dgram	udp  wait   root /usr/sbin/nmbd			nmbd


    Nachher:

    Code
    8001			stream	tcp6 nowait root /usr/bin/streamproxy	streamproxy
    ftp				stream	tcp6 nowait	root /usr/sbin/vsftpd		vsftpd
    telnet			stream	tcp6 nowait	root /usr/sbin/telnetd		telnetd
    microsoft-ds	stream	tcp6 nowait root /usr/sbin/smbd			smbd
    netbios-dgm		dgram	udp  wait   root /usr/sbin/nmbd			nmbd


    Für netbios-dgm macht IPv6 keinen Sinn, dafür ist es nicht definiert.


    Werden Dienste als daemons gestartet, dann sollten sie eigentlich automatisch auch IPv6 nutzen, z.B. dropbear.
    Wenn nicht, müssen sie ggf. in ihrer jeweiligen eigenen Konfigurationsdatei umkonfiguriert werden.


    Am Beispiel vsftpd (/etc/vsftpd.conf):


    Alt:

    Code
    # run standalone
    listen=YES
    listen_ipv6=NO
    # ^oder nicht vorhanden


    Neu:

    Code
    # run standalone
    listen=NO
    listen_ipv6=YES


    Dabei ist jeweils darauf zu achten, ob das Programm Dual Stack Sockets verwendet, dann muß/darf auch nur IPv6 eingeschaltet werden (Auf eingehende IPv4-Verbindungen lauscht es dann mit demselben Socket).
    Das ist z.B. bei vsftpd der Fall, daher wird auch bei listen_ipv6=YES gleichzeitig listen=NO gesetzt.


    Bei Programmen, die getrennte Sockets für IPv6 und IPv4 nutzen, müßte hingegen dementsprechend für den Dual-Stack-Betrieb auch explizit beides aktiviert werden.

    Du darfst gerne nach irgendwelchen Features fragen. Aber das recht irgendwas zu fordern hast Du hier nicht.


    Meinst Du mich?
    Ich habe gar nichts gefordert, ich habe nur einige offene Fragen geklärt und einige Falschinformationen beseitigt.


    Aber Du darfst auch gerne selber IPV6 Support einbauen, wenn Du ihn benötigst.


    Been there, done that, got the T-Shirt.


    Es ist mein OpenVPN-Bitbake-Rezept in OpenPLi 4.0, es war meine Anregung den --disable-ipv6-Schalter in Python für HDMU in --enable-ipv6 zu ändern (Nachdem ich einen entsprechenden Python schon länger auf allen Boxen laufen hatte), der OpenVPN 2.3.3 für sh4 im HDMU-Image entstand auf meinem Rechner, der IPv6-Support in OpenWebif stammt zu mehr als 50% von mir und der Backport desselben auf das Dream Webif stammt auch von mir.


    Was jetzt irgendjemand anderes damit anstellt, also ob er es zum Wohl der Nutzer einsetzt oder nicht, ist mir an sich völlig latte, ich habe meinen IPv6-Support.

    Ah ja:


    Zitat

    root@ultimo:~# openvpn --version
    OpenVPN 2.3.2 mipsel-oe-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Apr 13 2014


    Zitat

    Topf:~# openvpn --version
    OpenVPN 2.3.3 sh4-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Apr 9 2014


    Weitgehend vollständiger IPv6-Support unter Enigma2 ist längst keine Frage der Möglichkeit der beteiligten Programme und Dienste mehr, sondern nur noch eine des Wollens bzw. Nichtwollens//Leistungsverweigerung.

    Doch das stimmt und auf der VU kann nichtmal das Python standardmässig IPv6 :face_with_tongue:


    Nun, das ist eine reine Compile-Switch-Einstellungssache und keine Frage der Version, an sich kann Python schon ewig IPv6.
    Wenn man natürlich --disable-ipv6 drin läßt, dann wird Python nicht einmal in Version 3.4.0 IPv6 können.


    Twisted 12.0.0 kann das nur partiell, ab 12.1.0 etwas besser aber immer noch nicht vollständig. Selbst in 12.2.0 noch nicht.


    Twisted ist alles andere als fehlerfrei und bestimmte Aspekte fluppen selbst in 13.2.0 noch nicht.
    Tatsache ist aber, daß für unseren banalen Listener der IPv6-Support der 12.0.0 ausreicht.



    Tjor.
    Schlechtes Image ...


    Bei guten Images kommt

    Zitat

    Topf:~# python -c 'import twisted,socket; print socket.has_ipv6; print twisted.version'
    True
    [twisted, version 13.0.0]


    oder zumindest

    Zitat

    root@ultimo:~# python -c 'import twisted,socket; print socket.has_ipv6; print twisted.version'
    True
    [twisted, version 12.0.0]


    bzw.

    Zitat

    root@vuduo2:~# python -c 'import twisted,socket; print socket.has_ipv6; print twisted.version'
    True
    [twisted, version 12.0.0]


    Und so sieht netstat bei einem Premium-Image (HDMU auf dem Topfield) aus:


    Nur der Samba murkst da noch mit IPv4 rum, aber nirgendwo ist IPv6 unwichtiger als bei Samba.

    Und 12.0.0 ist falsch weil twisted erst ab 12.1.0 IPv6 Support hat.

    Das stimmt nicht:

    Code
    root@vuduo2:~# pythonPython 2.7.3 (default, Sep  7 2013, 12:14:16)[GCC 4.8.1] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import twisted>>> twisted.version
    Version('twisted', 12, 0, 0)>>>

    if has_ipv6 and fileExists('/proc/net/if_inet6') and version.major >= 12:
    ...
    Die if_inet6 existiert auf jedenfall auf der Dreambox. Der einzige Grund warum die DB den Check nicht besteht scheint wohl die Funktion version.major zu sein. Weiß zufaällig jemand was diese Funktion bewirkt ?

    Das sind drei Checks:
    1. /proc/net/if_inet6 testet den Kernel auf IPv6-Support
    2. has_ipv6 (aus socket) testet, ob Python mit IPv6-Support gebaut wurde.
    3. version.major (Aus twisted) testet auf eine Version größer/gleich 12.0.0


    Alle drei Bedingungen müssen erfüllt sein, damit das Web-Interface IPv6 unterstützen kann.

    Hi ich bins nochmal :smiling_face: .
    Mir ist aufgefallen das Python auf der Dream ohne IPv6 gebaut wurde. Könnte dies vll beim nächsten Experimental mitgebaut werden ? Es ist immerhin nur ein Patch von einigen wenigen Zeilen was ja wirklich nicht zuviel verlangt ist da es ja wohl kaum ein Aufwand ist. Hier ist der Link zum Patch : Klick

    Das ist eigentlich nicht der ganze Patch ...
    ./configure hat immer die Macke, daß es beim Cross-Compilen viele Checks nicht durchführen kann, u.a. auch den, ob die Zielplattform "buggy_getaddrinfo" hat.


    Der eigentliche Patch ist dieser hier: http://lists.busybox.net/piper…ot/2012-April/052896.html
    Ohne diesen Patch führt --enable-ipv6 zu einem Fehler beim Cross-Kompilieren, er war aber im max-tdt sogar schon drin, so daß dort wirklich nur noch --enable-ipv6 nötig war.



    Nichtsdestotrotz ist es ein Klacks, Python mit IPv6-Support zu kompilieren und es kann auch zu keinen Wechselwirkungen kommen, weil man für IPv6 auch immer mit AF_INET6, [::], etc. pp. programmieren muß, d.h. ein Plugin, welches nicht für IPv6 umgeschrieben wird, nutzt es somit auch nicht und kann deshalb auch nicht daran kaputtgehen.


    Das hier ist übrigens der Patch für das old Webif, um es IPv6-tauglich zu machen, ursprünglich extra für HDMU vom OpenWebif backported :smiling_face: :


    Python
    diff -Nur Extensions.old/WebInterface/plugin.py Extensions/WebInterface/plugin.py--- Extensions.old/WebInterface/plugin.py	2013-10-13 13:42:43.000000000 +0200+++ Extensions/WebInterface/plugin.py	2014-04-16 19:13:21.995689400 +0200@@ -10,14 +10,14 @@ from WebChilds.Toplevel import getToplevel from Tools.HardwareInfo import HardwareInfo -from Tools.Directories import copyfile, resolveFilename, SCOPE_PLUGINS, SCOPE_CONFIG+from Tools.Directories import copyfile, resolveFilename, SCOPE_PLUGINS, SCOPE_CONFIG, fileExists  from twisted.internet import reactor, ssl from twisted.internet.error import CannotListenError-from twisted.web import server, http, util, static, resource+from twisted.web import server, http, util, static, resource, version  from zope.interface import Interface, implements-from socket import gethostname as socket_gethostname+from socket import gethostname as socket_gethostname, has_ipv6 from OpenSSL import SSL, crypto from time import gmtime from os.path import isfile as os_isfile, exists as os_exists@@ -239,6 +239,12 @@ 		root = HTTPRootResource(toplevel) 		site = server.Site(root) +	if has_ipv6 and fileExists('/proc/net/if_inet6') and version.major >= 12:+		if ipaddress == '0.0.0.0':+			ipaddress='::'+		elif ipaddress == '127.0.0.1':+			ipaddress='::1'+ 	if usessl: 		ctx = ChainedOpenSSLContextFactory(KEY_FILE, CERT_FILE) 		try:@@ -386,7 +392,7 @@ 		host = request.getHost().host 		#If streamauth is disabled allow all acces from localhost 		if not config.plugins.Webinterface.streamauth.value:-			if( host == "127.0.0.1" or host == "localhost" ):+			if( host == "::ffff:127.0.0.1" or host == "127.0.0.1" or host == "localhost" ): 				print "[WebInterface.plugin.isAuthenticated] Streaming auth is disabled bypassing authcheck because host is '%s'" %host 				return True diff -Nur Extensions.old/WebInterface/WebComponents/Sources/RequestData.py Extensions/WebInterface/WebComponents/Sources/RequestData.py--- Extensions.old/WebInterface/WebComponents/Sources/RequestData.py	2013-10-13 13:42:43.000000000 +0200+++ Extensions/WebInterface/WebComponents/Sources/RequestData.py	2014-04-16 19:12:01.453082600 +0200@@ -24,7 +24,12 @@  	def getHTML(self, id): 		if self.what is self.HOST:-			return self.request.getRequestHostname()+			host = self.request.getHeader(b'host')+			if host:+				if host[0]=='[':+					return host.split(']',1)[0] + "]"+				return host.split(':', 1)[0].encode('ascii')+			return self.request.getHost().host.encode('ascii') 		elif self.what is self.PORT: 			return str(self.request.host.port) 		elif self.what is self.METHOD: