Problem with accessing chat rooms on my server from another server

My users currently unable to access chat rooms (conferences.) which are hosted on one of my wildfire servers from my other wildfire server. The users on the two servers can IM each other, so server-to-server communications can occur.

More simply stated:

Users on my_server_A can IM users on my_server_B (and vice-versa)

Users on my_server_A can use chat rooms on my_server_A

Users on my_server_B can use chat rooms on my_server_B

Users of my_server_A can NOT use chat rooms on my_server_B

Users of my_server_B can NOT use chat rooms on my_server_A

Users of (other servers) cannot use chat rooms on my_server_A or my_server_B

This is the error message which was in my server’'s error.log:

2006.09.12 15:24:16 org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Out goingServerSession.java:259) Error trying to connect to remote server: cs.luc.edu(DNS lookup: cs.luc.edu:5269)

java.net.ConnectException: Connection refused

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:516)

at org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Ou tgoingServerSession.java:254)

at org.jivesoftware.wildfire.server.OutgoingServerSession.authenticateDomain(Outgo ingServerSession.java:183)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.createSessionAndSendPac ket(OutgoingSessionPromise.java:130)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.access$300(OutgoingSess ionPromise.java:40)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise$1$1.run(OutgoingSession Promise.java:95)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 650)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)

at java.lang.Thread.run(Thread.java:595)

2006.09.12 15:24:16 org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Out goingServerSession.java:259) Error trying to connect to remote server: luc.edu(DNS lookup: luc.edu:5269)

java.net.NoRouteToHostException: No route to host

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:516)

at org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Ou tgoingServerSession.java:254)

at org.jivesoftware.wildfire.server.OutgoingServerSession.authenticateDomain(Outgo ingServerSession.java:183)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.createSessionAndSendPac ket(OutgoingSessionPromise.java:130)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.access$300(OutgoingSess ionPromise.java:40)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise$1$1.run(OutgoingSession Promise.java:95)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 650)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)

at java.lang.Thread.run(Thread.java:595)

What should I do to fix this?

Here are more error entries from my server’'s warn.log file:

2006.09.11 18:30:30 Error creating secured outgoing session to remote server: users.jabber.org(DNS lookup: users.jabber.org:5269)

org.xmlpull.v1.XmlPullParserException: could not determine namespace bound to element prefix stream (position: START_DOCUMENT seen stream:error@1:14)

at org.xmlpull.mxp1.MXParser.parseStartTag(MXParser.java:1816)

at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1479)

at org.jivesoftware.wildfire.net.MXParser.nextImpl(MXParser.java:331)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Ou tgoingServerSession.java:288)

at org.jivesoftware.wildfire.server.OutgoingServerSession.authenticateDomain(Outgo ingServerSession.java:140)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.createSessionAndSendPac ket(OutgoingSessionPromise.java:130)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.access$300(OutgoingSess ionPromise.java:40)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise$1$1.run(OutgoingSession Promise.java:95)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 650)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)

at java.lang.Thread.run(Thread.java:595)

2006.09.11 18:30:33 Error creating secured outgoing session to remote server: conference.jabber.org(DNS lookup: conference.jabber.org:5269)

org.xmlpull.v1.XmlPullParserException: could not determine namespace bound to element prefix stream (position: START_DOCUMENT seen stream:error@1:14)

at org.xmlpull.mxp1.MXParser.parseStartTag(MXParser.java:1816)

at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1479)

at org.jivesoftware.wildfire.net.MXParser.nextImpl(MXParser.java:331)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at org.jivesoftware.wildfire.server.OutgoingServerSession.createOutgoingSession(Ou tgoingServerSession.java:288)

at org.jivesoftware.wildfire.server.OutgoingServerSession.authenticateDomain(Outgo ingServerSession.java:140)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.createSessionAndSendPac ket(OutgoingSessionPromise.java:130)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise.access$300(OutgoingSess ionPromise.java:40)

at org.jivesoftware.wildfire.server.OutgoingSessionPromise$1$1.run(OutgoingSession Promise.java:95)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 650)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)

at java.lang.Thread.run(Thread.java:595)

2006.09.11 18:32:45 Error verifying key of remote server: conference.147.126.65.23

java.net.UnknownHostException: conference.147.126.65.23

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:507)

at org.jivesoftware.wildfire.server.ServerDialback.verifyKey(ServerDialback.java:5 20)

at org.jivesoftware.wildfire.server.ServerDialback.validateRemoteDomain(ServerDial back.java:456)

at org.jivesoftware.wildfire.server.ServerDialback.createIncomingSession(ServerDia lback.java:339)

at org.jivesoftware.wildfire.server.IncomingServerSession.createSession(IncomingSe rverSession.java:98)

at org.jivesoftware.wildfire.net.ServerSocketReader.createSession(ServerSocketRead er.java:211)

