SSH Tunnel

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

SSH Tunnel

Tangaloor
Hello,

I'm fairly new to Croquet and was going to collaborate with another
person, but we're both behind firewalls.  I know, though, how to set up
port forwards through an SSH tunnel, so I set up the proper listeners
based on the postcards and tried to connect. I'm getting an error that I
suspect may be because after the initial connection, another port-pair is
being attempted to be established for communication between the two
routers.

My questions are related to that assumption.

1) Is there a specific range where Croquet negotiates those connections
2) Can that range be reduced or set to a specific port somewhere
3) What is the class named that handles this negotiation?

We're using SimpleDemo (Master) to try to establish this connection.

Thanks for any assistance,

Joel Wilson


Reply | Threaded
Open this post in threaded view
|

Re: SSH Tunnel

Andreas.Raab
Hi Joel -

The way the demos are set up they'll work only on a local area network
since they use UDP to find other peers and assign the ports randomly.
The way you describe your setup you're trying to run Croquet over a WAN
configuration which (currently) requires a bit more setup than usual.

First, there needs to be a machine to host the router and which will
also act as the rendevouz point (this may be one of your participants or
a dedicated machine outside of the firewall). Just as long as it has a
port that the clients can get to it'll be fine. On that machine, you
want to run...

The Router Script
=================

   id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.

   dispatcher := TExampleDispatcher new.
   dispatcher listenOn: 4321. "fixed port"
   dispatcher autoCreate: false.

   router := TSimpleRouter new.
   router addUserName: 'foo' password: 'bar'.
   dispatcher addRouter: router id: id.

The key elements in the above are:
- the id: Which is some unique ID that you'll use for identifying the
session
- the port: That's the port the participants need to reach
- the authentication info: You don't want just about everybody to get there

Once the router is up and running, it's time to get to...

The participant script
======================

This script is a little longer since it needs to do quite a bit of setup
but it's not too horrible either:


   user := UIManager default
     request: 'Enter user name' initialAnswer:'guest'.
   pass := UIManager default
     requestPassword: 'Enter password for ', user storeString.

   participant := CroquetParticipant new.
   participant setup.
   harness := participant instVarNamed: 'harness'. "Eeek!"

   address := NetNameResolver addressForName: 'localhost'.
   id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.

   controller := TSimpleController new.
   controller connectTo: address port: 4321 sessionID: id.
   p := controller login: user password: pass.
   p wait. "until connected"
   p := controller join.    "receive messages"
   p wait. "until joined"
   p := controller sync. "request replicated state"
   p wait.    "until sync-ed"

   p result ifNil:[
     island := controller newIsland.
     island future id: id name: 'Test'.
     sync := island future new: SimpleWorld.
   ] ifNotNil:[
     controller install: p result.
     island := controller island.
   ].
   controller beServer.  "act as server"
   controller heartbeat: 20. "set heartbeat rate"
   harness addController: controller.
   entry := controller island future at: #masterSpace.
   pc := entry future postcard.
   pc whenResolved:[
     harness addIsland: island postcard: pc value.
     sync := harness  viewPortal future postcardLink: pc value.
     sync whenResolved:[
         harness startRender.
         participant openInWorld.
     ]. "ready to render"
   ].


Obviously, you want to make sure that your credentials, the router
address/port, the world to create etc. all match up.

Back to your question: With the above scripts, your tunneling questions
should have clear answers. Just specify any port you'd like in the
above, or even better, put the router on a machine that's not behind a
firewall and forget about tunneling.

Cheers,
   - Andreas

Joel Wilson wrote:

> Hello,
>
> I'm fairly new to Croquet and was going to collaborate with another
> person, but we're both behind firewalls.  I know, though, how to set up
> port forwards through an SSH tunnel, so I set up the proper listeners
> based on the postcards and tried to connect. I'm getting an error that I
> suspect may be because after the initial connection, another port-pair is
> being attempted to be established for communication between the two
> routers.
>
> My questions are related to that assumption.
>
> 1) Is there a specific range where Croquet negotiates those connections
> 2) Can that range be reduced or set to a specific port somewhere
> 3) What is the class named that handles this negotiation?
>
> We're using SimpleDemo (Master) to try to establish this connection.
>
> Thanks for any assistance,
>
> Joel Wilson
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: SSH Tunnel

