LTE-Sticks mit Hybrid SIM

      wollte mich nur mal eben zu Wort melden das ich das hier auch sehr interessiert verfolge....

      Mangels LTE Stick Hardware und profunden Coder Kenntnissen (außer nen bisschen PHP) kann ich leider nicht viel beitragen.


      Also: Weitermachen....
      Würd auch nen 10er spenden. Gibts Paypal oder sogar ne Kickstarter Kampagne?

      Greets LaForge
      Ich habe langsam das, was ich will. Codeschnipsel kommen heute oder morgen.
      Mir ist eben aufgefallen, dass ich in meinem Paketaufzeichnungen keine tunnel requests über LTE (der erste Verbindungsaufbau je Session) finde, weiß jemand ob da schon ein key drin ist und wie die CIN aussieht? (Ich nehme auch capture files an und verspreche, mir nur das Schema anzuschauen und sonst nicht zu verwenden, weitergeben etc..)
      GRE ist stateless, es gibt keine "Verbindung". Ich kann mir tausend GRE-Tunnel anlegen und Paket reinschicken, doch kaum eine Gegenseite wird damit etwas tun. Das habe ich schon aus Spaß mit 'ip t', wie bereits weiter oben erwähnt, angelegt, auch mal eine Menge an Pakete in GRE verpackt an Google DNS geschickt, weil ich gerade nichts besseres habe.
      Bei Hybrid muss man am Anfang einen tunnel request in den GRE-Tunnel schicken, damit der HAAP einen kennt (sonst wird bei GRE davon ausgegangen, dass beide Gegenstellen statische IP-Adressen haben, immer da sind usw.) und man seine IP-Adresse(n) bekommt. Ich baue ein "Skript" für den Versand der ganzen Steuerpakete, Empfang ist nicht so wichtig (das kann man noch von Hand machen, man muss meist nicht sofort reagieren)

      eMKay77 schrieb:

      Man kann GRE-Tunnel aufbauen, egal ob auf der anderen Seite etwas ist


      Genau, das meinte ich...
      Daher braucht man direkt ein Programm, welches die passenden Pakete verschickt, und wenn man dann eine (richtige) Antwort bekommt, dann weiß man, dass alles richtig ist. Ich empfehle im Hintergrund einen Wireshark o Ä, da sieht man, ob überhaupt Pakete rausgehen, ob es richtig verpackt ist und die eingehende Antwort.
      Ich hoffe spätestens jetzt wird verstanden, wie meinem Gedankengang war.

      @eMKay77 Wie legst du das GRE-Interface an?
      Ich denke 'ip t add gre_lte0 mode ip6gre remote [HAAP-IP] local [LTE-WAN-IP] seq ttl 30' sollte passen.

      Mein Stand zur Zeit:

      Quellcode

      1. sudo modprobe gre
      2. sudo modprobe ip6_gre
      3. lsmod | grep gre
      4. --
      5. sudo ip tunnel add gre_lte0 mode ip6gre remote [] local [] seq ttl 30
      6. sudo ip link set gre_lte0 up
      7. ip [b]-6[/b] t
      8. ip l

      Der Rest kommt später heute.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „genevt“ ()

      genevt schrieb:

      Wie legst du das GRE-Interface an?
      basierend auf dem hybrid-Binary -->

      Quellcode

      1. ip link add %s type ip6gre seq key %u remote %s local %s encaplimit none dev %s
      2. ip tunnel add %s mode gre seq key %u remote %s local %s dev %s
      der SPH nutzt also scheinbar 'ip link add...' für den IPv6-Tunnel und 'ip tunnel add...' für den IPv4-Tunnel...
      EDIT: tippe auf eine Art 'IPv4-Tunnel in IPv6-Tunnel'-Variante (oder der SPH nutzt die IPv4-Version des Befehls nicht - auch möglich)

      EDIT2: Dank an @Wisi :D

      mfg, emkay

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „eMKay77“ ()

      hefr54 schrieb:

      Soweit waren wir ander Stelle auch schon
      zwei verschiedene paar Schuhe... (Router/Stick)

      hefr54 schrieb:

      der benutzt immer die selbe IP die auch in der .cfg steht
      oder er schreibt die IP die er benutzt in die Config... ;)
      (und bevor ich's vergess: der Stick hat ja glaub' ich keine Config :D )

      Sowohl IPv6, als auch die DNS-Server, als auch die HAAP-IP ändern sich zwischen den Verbindungen... ;)
      --> mein Script nutzt da keine Konstanten, sondern ermittelt die jeweils Aktuellen.

      Das man sich Manches davon sparen kann, wenn man einen Router nutzt, ist klar - deshalb erwähnte ich weiter oben ja auch den Netgear...
      (zumindest, wenn man nicht doch noch irgendwelche LTE-Messwerte braucht - dann geht nur Stick/Modul. Aber das hoffe ich momentan einfach mal nicht...)

      mfg, emkay

      EDIT: und den Router auf der anderen Seite oder den HAAP sieht man zumindest in Deinem Screenshot vom B880 nicht...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „eMKay77“ ()

      Meine Vorstufe zum proof of concept:

      C-Quellcode

      1. #include <arpa/inet.h>
      2. #include <linux/if_packet.h>
      3. #include <stdio.h>
      4. #include <string.h>
      5. #include <stdlib.h>
      6. #include <sys/ioctl.h>
      7. #include <sys/socket.h>
      8. #include <net/if.h>
      9. #include <netinet/ether.h>
      10. #define DEFAULT_IF "gre_lte0"
      11. #define BUF_SIZ 1024
      12. int main(int argc, char *argv[])
      13. {
      14. int sockfd;
      15. struct ifreq if_idx;
      16. int tx_len = 0;
      17. char sendbuf[BUF_SIZ];
      18. struct sockaddr_ll socket_address;
      19. char ifName[IFNAMSIZ];
      20. /* Get interface name */
      21. if (argc > 1)
      22. strcpy(ifName, argv[1]);
      23. else
      24. strcpy(ifName, DEFAULT_IF);
      25. /* Open RAW socket to send on */
      26. if ((sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) {
      27. perror("socket");
      28. }
      29. /* Get the index of the interface to send on */
      30. memset(&if_idx, 0, sizeof(struct ifreq));
      31. strncpy(if_idx.ifr_name, ifName, IFNAMSIZ-1);
      32. if (ioctl(sockfd, SIOCGIFINDEX, &if_idx) < 0)
      33. perror("SIOCGIFINDEX");
      34. /* Construct the Ethernet header */
      35. memset(sendbuf, 0, BUF_SIZ);
      36. /* Packet data */
      37. sendbuf[tx_len++] = 0x10; //Tunnel Request
      38. sendbuf[tx_len++] = 0x03; //Attribut ist "CIN"
      39. sendbuf[tx_len++] = 0x00;
      40. sendbuf[tx_len++] = 40; //Länge
      41. tx_len+=40; //CIN aus Nullen, da Format/Inhalt mir noch nicht bekannt
      42. /* Index of the network device */
      43. socket_address.sll_ifindex = if_idx.ifr_ifindex;
      44. socket_address.sll_halen = ETH_ALEN;
      45. socket_address.sll_protocol = 0x0101;
      46. /* Send packet */
      47. if (sendto(sockfd, sendbuf, tx_len, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll)) < 0)
      48. printf("Send failed\n");
      49. return 0;
      50. }

      Disclaimer: Das war mal ein Beispiel für sockets unter Linux.

      Ich hoffe es hilft irgendwie.
      Moin Leutz!

      Wie schon angekündigt - nochmal Theorie gebüffelt ;)

      War da wohl etwas zu optimistisch:
      das Ganze beruht zwar zum allergrößten Teil auf Standard-GRE, aber das Steuer-Protokoll ist von Huawei...
      (die wollten da was Eigenes/Sauberes statt was Bekanntes zweckentfremden)

      Man kann zwar für die eigentlichen Tunnel die iproute2-Tools nutzen, aber um an die notwendigen Parameter zu kommen und für die Steuerung während des Betriebs, muß man deren Protokoll sprechen - das dürfte dann in Shell-Script eng werden :D

      Also werd' ich mich wohl hinsetzen und es in C/C++ machen.
      Zumindest wenn sie sich da an den Draft gehalten haben, sollte das machbar sein - ist alles recht gut verständlich und scheint auch komplett zu sein.

      mfg, emkay
      @genevt: hatte den Draft gelesen - ist nur länger her...
      Naja, dafür wolltest Du GRE (IP Type 47) ohne IP machen ;)
      (und in Deinem Code fehlen die Header...)

      @xdjbx: irgendwo hatt' ich doch geschrieben, ich mach erstmal - und les' nach, wenn's nicht mehr weitergeht :D

      Ich bin halt erstmal davon ausgegangen, daß sie sich an GRE halten - danach sah's ja auch aus... (deshalb schrieb ich ja auch, daß ich da zu optimistisch war - dachte, der erste Aufbau des Tunnels ginge evtl. noch so.)

      Naja, ein wenig C/C++ wird's richten :D

      mfg, emkay