Hi mailinglist,

I'm trying to set up a broker federation topology with a server and (for
prototyping) two clients and I need to send messages from one client to the
other, routed via the server broker since the clients will be
firewalled/NATed and can not communicate directly. My understanding is that
the way to do this is with dynamic routing and I've followed the discussion
on the following thread with some success:
http://qpid.2158936.n2.nabble.com/Dynamic-routing-between-disconnected-exchanges-td7598100.html.
That article describes three nodes A, B and C, and relaying from node A to
C via B.

So far so good - I can use "drain" on node C's test-topic/C
exchange/routing key and "spout" to write to node A's test-topic/C
exchange/routing key and the message is transferred via the "server" (node
B).

The problem I have is that this setup relies on TCP links being established
in both directions between each node. In my client-server scenario this is
clearly not possible and with the network restriction in place the dynamic
routing fails. As the documentation states,  "A dynamic exchange route is
always a pull route. It can never be a push route.". Does this mean that
the underlying broker link must be established in the same direction as the
route, or is there some way to override this or get the route from the
server to utilize the existing link from the client? Solutions involving
VPNs and tunnels are "not allowed".

Just for info, I've included some more info from my prototype showing
information firstly from the working setup:
Client A - 192.168.0.12
Server   - 192.168.0.13
Client B - 192.168.0.14

*Server:*
*~$ qpid-route link list*
Host            Port    Transport Durable  State             Last Error
=============================================================================
192.168.0.12    5672    tcp          N     Operational
192.168.0.14    5672    tcp          N     Operational
*~$ sudo netstat -np | grep 5672*
tcp        0      0 192.168.0.13:43022      192.168.0.12:5672
ESTABLISHED 1477/qpidd
tcp        0      0 192.168.0.13:5672       192.168.0.12:38576
 ESTABLISHED 1477/qpidd
tcp        0      0 192.168.0.13:5672       192.168.0.14:46242
 ESTABLISHED 1477/qpidd
tcp        0      0 192.168.0.13:34905      192.168.0.14:5672
ESTABLISHED 1477/qpidd

*Client A:*
*~$ qpid-route link list*
Host            Port    Transport Durable  State             Last Error
=============================================================================
192.168.0.13    5672    tcp          N     Operational
*~$ sudo netstat -np | grep 5672*
tcp        0      0 192.168.0.12:5672       192.168.0.13:43022
 ESTABLISHED 1467/qpidd
tcp        0      0 192.168.0.12:38576      192.168.0.13:5672
ESTABLISHED 1467/qpidd

*Client B:*
Equivalent to Client A.

Then, with some (not so) cunning use of iptables, I blocked incoming
connections from the server to the clients:
*~$ sudo iptables -vnL*
Chain INPUT (policy ACCEPT 2157 packets, 424K bytes)
 pkts bytes target     prot opt in     out     source
destination
    4   240 REJECT     tcp  --  *      *       192.168.0.13
0.0.0.0/0            tcp dpt:5672 reject-with icmp-port-unreachable

and the server-side links show failure, as one would expect:
*~$ qpid-route link list*
Host            Port    Transport Durable  State             Last Error
=============================================================================
192.168.0.12    5672    tcp          N     Waiting           Connection
refused
192.168.0.14    5672    tcp          N     Waiting           Connection
refused

Any suggestions on how to solve this problem would be greatly appreciated!

Thanks in advance

Chris

Reply via email to