Tangaloor
In reply to this post by Tangaloor
Andreas,

Thank you.  Is it possible to run Smalltalk without a frame buffer?  I've
got a machine in mind, but it's rack mounted and has no display.

-Joel

> Hi Joel -
>
> The way the demos are set up they'll work only on a local area network
> since they use UDP to find other peers and assign the ports randomly.
> The way you describe your setup you're trying to run Croquet over a WAN
> configuration which (currently) requires a bit more setup than usual.
>
> First, there needs to be a machine to host the router and which will
> also act as the rendevouz point (this may be one of your participants or
> a dedicated machine outside of the firewall). Just as long as it has a
> port that the clients can get to it'll be fine. On that machine, you
> want to run...
>
> The Router Script
> =================
>
>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>
>    dispatcher := TExampleDispatcher new.
>    dispatcher listenOn: 4321. "fixed port"
>    dispatcher autoCreate: false.
>
>    router := TSimpleRouter new.
>    router addUserName: 'foo' password: 'bar'.
>    dispatcher addRouter: router id: id.
>
> The key elements in the above are:
> - the id: Which is some unique ID that you'll use for identifying the
> session
> - the port: That's the port the participants need to reach
> - the authentication info: You don't want just about everybody to get
> there
>
> Once the router is up and running, it's time to get to...
>
> The participant script
> ======================
>
> This script is a little longer since it needs to do quite a bit of setup
> but it's not too horrible either:
>
>
>    user := UIManager default
>      request: 'Enter user name' initialAnswer:'guest'.
>    pass := UIManager default
>      requestPassword: 'Enter password for ', user storeString.
>
>    participant := CroquetParticipant new.
>    participant setup.
>    harness := participant instVarNamed: 'harness'. "Eeek!"
>
>    address := NetNameResolver addressForName: 'localhost'.
>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>
>    controller := TSimpleController new.
>    controller connectTo: address port: 4321 sessionID: id.
>    p := controller login: user password: pass.
>    p wait. "until connected"
>    p := controller join.    "receive messages"
>    p wait. "until joined"
>    p := controller sync. "request replicated state"
>    p wait.    "until sync-ed"
>
>    p result ifNil:[
>      island := controller newIsland.
>      island future id: id name: 'Test'.
>      sync := island future new: SimpleWorld.
>    ] ifNotNil:[
>      controller install: p result.
>      island := controller island.
>    ].
>    controller beServer.  "act as server"
>    controller heartbeat: 20. "set heartbeat rate"
>    harness addController: controller.
>    entry := controller island future at: #masterSpace.
>    pc := entry future postcard.
>    pc whenResolved:[
>      harness addIsland: island postcard: pc value.
>      sync := harness  viewPortal future postcardLink: pc value.
>      sync whenResolved:[
>          harness startRender.
>          participant openInWorld.
>      ]. "ready to render"
>    ].
>
>
> Obviously, you want to make sure that your credentials, the router
> address/port, the world to create etc. all match up.
>
> Back to your question: With the above scripts, your tunneling questions
> should have clear answers. Just specify any port you'd like in the
> above, or even better, put the router on a machine that's not behind a
> firewall and forget about tunneling.
>
> Cheers,
>    - Andreas
>
> Joel Wilson wrote:
>> Hello,
>>
>> I'm fairly new to Croquet and was going to collaborate with another
>> person, but we're both behind firewalls.  I know, though, how to set up
>> port forwards through an SSH tunnel, so I set up the proper listeners
>> based on the postcards and tried to connect. I'm getting an error that I
>> suspect may be because after the initial connection, another port-pair
>> is
>> being attempted to be established for communication between the two
>> routers.
>>
>> My questions are related to that assumption.
>>
>> 1) Is there a specific range where Croquet negotiates those connections
>> 2) Can that range be reduced or set to a specific port somewhere
>> 3) What is the class named that handles this negotiation?
>>
>> We're using SimpleDemo (Master) to try to establish this connection.
>>
>> Thanks for any assistance,
>>
>> Joel Wilson
>>
>>
>>
>
>



Reply | Threaded
Open this post in threaded view
|

Re: SSH Tunnel

Andreas.Raab
In reply to this post by Tangaloor
Yes, no problem. Assuming you're on a Unix box, just use:

   squeak -headless router.image file:///home/andreas/router.st

