I've noticed that I can run a drb server on a firewalled host, and talk 
to it from outside the firewall, if the client uses ssh tunneling to 
forward the port. At least, this works for simple method calls without 
blocks. The problem I'm seeing is that if a method on the server side 
yields to a block on the client side, the connection hangs. There is no 
problem with the same code within the firewall. I'm guessing that drb is 
trying to open another port, which hasn't been forwarded thru the tunnel.

Is there an easy solution to this problem? Other than avoid using yield, 
that is...

==== server.rb ====
require 'drb'

class Test
   def each
     4.times do |i|
       yield i
     end
   end

   def to_a
     [0,1,2,3]
   end
end

DRb.start_service('druby://your.host.here:9876', Test.new)

puts '[interrupt] to exit.'
sleep
===================

==== client.rb ====
require 'drb'

DRb.start_service

x = DRbObject.new(nil, 'druby://localhost:9876')

p x.to_a       # works fine

x.each do |i|  # hangs here
   p i
end
===================

==== forwarding ====
$ ssh -N -L 9876:your.host.here:9876 your.host.here
====================