Der Raspberry Pi als Jabber-Server

ejabberd_logo

Durch einen Artikel auf thomas.leister.de bin ich erst einmal bewusst auf den Messenger-Dienst Jabber aufmerksam geworden. Nach einiger intensiver Nutzung, habe ich ein wenig recherchiert und wollte nun meinen eigenen XMPP-Server (Extensible Messaging and Presence Protocols) auf einem Raspberry Pi installieren. Besonders hilfreich war dabei ein Artikel von Christoph von 0fury.de.

Dazu verwende ich eine DynDNS, über die ich von außen auf die IP des RasPi zugreifen kann. Der ddclient sorgt dafür, dass der Jabber-Server so immer erreichbar bleibt. Als XMPP-Server habe ich mich für die Open Source Variante ejabberd entschieden. Die Installation eines Webservers ist hierbei nicht nötig.

Nach der Installation von ejabberd

wird der Server konfiguriert.

Dazu wird die DynDNS-Adresse des Servers eingegeben sowie ein administratives Konto angelegt.

news-648

news-649

news-650

news-651

Nach Abschluss der Einstellungen sollte der XMPP-Server laufen. Die Ports 5222 , 5269 und 5280 sind am Router jedoch noch freizugeben. Als Administrator kann man nun Nachrichten über den Pi versenden.

Möchte man auch anderen Usern von außen erlauben, einen Account auf dem Raspberry Pi zu erstellen, so muss man den Eintrag

in

in der Konfigurationsdatei /etc/ejabberd/ejabberd.cfg ändern.

Dazu

ausführen, mit Ctrl + o und Enter, Ctrl + x speichern und den Server neu starten.

Das Webinterface zur Abfrage der wichtigsten Informationen erreicht man nun über die Adresse http://“DynDNS-Domain“:5280/admin.

news-652 news-653

Viel Spaß!

Autor: Frank Lüttig

Mein Name ist Frank, ich bin 1969 geboren und wohne in Halle (Saale). Ich bin ein technikbegeisterter Linux-User und berichte von Zeit zu Zeit auf intux.de über meine Erfahrungen im Bereich Open Source.