And router.st is exactly the little script that I quoted.

Cheers,
   - Andreas


Joel Wilson wrote:

> Andreas,
>
> Thank you.  Is it possible to run Smalltalk without a frame buffer?  I've
> got a machine in mind, but it's rack mounted and has no display.
>
> -Joel
>
>> Hi Joel -
>>
>> The way the demos are set up they'll work only on a local area network
>> since they use UDP to find other peers and assign the ports randomly.
>> The way you describe your setup you're trying to run Croquet over a WAN
>> configuration which (currently) requires a bit more setup than usual.
>>
>> First, there needs to be a machine to host the router and which will
>> also act as the rendevouz point (this may be one of your participants or
>> a dedicated machine outside of the firewall). Just as long as it has a
>> port that the clients can get to it'll be fine. On that machine, you
>> want to run...
>>
>> The Router Script
>> =================
>>
>>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>>
>>    dispatcher := TExampleDispatcher new.
>>    dispatcher listenOn: 4321. "fixed port"
>>    dispatcher autoCreate: false.
>>
>>    router := TSimpleRouter new.
>>    router addUserName: 'foo' password: 'bar'.
>>    dispatcher addRouter: router id: id.
>>
>> The key elements in the above are:
>> - the id: Which is some unique ID that you'll use for identifying the
>> session
>> - the port: That's the port the participants need to reach
>> - the authentication info: You don't want just about everybody to get
>> there
>>
>> Once the router is up and running, it's time to get to...
>>
>> The participant script
>> ======================
>>
>> This script is a little longer since it needs to do quite a bit of setup
>> but it's not too horrible either:
>>
>>
>>    user := UIManager default
>>      request: 'Enter user name' initialAnswer:'guest'.
>>    pass := UIManager default
>>      requestPassword: 'Enter password for ', user storeString.
>>
>>    participant := CroquetParticipant new.
>>    participant setup.
>>    harness := participant instVarNamed: 'harness'. "Eeek!"
>>
>>    address := NetNameResolver addressForName: 'localhost'.
>>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>>
>>    controller := TSimpleController new.
>>    controller connectTo: address port: 4321 sessionID: id.
>>    p := controller login: user password: pass.
>>    p wait. "until connected"
>>    p := controller join.    "receive messages"
>>    p wait. "until joined"
>>    p := controller sync. "request replicated state"
>>    p wait.    "until sync-ed"
>>
>>    p result ifNil:[
>>      island := controller newIsland.
>>      island future id: id name: 'Test'.
>>      sync := island future new: SimpleWorld.
>>    ] ifNotNil:[
>>      controller install: p result.
>>      island := controller island.
>>    ].
>>    controller beServer.  "act as server"
>>    controller heartbeat: 20. "set heartbeat rate"
>>    harness addController: controller.
>>    entry := controller island future at: #masterSpace.
>>    pc := entry future postcard.
>>    pc whenResolved:[
>>      harness addIsland: island postcard: pc value.
>>      sync := harness  viewPortal future postcardLink: pc value.
>>      sync whenResolved:[
>>          harness startRender.
>>          participant openInWorld.
>>      ]. "ready to render"
>>    ].
>>
>>
>> Obviously, you want to make sure that your credentials, the router
>> address/port, the world to create etc. all match up.
>>
>> Back to your question: With the above scripts, your tunneling questions
>> should have clear answers. Just specify any port you'd like in the
>> above, or even better, put the router on a machine that's not behind a
>> firewall and forget about tunneling.
>>
>> Cheers,
>>    - Andreas
>>
>> Joel Wilson wrote:
>>> Hello,
>>>
>>> I'm fairly new to Croquet and was going to collaborate with another
>>> person, but we're both behind firewalls.  I know, though, how to set up
>>> port forwards through an SSH tunnel, so I set up the proper listeners
>>> based on the postcards and tried to connect. I'm getting an error that I
>>> suspect may be because after the initial connection, another port-pair
>>> is
>>> being attempted to be established for communication between the two
>>> routers.
>>>
>>> My questions are related to that assumption.
>>>
>>> 1) Is there a specific range where Croquet negotiates those connections
>>> 2) Can that range be reduced or set to a specific port somewhere
>>> 3) What is the class named that handles this negotiation?
>>>
>>> We're using SimpleDemo (Master) to try to establish this connection.
>>>
>>> Thanks for any assistance,
>>>
>>> Joel Wilson
>>>
>>>
>>>
>>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: SSH Tunnel

