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
1 |
sudo apt-get install ejabberd |
wird der Server konfiguriert.
1 |
sudo dpkg-reconfigure ejabberd |
Dazu wird die DynDNS-Adresse des Servers eingegeben sowie ein administratives Konto angelegt.
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
1 |
{access, register, [{deny, all}]}. |
in
1 |
{access, register, [{allow, all}]}. |
in der Konfigurationsdatei /etc/ejabberd/ejabberd.cfg ändern.
Dazu
1 |
sudo nano /etc/ejabberd/ejabberd.cfg |
ausführen, mit Ctrl + o und Enter, Ctrl + x speichern und den Server neu starten.
1 |
sudo /etc/init.d/ejabberd restart |
Das Webinterface zur Abfrage der wichtigsten Informationen erreicht man nun über die Adresse http://“DynDNS-Domain“:5280/admin.
Viel Spaß!
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
Hallo Tomo,
da hast du recht. Jedoch wäre das Webinterface dann nicht mehr erreichbar.
Zwingend nötig ist es aber für die Funktion natürlich nicht.
[…] 2016-01-17 11:18 loweel favorited something by osbn: Der Raspberry Pi als Jabber-Server – https://www.intux.de/2016/01/der-raspberry-pi-als-jabber-server/ […]
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
Das sollte aber genau so funktionieren! Stelle sicher, dass Du auch auf dem Pi bist und nicht lokal auf deinem PC.
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
Gib mal
ein – danach
und poste mal die Ausgabe.
Bash: 1s: Company Not Found
Das ist die Ausgabe 🙁
Sicher, dass Du tatsächlich auf dem Pi bist?
Nicht Company 😉 doofe wortverbesserung. Command Not Found
Meine bessere Hälfte hatte wohl recht mit dem l statt der 1
Ausgabe
Desktop. Downloads. Pictures Python_games. Videos
Documents Music. Public. Templates
Du bist im verkehrten Verzeichnis. Gib die drei Befehle genau so ein. Dann schicke bitte nochmal die Ausgabe (die komplette Zeile mit Prompt).
Root@raspberrypi:/etc/ejabberd# ls
Ejabberdctl.cfg ejabberd.pem ejabberd.yml inetrc
Öffne dort die ejabberdctl.cfg mit
und poste den Inhalt.
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
Welche Raspbian-Version verwendet Du?
Ich benutze das neue jessie
Daran wird es liegen. Versuche das Ganze bitte mit Wheezy.
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 😉
Das wirst Du noch hin bekommen! 😉
Wenn alles geklappt hat, dann schicke mir mal die Jabber-Addy per Mail.
Wünsche noch frohes Schaffen!
Es steht im Client immer Server nicht gefunden
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
Das steht doch im Artikel! Du musst es mit
erlauben.
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
Mach mal!
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 😉
Schick mal beide Dateien zu. Ich schau mal rein.
Endlich Zuhause 😉 hat du noch eine email Adresse für mich?
Steht im Impressum.
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
Es kommt die Meldung, remote-server-not-found wenn ich den User von ejabberd hinzugefügt habe.
Laut damaliger Anleitung: „Die Ports 5222 , 5269 und 5280 sind am Router jedoch noch freizugeben.“
Bei mir hat es geklappt!
Oben ist ja meine Portliste aus dem Router, so habe ich es doch richtig einstellt oder ?
Das sieht erst einmal so richtig aus. Ich kann, sobald ich dazu komme, nochmal in meinem Router nachsehen. Das wird aber ein paar Tage dauern.
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
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.
Ändere doch mal die Ports 5269 und 5280 in TCP.
sind schon auf TCP und UDP freigegeben.
Kann es auch am SSL Zertifikat liegen ?
Habe noch keins aber Port 5222 und 5223 angemacht.
Meine Anleitung bezieht sich auf HTTP. Was darüber hinaus geht kann ich leider im Moment nicht testen.
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
Hi, kann man neben dem Jabber-Server noch z.B ein (Sealife) installieren, oder benötigt man für jedes einen seperates Board (Raspberry Pi 1/2/3)?
Ich kann Dir das nicht wirklich beantworten. Ich würde aber denken, dass es geht. Stelle doch mal bitte die Frage dort: http://www.forum-raspberrypi.de/
Da bekommst Du mit Sicherheit eine zufriedenstellendere Antwort. 😉
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.
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.
[…] ich in den letzten Tage das erste Mal eine xmpp Adresse als Kontaktmöglichkeit bekommen habe, ist es Zeit, sich einen Client einzurichten. Ich habe mich für gajim […]
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.
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.
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 ?
Mit eJabberd hatte ich angefangen. Prosody hingegen ist weitaus mächtiger. Hier auf intux.de findest du einiges zum Thema, natürlich auch einige Konfigurationen.