49 Gedanken zu „Der Raspberry Pi als Jabber-Server“

  1. Hallo,

    vielen Dank für den Artikel. Zwei Hinweise: laut ejabberd-Manual scheint der Port 5280 nicht zwingend nach außen geöffnet sein zu müssen. Zum anderen kann man ihn auf einen „sicheren“ Port (d.h. SSL-geschützt) umleiten.

    http://docs.ejabberd.im/admin/guide/security/#firewall-settings
    http://docs.ejabberd.im/admin/guide/managing/

    Um nicht jemanden deinen armen RaspPi zu massakrieren, würden ich die Adresse in den Bildern verschleiern.

    Viele Grüße,

    /Tomo

  2. Hiiilfe bitte
    Wenn ich
    sudo nano /etc/ejabberd/ejabberd.cfg
    Eingebe bekomme ich nur eine leere Datei angezeigt
    Ebenfalls kann ich den Server nicht erreichen
    Kann Mir bitte bitte jemand helfen

  3. Hallo,vielen Dank für die super schnelle Antwort
    Mittlerweile komme ich mit meinem Client eine Verbindung zu meinem pi
    Aaaaaber wenn ich versuche die config File aufzurufen (direkt auf dem pi)
    Bekomme ich leider ein leeres Dokument auch mit sudo su Zugriff
    Allerdings kann ich auf eine Datei (ejabberd.yml) zugreifen und kann dort etwas einstellen.dort finde ich aber leider keine Möglichkeit zu sehen wo ich zulassen kann das man sich direkt mit einem Client ein Konto auf dem Server erstellen kann.für jegliche Hilfe wäre ich sehr sehr dankbar da ich schon sehr lange nach einer Möglichkeit Suche meinen eigenen Server zu betreiben

  4. Meine bessere Hälfte hatte wohl recht mit dem l statt der 1
    Ausgabe
    Desktop. Downloads. Pictures Python_games. Videos
    Documents Music. Public. Templates

  5. Oh gott,das ist verdammt viel 😉
    In this File you can configure options that are passed by Ejabberdctl.cfg
    To the erlang runtime System when starting ejabberd
    Und noch ca 300 Zeilen mehr
    Aber da kann ich das was ich brauche leider nicht eintragen

  6. Jetzt habe ich wheezy und es ist zum Mäuse melken
    Finde jetzt die cfg File kann sie einstellen
    Aaaaaber
    Jetzt wird der Server nicht gefunden
    Im Router ist alles supi eingestellt (hat bei jessie Geklappt)
    Bin wirklich dem brechen nahe 😉

  7. Wäre super,darf ich aber noch eine Frage stellen.
    Habe jetzt einfach die ejabberd.cfg Datei aus der wheezy Installation
    In die funktionierende jessie Version kopiert
    Jetzt läuft der Server
    Nur noch ein Problem
    Man kann sich kein Konto von dem Client aus erstellen
    Wo muss ich das in der ejabberd.cfg ändern um das zu gestatten?
    Es gibt Dort ja Bereiche
    Wenn du mir da vielleicht doch noch mal unter die Arme greifen könntest wäre das wirklich lieb von dir

  8. Da man in der config Datei sehr viel erlauben und verweigern kann weiß ich leider nicht genau wo da 😉 kann ich dir vielleicht mal meine config Datei per Mail zuschicken und du markierst es mir wo ich er einstellen kann? DAS wäre super

  9. Danke.vielen Dank werde ich gleich machen wenn ich Zuhause ankomme 🙂
    Mittlerweile habe ich herausgefunden das es wohl eine neue Version von ejabberd gibt in der die Programmiersprache von erlang geändert wurde
    Die aktuelle Version benötigt nicht mehr die ejabberd.cfg sondern nur die ejabberd.yml dort wird alles eingestellt
    Aber selbst dort klappt nicht alles,nur der Administrator Account
    Und am direkt am pi erstellte Benutzer
    Aber ich mag es ja so haben das alle sich direkt mit ihrem Client einen Account erstellen können und ausgerechnet das klappt nicht
    Für deine Hilfe bin ich sehr sehr dankbar und wenn du es „hingekommen“ kommt sehr gerne eine donation 😉

  10. Hallo zusammen, ich habe das Problem dass mir keiner schreiben kann. Welche Ports muss ich in der Fritzbox noch freigeben und muss ich da noch was in der Conf. von ejabberd anpassen ?

    Bezeichnung Protokoll Port an Computer an Port
    Jabber TCP 5269 raspberrypi 5269
    Jabber TCP 5280 raspberrypi 5280
    Jabber UDP 5223 raspberrypi 5223
    Jabber UDP 5269 raspberrypi 5269
    Jabber UDP 5280 raspberrypi 5280
    Jabber TCP 5223 raspberrypi 5223
    Jabber TCP 5222 raspberrypi 5222
    Jabber UDP 5222 raspberrypi 5222

          1. Super, dankeschön.

            In der ejabberd.cfg habe ich die Ports 5222, 5223 und 5269 freigegeben indem ich die %% Zeichen dort komplett auch bei den dazugehören Zeilen gelöscht habe.

            Leider erscheinen die Ports und / oder der Name ejabberd nicht in der Portliste, wenn ich den Pi nach seinen Ausgangsports suchen lasse mit dem Befehl: sudo netstat -tulpen

            1. meinen Admin- User kann ich in Pidgin mit dem Server über Port 5222 und Verbindungsserver verbinden. Der ist Online und auch per Handy in Mobilem Internet.
              Aber die Gegenstelle zeigt mit wenn ich den Admin-user adde, remote-server-not-found.

  11. Hallo Jan,

    das Problem “ remote-server-not-found“ kenne ich auch.

    Es ist so, dass wenn Du von einem Client auf einem anderen Server einen Client auf Deinen Server erreichen willst, die sendende Seite über DNS die SRV- Records Deines Servers und so auch die IP- Adresse kennen muss.

    Das Problem scheint darin zu liegen, dass einige DNS Resolver nicht immer die TTL von 60 sec., also die Lebensdauer des durch DynDNS generierten A- Records mit Deiner aktuellen IP beachten!

    Das heißt, obwohl in den DNS- Servern, auch häufig im Remote DNS- Server bereits die neue, aktuelle IP bekannt ist, arbeiten die offenbar nach wie vor mit der alten IP- Adresse.

    Ich habe für diese Problematik bisher noch keine Lösung gefunden. Damit scheint DynDNS und XMPP nicht richtig miteinander zu spielen, wenn man s2s Traffic haben will. Und natürlich will man den haben!

    Ein weiteres Problem ist, dass Du für „Gruppen- Chats“ eine Subdomain: „conference.deine-domain.com“ mit einem _xmpp-server Record haben musst, sonst gehen auch Gruppen- Chats nicht. Leider ist das nicht in allen Beschreibungen so beschrieben.

    Leider ist mir noch keine Lösung für das Resolver- Problem untergekommen, so dass ein zuverlässiger Betrieb eines eigenen Jabber- Servers mit dyn. IP wohl nicht möglich ist.

    Vielleicht kann man einen Workaround haben, wenn man die Zwangstrennung vom Netz ca. 23:00 Uhr macht, so dass vielleicht die Server in der eigenen Zeitzone dann vielleicht (Spekulation) dann die richtige IP einlesen (Vorausgesetzt die cachen täglich neu). Aber wie gesagt, Spekulation.

    Vermutlich kommt man am Ende nicht an einer festen IP vorbei.

    Uli

  12. Hallo, danke es funktioniert gut aber ich kann das Modul http_upload nicht wie beschrieben in der Ejabberd-Dokumentation aktivieren. Es kommt dann immer der Fehler:
    [….] Restarting ejabberd (via systemctl): ejabberd.serviceJob for ejabberd.service failed. See ’systemctl status ejabberd.service‘ and ‚journalctl -xn‘ for details.
    failed!

    in meiner Konfigurationsdatei:

    hab auch den Ordner home/pi/upload mit chmod 777 gesetzt.

    1. Ich kann dazu so nichts sagen, da ich mittlerweile Prosody einsetze. Jedoch sollten ’systemctl status ejabberd.service‘ und ‚journalctl -xn‘ mehr Aufschluss geben, so wie es die Fehlermeldung auch ausgibt.

  13. Hi, vielen dank für die gute Anleitung !
    Bei mir ist auch so ein Problem wohl mit der Dyndns.

    Habe 2 User auf Ejabberd eingerichtet und die können sich auch prima unterhalten und ihren Status im Jabber-Chat-Programm sehen.
    Verbindet sich User von Ejabberd mit einem Jabber-Clienten außerhalb von meinem Netz per Messenger (Pidgin oder Gaim) am PC, kann ich nur ca. 20min Nachrichten nach außen schreiben. Danach kommen diese nicht mehr an. (Ich bekomme keine Fehlermeldung und die Gegenstelle auch nicht)
    Der Client außerhalb kann mir aber noch Nachrichten senden, die ich empfange.
    Starte ich in der Konsole ejabberd neu funktioniert die komplette Kommunikation wieder.

    Hier noch mal anders beschrieben!
    User1@ejabberd.de schreibt Unser2@ejabberd.de (Nachrichten kommen an, Status wird gesehen.)

    User2@ejabberd.de schreibt User1@ejabberd.de (Nachrichten kommen an, Status wird gesehen.)

    Dies klappt immer und auch wenn ich nicht im Heimnetzwerk bin und zu jeder Zeit.

    ——————————————————————————————–
    (Mit Fremden Jabber-user kommunizieren:)

    User1@ejabberd.de schreibt test@außenstelle.net (Nachrichten kommen an, Status (online, Away) wird gesehen.)
    Von Test zu User1 klappt das auch bis nach Ablauf von ca. 20min.

    Dann sieht test KEINEN aktuellen Status (online, Away) von User1 mehr.
    Sendet test@außenstelle.net eine antwortet zu User1@ejabberd.de (Nachrichten kommen an, Status bleibt alt oder offline.)

    User1@ejabberd.de antwortet oder schreibst an test@außenstelle.net (Nachrichten kommen NICHT an, Status von Test wird aber aktuell (online, Away) gesehen.)
    Es gibt keine Fehlermeldung auf beiden Seiten.

    Ich glaube dass hier der Dyndns nicht richtig funktioniert.

    1. Deine Vermutung kann durchaus zutreffen. Ich habe leider eJabberd nicht mehr auf dem RasPi laufen.
      Da Du den XMPP-Server noch nicht produktiv laufen hast, würde ich an deiner Stelle das Ganze Mal mit Prosody testen.

  14. Hallo Frank !
    Danke für deine Antwort.

    Über Prosody habe ich auch schon einiges gelesen und dass es zumitdest auf dem Pi besser laufen soll.
    Wollte aber erst mal Ejabberd testen was ja auch bis auf dieses eine Problem ohne Probleme läuft.

    Kann man beides auf dem PI installiert haben aber natürlich zum Test nur einen Dienst gestartet haben ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.