Tangaloor
In reply to this post by Tangaloor
Andreas,

From what I'm reading, I could potentially put a controller and an initial
island in that headless image and connect to it with a trimmed down
participant script.  That way I could have a persistent world.  Can a
controller run without a viewPort?

-Joel

> Yes, no problem. Assuming you're on a Unix box, just use:
>
>    squeak -headless router.image file:///home/andreas/router.st
>
> And router.st is exactly the little script that I quoted.
>
> Cheers,
>    - Andreas
>
>
> Joel Wilson wrote:
>> Andreas,
>>
>> Thank you.  Is it possible to run Smalltalk without a frame buffer?
>> I've
>> got a machine in mind, but it's rack mounted and has no display.
>>
>> -Joel
>>
>>> Hi Joel -
>>>
>>> The way the demos are set up they'll work only on a local area network
>>> since they use UDP to find other peers and assign the ports randomly.
>>> The way you describe your setup you're trying to run Croquet over a WAN
>>> configuration which (currently) requires a bit more setup than usual.
>>>
>>> First, there needs to be a machine to host the router and which will
>>> also act as the rendevouz point (this may be one of your participants
>>> or
>>> a dedicated machine outside of the firewall). Just as long as it has a
>>> port that the clients can get to it'll be fine. On that machine, you
>>> want to run...
>>>
>>> The Router Script
>>> =================
>>>
>>>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>>>
>>>    dispatcher := TExampleDispatcher new.
>>>    dispatcher listenOn: 4321. "fixed port"
>>>    dispatcher autoCreate: false.
>>>
>>>    router := TSimpleRouter new.
>>>    router addUserName: 'foo' password: 'bar'.
>>>    dispatcher addRouter: router id: id.
>>>
>>> The key elements in the above are:
>>> - the id: Which is some unique ID that you'll use for identifying the
>>> session
>>> - the port: That's the port the participants need to reach
>>> - the authentication info: You don't want just about everybody to get
>>> there
>>>
>>> Once the router is up and running, it's time to get to...
>>>
>>> The participant script
>>> ======================
>>>
>>> This script is a little longer since it needs to do quite a bit of
>>> setup
>>> but it's not too horrible either:
>>>
>>>
>>>    user := UIManager default
>>>      request: 'Enter user name' initialAnswer:'guest'.
>>>    pass := UIManager default
>>>      requestPassword: 'Enter password for ', user storeString.
>>>
>>>    participant := CroquetParticipant new.
>>>    participant setup.
>>>    harness := participant instVarNamed: 'harness'. "Eeek!"
>>>
>>>    address := NetNameResolver addressForName: 'localhost'.
>>>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>>>
>>>    controller := TSimpleController new.
>>>    controller connectTo: address port: 4321 sessionID: id.
>>>    p := controller login: user password: pass.
>>>    p wait. "until connected"
>>>    p := controller join.    "receive messages"
>>>    p wait. "until joined"
>>>    p := controller sync. "request replicated state"
>>>    p wait.    "until sync-ed"
>>>
>>>    p result ifNil:[
>>>      island := controller newIsland.
>>>      island future id: id name: 'Test'.
>>>      sync := island future new: SimpleWorld.
>>>    ] ifNotNil:[
>>>      controller install: p result.
>>>      island := controller island.
>>>    ].
>>>    controller beServer.  "act as server"
>>>    controller heartbeat: 20. "set heartbeat rate"
>>>    harness addController: controller.
>>>    entry := controller island future at: #masterSpace.
>>>    pc := entry future postcard.
>>>    pc whenResolved:[
>>>      harness addIsland: island postcard: pc value.
>>>      sync := harness  viewPortal future postcardLink: pc value.
>>>      sync whenResolved:[
>>>          harness startRender.
>>>          participant openInWorld.
>>>      ]. "ready to render"
>>>    ].
>>>
>>>
>>> Obviously, you want to make sure that your credentials, the router
>>> address/port, the world to create etc. all match up.
>>>
>>> Back to your question: With the above scripts, your tunneling questions
>>> should have clear answers. Just specify any port you'd like in the
>>> above, or even better, put the router on a machine that's not behind a
>>> firewall and forget about tunneling.
>>>
>>> Cheers,
>>>    - Andreas
>>>
>>> Joel Wilson wrote:
>>>> Hello,
>>>>
>>>> I'm fairly new to Croquet and was going to collaborate with another
>>>> person, but we're both behind firewalls.  I know, though, how to set
>>>> up
>>>> port forwards through an SSH tunnel, so I set up the proper listeners
>>>> based on the postcards and tried to connect. I'm getting an error that
>>>> I
>>>> suspect may be because after the initial connection, another port-pair
>>>> is
>>>> being attempted to be established for communication between the two
>>>> routers.
>>>>
>>>> My questions are related to that assumption.
>>>>
>>>> 1) Is there a specific range where Croquet negotiates those
>>>> connections
>>>> 2) Can that range be reduced or set to a specific port somewhere
>>>> 3) What is the class named that handles this negotiation?
>>>>
>>>> We're using SimpleDemo (Master) to try to establish this connection.
>>>>
>>>> Thanks for any assistance,
>>>>
>>>> Joel Wilson
>>>>
>>>>
>>>>
>>>
>>
>>
>>
>>
>
>



