I have a requirement to make a distributed chat and presence system, with some restrictions to be described below, and I *think* that XMPP would be an extremely good fit. I have spent quite some time reading up on XMPP, however I am looking for some configuration advice: hopefully this is the correct list.
This is to support a distributed loose association of computer clubs.
These computer clubs generally run in networks over which they have no control (think school networks, or hotel networks: they run in those premises, and have internet access, but no control over routers or firewalls etc). They may be behind several layers of NAT.
What I want is:
- to create a central cloud hosted server
- to run a chat server locally inside each of the computer clubs
- clients on the local LAN can connect to their local chat server, and chat to each other
- that is vanilla XMPP/Jabber behaviour. I favour prosody as the server, for various reasons.
- each computer club chat server makes an encypted link to the central server and announces it's presence
- this puts the local chat server "online" in our loose federation of nodes
- central server remembers some data about each "local" server which connects
- clients on each local LAN can how ask their "online" local server to tell them what other servers are online
- clients can get a roster of clients either connected locally, or connected to other servers
- clients can initiate a chat session with local clients, or clients connected to other servers
I would rather not write this s/w myself from scratch: this is rather close to a distributed XMPP network of servers (isn't it?) except that I cannot really rely on DNS to find the local server in each computer club, and servers in each local club cannot directly contact each other. All contact will have to go via the central server.
Any necessary level of ssl certs, unique identifiers for the "local" chat servers etc is possible. It's just that local server A cannot see local server B: they will have to communicate via the central cloud-hosted server.
Is XMPP the right answer to this problem? Or am I barking up the wrong tree there?
TIA for your expert advice.