From: Joel VanderWerf Date: 2004-01-16T09:49:44+09:00 Subject: Re: drb, firewall, ssh tunneling, and yield Nathaniel Talbott wrote: > On Jan 15, 2004, at 19:10, Joel VanderWerf wrote: > >> 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 the client side firewalled also? Basically callbacks work by running > a DRb server on the client, which the server then connects back to. If > your client is firewalled, the server won't be able to connect to your > client. Yes, that's probably it. The client is behind a NAT. >> Is there an easy solution to this problem? Other than avoid using >> yield, that is... > > > DRbFire might interest you: > > http://rubyforge.org/projects/drbfire/ > > It's still very much in development, but it allows bi-directional > communication through a firewall. It's more oriented towards > circumventing client-side firewalls, but in your case I think it would > work fine if you just forwarded the additional port it needs (your > normal DRb port + 1). That makes sense. But I haven't got the incantation right. On the client side, I do: $ ssh -N -L 9876:remote.host:9876 -R 9877:localhost:9877 remote.host But I still have the same behavior: it hangs on the callback. > I'd love some outside feedback on how it works (or doesn't work) for > you. Documentation is minimal at this point, consisting only of a sample > client and server (and tests), but it's pretty simple to use, and you're > welcome to drop me an email with any questions you have. DRbFire sounds great... I'll check it out!