Reply | Threaded
Open this post in threaded view
|

Re: SSH Tunnel

Andreas.Raab
In reply to this post by Tangaloor
Yes. That's exactly how it's supposed to be used ;-) For doing that,
simply ignore everything that refers to the harness in the participant
script (the harness is what does the viewing, managing avatars etc).
Essentially it boils down to this:

        user := 'server'.
        pass := 'xxxxxx'.

        address := NetNameResolver addressForName: 'localhost'.
        id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.

        controller := TSimpleController new.
        controller connectTo: address port: 4321 sessionID: id.

        p := controller login: user password: pass.
        p wait. "until connected"
        p := controller join.    "receive messages"
        p wait. "until joined"

        island := controller newIsland.
        island future id: id name: 'Test'.
        sync := island future new: SimpleWorld.

        controller beServer.  "act as server"
        controller heartbeat: 1000. "set heartbeat rate"

Note that I drastically reduced the heartbeat rate since this client
isn't going to be used interactively so we don't need to update it at
interactive rates. Also, this script doesn't test for a pre-existing
island (you could add this back in by first requesting a sync and
testing whether the result is non-nil) but in this example we just
recreate it from scratch.

Cheers,
   - Andreas

Joel Wilson wrote:

> Andreas,
>
> From what I'm reading, I could potentially put a controller and an initial
> island in that headless image and connect to it with a trimmed down
> participant script.  That way I could have a persistent world.  Can a
> controller run without a viewPort?
>
> -Joel
>
>> Yes, no problem. Assuming you're on a Unix box, just use:
>>
>>    squeak -headless router.image file:///home/andreas/router.st
>>
>> And router.st is exactly the little script that I quoted.
>>
>> Cheers,
>>    - Andreas
>>
>>
>> Joel Wilson wrote:
>>> Andreas,
>>>
>>> Thank you.  Is it possible to run Smalltalk without a frame buffer?
>>> I've
>>> got a machine in mind, but it's rack mounted and has no display.
>>>
>>> -Joel
>>>
>>>> Hi Joel -
>>>>
>>>> The way the demos are set up they'll work only on a local area network
>>>> since they use UDP to find other peers and assign the ports randomly.
>>>> The way you describe your setup you're trying to run Croquet over a WAN
>>>> configuration which (currently) requires a bit more setup than usual.
>>>>
>>>> First, there needs to be a machine to host the router and which will
>>>> also act as the rendevouz point (this may be one of your participants
>>>> or
>>>> a dedicated machine outside of the firewall). Just as long as it has a
>>>> port that the clients can get to it'll be fine. On that machine, you
>>>> want to run...
>>>>
>>>> The Router Script
>>>> =================
>>>>
>>>>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>>>>
>>>>    dispatcher := TExampleDispatcher new.
>>>>    dispatcher listenOn: 4321. "fixed port"
>>>>    dispatcher autoCreate: false.
>>>>
>>>>    router := TSimpleRouter new.
>>>>    router addUserName: 'foo' password: 'bar'.
>>>>    dispatcher addRouter: router id: id.
>>>>
>>>> The key elements in the above are:
>>>> - the id: Which is some unique ID that you'll use for identifying the
>>>> session
>>>> - the port: That's the port the participants need to reach
>>>> - the authentication info: You don't want just about everybody to get
>>>> there
>>>>
>>>> Once the router is up and running, it's time to get to...
>>>>
>>>> The participant script
>>>> ======================
>>>>
>>>> This script is a little longer since it needs to do quite a bit of
>>>> setup
>>>> but it's not too horrible either:
>>>>
>>>>
>>>>    user := UIManager default
>>>>      request: 'Enter user name' initialAnswer:'guest'.
>>>>    pass := UIManager default
>>>>      requestPassword: 'Enter password for ', user storeString.
>>>>
>>>>    participant := CroquetParticipant new.
>>>>    participant setup.
>>>>    harness := participant instVarNamed: 'harness'. "Eeek!"
>>>>
>>>>    address := NetNameResolver addressForName: 'localhost'.
>>>>    id := TObjectID readHexFrom: '5135efa79d25b6f169715bd9d1b54601'.
>>>>
>>>>    controller := TSimpleController new.
>>>>    controller connectTo: address port: 4321 sessionID: id.
>>>>    p := controller login: user password: pass.
>>>>    p wait. "until connected"
>>>>    p := controller join.    "receive messages"
>>>>    p wait. "until joined"
>>>>    p := controller sync. "request replicated state"
>>>>    p wait.    "until sync-ed"
>>>>
>>>>    p result ifNil:[
>>>>      island := controller newIsland.
>>>>      island future id: id name: 'Test'.
>>>>      sync := island future new: SimpleWorld.
>>>>    ] ifNotNil:[
>>>>      controller install: p result.
>>>>      island := controller island.
>>>>    ].
>>>>    controller beServer.  "act as server"
>>>>    controller heartbeat: 20. "set heartbeat rate"
>>>>    harness addController: controller.
>>>>    entry := controller island future at: #masterSpace.
>>>>    pc := entry future postcard.
>>>>    pc whenResolved:[
>>>>      harness addIsland: island postcard: pc value.
>>>>      sync := harness  viewPortal future postcardLink: pc value.
>>>>      sync whenResolved:[
>>>>          harness startRender.
>>>>          participant openInWorld.
>>>>      ]. "ready to render"
>>>>    ].
>>>>
>>>>
>>>> Obviously, you want to make sure that your credentials, the router
>>>> address/port, the world to create etc. all match up.
>>>>
>>>> Back to your question: With the above scripts, your tunneling questions
>>>> should have clear answers. Just specify any port you'd like in the
>>>> above, or even better, put the router on a machine that's not behind a
>>>> firewall and forget about tunneling.
>>>>
>>>> Cheers,
>>>>    - Andreas
>>>>
>>>> Joel Wilson wrote:
>>>>> Hello,
>>>>>
>>>>> I'm fairly new to Croquet and was going to collaborate with another
>>>>> person, but we're both behind firewalls.  I know, though, how to set
>>>>> up
>>>>> port forwards through an SSH tunnel, so I set up the proper listeners
>>>>> based on the postcards and tried to connect. I'm getting an error that
>>>>> I
>>>>> suspect may be because after the initial connection, another port-pair
>>>>> is
>>>>> being attempted to be established for communication between the two
>>>>> routers.
>>>>>
>>>>> My questions are related to that assumption.
>>>>>
>>>>> 1) Is there a specific range where Croquet negotiates those
>>>>> connections
>>>>> 2) Can that range be reduced or set to a specific port somewhere
>>>>> 3) What is the class named that handles this negotiation?
>>>>>
>>>>> We're using SimpleDemo (Master) to try to establish this connection.
>>>>>
>>>>> Thanks for any assistance,
>>>>>
>>>>> Joel Wilson
>>>>>
>>>>>
>>>>>
>>>
>>>
>>>
>>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: SSH Tunnel

Darius Clarke
In reply to this post by Tangaloor
Just successfully did this with the router in Vancouver with two
different locations in L.A.

 L.A. -> Vancouver -> L.A.

Works great. About 1/10th sec. round trip with a simple world.