at org.jivesoftware.wildfire.net.SocketReader.createSession(SocketReader.java:466)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 53)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

2006.09.11 18:34:31 Error verifying key of remote server: conference.147.126.65.23

java.net.UnknownHostException: conference.147.126.65.23

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:507)

at org.jivesoftware.wildfire.server.ServerDialback.verifyKey(ServerDialback.java:5 20)

at org.jivesoftware.wildfire.server.ServerDialback.validateRemoteDomain(ServerDial back.java:456)

at org.jivesoftware.wildfire.server.ServerDialback.createIncomingSession(ServerDia lback.java:339)

at org.jivesoftware.wildfire.server.IncomingServerSession.createSession(IncomingSe rverSession.java:98)

at org.jivesoftware.wildfire.net.ServerSocketReader.createSession(ServerSocketRead er.java:211)

at org.jivesoftware.wildfire.net.SocketReader.createSession(SocketReader.java:466)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 53)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

2006.09.11 18:38:05 Error verifying key of remote server: conference.147.126.65.23

java.net.UnknownHostException: conference.147.126.65.23

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:507)

at org.jivesoftware.wildfire.server.ServerDialback.verifyKey(ServerDialback.java:5 20)

at org.jivesoftware.wildfire.server.ServerDialback.validateRemoteDomain(ServerDial back.java:456)

at org.jivesoftware.wildfire.server.IncomingServerSession.validateSubsequentDomain (IncomingServerSession.java:204)

at org.jivesoftware.wildfire.net.ServerSocketReader.processUnknowPacket(ServerSock etReader.java:152)

at org.jivesoftware.wildfire.net.SocketReader.process(SocketReader.java:217)

at org.jivesoftware.wildfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:156)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 62)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

Hi George,

I assume that you’'ve made the main xmpp.domain ( resolvable.

wondering this myself … so the typical way would be to have a A record (or comparable) for conference.mydomain.com or conference.im.mydomain.com resolvable to the ip that the im server lives at? This is how JabberD14 did it back in the day …

The recommended way in XMPP term is via DNS SRV setup.

An A record should be workable if Wildfire and its services run on the same machine, though I haven’'t tried it myself.

Talking about s2s connectivity, last time I assumed that once the primary domain was resolvable, then subdomain should assume the same tcp channel. But that’'s not true. I think the reason behind it is that to Wildfire, subdomain may run a totally different Wildfire than the primary domain and may not imply as a service running in a Wildfire. Looks like jabberd14 had similar reasoning.

Anyway, that idea is based on my findings and experience during an s2s setup. The devs might proove me wrong.

sorry, I haven’‘t come across any good docs on this (references, if you have any would be great!) but the only DNS SRV records I know of are xmpp-client and xmpp-server … how would one apply those in this case? Or are the others? To be more tangible, conference.im.uchicago.edu is my conference server’'s name (at least in XMPP, not in DNS) and my server is im.uchicago.edu. How would I apply DNS SRV records to these hosts to allow external parties to be invited to local MUCs?

Thanks much,

Andrew

Hi Andrew,

I’‘m not really sure if there’‘s any document on Wildfire-DNS-SRV except that the subject is being mentioned in several forum threads. The DNS SRV is defined in rfc2782. I had a quick look at it because it haven’‘t come to my requirement to have one setup. Also, I’'m not a DNS expert. Please excuse my ignorance.

My s2s setup works within my LAN just by simply defining the names in the /etc/hosts, like:

192.168.0.10 im.uchicago.edu conference.im.uchicago.edu

For non-SRV DNS setup, perhaps a couple of A and CNAME alike would do.

For a DNS with SRV setup, the xmpp-server SRV records could be something like:

_xmpp-server._tcp.im.uchicago.edu. 86400 IN SRV 20 0 5269 im.uchicago.edu.

_xmpp-server._tcp.conference.im.uchicago.edu. 86400 IN SRV 20 0 5269 im.uchicago.edu.

An xmpp-client is not needed in s2s context.

Besides xmpp-client and xmpp-server, I’'ve seen usage of jabber like in:

_jabber._tcp.im.uchicago.edu. 86400 IN SRV 20 0 5222 im.uchicago.edu.

although jabber is not defined in IANA port-numbers as of today, and so I don’‘t have any idea why it’'s used.

When your local client invites a remote client for an MUC chat, the remote client will receive a reference to the MUC room as someroom@conference.im.uchicago.edu. If the remote client accept the invitation, the client’‘s Wildfire (assumed) will use the DNS SRV you setup to perform the lookup on conference.im.uchicago.edu. When Wildfire finds out that the resolved IP is indeed the same as what’'s been resolved for im.uchicago.edu, it will use the existing tcp channel where the invitation originated.

Thanks much, I’'ll give that a shot…