MQTT Websocket Verbindung über IPv6
Hallo, ich bekomme es nicht hin eine MQTT Websocket Verbindung über IPv6 herzustellen.
Zunächst dachte ich es läge an meinem Mosquitto bzw. an der libwebsockets.
Nun habe ich einen anderen Broker probiert, wo es auch nicht klappt.
Also habe ich es andersrum versucht, mich auf öffentliche Broker zu verbinden, und siehe da es klappt auch nicht.
Server: demo.flashmq.org
wss://[2a01:1b0:7996:418:83:137:146:230]:4443 -> keine Verbindung
wss://83.137.146.230:4443 -> kein Problem
mqtt://[2a01:1b0:7996:418:83:137:146:230]:1883 -> kein Problem
Mit dem Mosquitto Test Server ebenfalls.
Habe verschiedene Clienten ausprobiert, MQTT-Explorer und Node-Red.
Nun bin ich mit meinem Latein am Ende.
Könnte mir Jemand bestätigen, dass er zu wss://[2a01:1b0:7996:418:83:137:146:230]:4443 eine Verbindung aufbauen kann?
oder ws://[2a01:1b0:7996:418:83:137:146:230]:8080
MfG
Zunächst dachte ich es läge an meinem Mosquitto bzw. an der libwebsockets.
Nun habe ich einen anderen Broker probiert, wo es auch nicht klappt.
Also habe ich es andersrum versucht, mich auf öffentliche Broker zu verbinden, und siehe da es klappt auch nicht.
Server: demo.flashmq.org
wss://[2a01:1b0:7996:418:83:137:146:230]:4443 -> keine Verbindung
wss://83.137.146.230:4443 -> kein Problem
mqtt://[2a01:1b0:7996:418:83:137:146:230]:1883 -> kein Problem
Mit dem Mosquitto Test Server ebenfalls.
Habe verschiedene Clienten ausprobiert, MQTT-Explorer und Node-Red.
Nun bin ich mit meinem Latein am Ende.
Könnte mir Jemand bestätigen, dass er zu wss://[2a01:1b0:7996:418:83:137:146:230]:4443 eine Verbindung aufbauen kann?
oder ws://[2a01:1b0:7996:418:83:137:146:230]:8080
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 9546522949
Url: https://administrator.de/contentid/9546522949
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
5 Kommentare
Neuester Kommentar
Eine Verbindung bekomme ich, aber HTTP-Fehler 400 - vermutlich weil ich irgendwelche Header oder einen Request-Body setzen müsste:
$ curl --verbose -k -H 'Upgrade: websocket' -H 'Connection: upgrade' -H 'Sec-WebSocket-Key: zigD82qT7b5aw88LWTaG0Q==' -H 'Sec-WebSocket-Protocol: mqtt' 'https://[2a01:1b0:7996:418:83:137:146:230]:4443/mqtt' && echo " "
* Trying [2a01:1b0:7996:418:83:137:146:230]:4443...
* Connected to 2a01:1b0:7996:418:83:137:146:230 (2a01:1b0:7996:418:83:137:146:230) port 4443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519 / RSASSA-PSS
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
* subject: CN=demo.flashmq.org
* start date: Feb 10 22:49:23 2024 GMT
* expire date: May 10 22:49:22 2024 GMT
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* using HTTP/1.x
> GET /mqtt HTTP/1.1
> Host: [2a01:1b0:7996:418:83:137:146:230]:4443
> User-Agent: curl/8.5.0
> Accept: */*
> Upgrade: websocket
> Connection: upgrade
> Sec-WebSocket-Key: zigD82qT7b5aw88LWTaG0Q==
> Sec-WebSocket-Protocol: mqtt
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/1.1 400 Bad Request
< Sec-WebSocket-Version: 13
* OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0
* Closing connection
* TLSv1.3 (OUT), TLS alert, close notify (256):
curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0
Naja, der CN des Zertifikat passt dann eben nicht auf die verwendete Domain . Ist wie wenn du im Browser eine SSL Seite mit einem anderen Namen aufrufst der nicht im Zertifikat vorhanden ist, das musst du erst erlauben indem du "unsichere" Verbindungen dem Client erlaubst.
Verbindung erfolgreich
Ohne den Parameter --insecure wie erwartet der Fehler weil der common name des Servers nicht auf die IPv6 matcht, also völlig normales Verhalten
mqttui -b "wss://[2a01:1b0:7996:418:83:137:146:230]:4443" --insecure
Verbindung erfolgreich
Ohne den Parameter --insecure wie erwartet der Fehler weil der common name des Servers nicht auf die IPv6 matcht, also völlig normales Verhalten
Error: Websocket: IO error: presented server name type wasn't supported
Caused by:
0: IO error: presented server name type wasn't supported
1: presented server name type wasn't supported
Liegt dann wohl am MQTT Explorer.
Mit Node-Red ebenfalls.
That's by design, die schützen nur die User, wie Browser eben auch.Mit Node-Red ebenfalls.
indem ich die Domain verwende und IPv4 abschalte.
Statt abschalten, eigenen DNS-Server/Proxy verwenden und dort nur einen AAAA Record für die genannte Domain hinterlegen.Btw. wenn dein Client sowieso eine globale IPv6 Adresse hat sollte er auch per Default IPv6 bevorzugen und auf die IPv6 Adresse verbinden wenn er über die DNS Abfrage der Domain einen AAAA Record geliefert bekommt. Die IPv6 Adresse zu verwenden ist also überflüssig.