Jump to content
Mumble forums

Cannot use ICE when server is behind router


kentarii
 Share

Recommended Posts

The scenario is like this...


I have a server on my local network with the IP 10.0.0.10

The server's public IP is 123.123.123.123 (dummy ip)

I'm connecting from a host with IP 234.234.234.234 (another dummy ip)


To enable Ice and make it available on not just localhost, i edited murmur.ini and set the following:

ice="tcp -h 0.0.0.0 -p 6502"
icesecretread=foobar

 

Then I started up murmur.x86 and got the following:

<W>2011-03-04 15:13:22.549 MurmurIce: Endpoint "tcp -h 10.0.0.10 -p 6502" running

10.0.0.10:6502 and 10.0.0.10:64738 are portforwarded to external 123.123.123.123:6502 and 123.123.123.123:64738


So far, so good, I can connect to the mumble-server on port 64738 with a normal mumble client.

I can connect to the ICE port with telnet:

telnet 123.123.123.123 6502
Trying 123.123.123.123...
Connected to 123.123.123.123.
Escape character is '^]'.
IceP

 

Then I wrote a small script using php-zeroc-ice (v3.3.1-12)

I can connect to the server and run some basic commands and get the result

$icesecret = array('secret' => 'foobar');
global $ICE;
Ice_loadProfile();
$base = $ICE->stringToProxy('Meta:tcp -h 123.123.123.123 -p 6502');
$meta = $base->ice_checkedCast("::Murmur::Meta");
$meta = $meta->ice_context($icesecret);
$meta = $meta->ice_timeout(10000);

$meta->getVersion($major, $minor, $patch, $text);
print "Result of getVersion(): ". $major . '.' . $minor . '.' . $patch . ' ' . $text. "\n";

print "Result of getUptime(): ". $meta->getUptime() ." seconds\n";

$servers = $meta->getBootedServers();
print "Result of getBootedServers(): ". count($servers) ."\n";
print_r($servers);

 

I get the following output:

[ 04. mars 2011 15:21:31.187 Network: trying to establish tcp connection to 123.123.123.123:6502 ]
[ 04. mars 2011 15:21:31.188 Network: tcp connection established
 local address = 234.234.234.234:59370
 remote address = 123.123.123.123:6502 ]
[ 04. mars 2011 15:21:31.196 Network: trying to establish tcp connection to 123.123.123.123:6502 ]
[ 04. mars 2011 15:21:31.198 Network: tcp connection established
 local address = 234.234.234.234:59371
 remote address = 123.123.123.123:6502 ]
Result of getVersion(): 1.2.3 Compiled Feb 19 2011 22:36:52
Result of getUptime(): 488 seconds
Result of getBootedServers(): 1
Array
(
   [0] => Ice_ObjectPrx Object
       (
       )

)

 

So far so good, now that I found a server, I'm going to try to get some information from that server:

foreach ($servers as $server) {
   $server = $server->ice_context($icesecret);
   print "ID: ". $server->id() ."\n";
}

 

This is where things go wrong, the $server Ice_ObjectPrx is unaware of the server's external IP and assume that the server IP is the internal IP.

 

[ 04. mars 2011 15:21:31.206 Network: trying to establish tcp connection to 10.0.0.10:6502 ]
[ 04. mars 2011 15:21:52.202 Network: failed to establish tcp connection
 local address = 234.234.234.234:59089
 remote address = <not connected>
 Network.cpp:1226: Ice::ConnectFailedException:
 connect failed: Connection timed out ]
[ 04. mars 2011 15:21:52.202 Network: closing tcp connection
 local address = 234.234.234.234:59089
 remote address = <not connected> ]
[ 04. mars 2011 15:21:52.203 Network: trying to establish tcp connection to 10.0.0.10:6502 ]
[ 04. mars 2011 15:21:55.202 Network: failed to establish tcp connection
 local address = 234.234.234.234:59092
 remote address = <not connected>
 Network.cpp:1226: Ice::ConnectFailedException:
 connect failed: Network is unreachable ]
[ 04. mars 2011 15:21:55.202 Network: closing tcp connection
 local address = 234.234.234.234:59092
 remote address = <not connected> ]
Ice_UnknownLocalException Object
(
   [unknown] => Network.cpp:1226: Ice::ConnectFailedException:
connect failed: Network is unreachable
   [message:protected] =>
   [string:Exception:private] =>
   [code:protected] => 0
   [file:protected] => /home/kentarii/mumble_ice.php
   [line:protected] => 37
   [trace:Exception:private] => Array
       (
           [0] => Array
               (
                   [file] => /home/kentarii/mumble_ice.php
                   [line] => 37
                   [function] => id
                   [class] => Ice_ObjectPrx
                   [type] => ->
                   [args] => Array
                       (
                       )

               )

       )
   [previous:Exception:private] =>
)

 

It makes sense that I'm not able to connect to 10.0.0.10 from my 234.234.234.234 IP. So I guess the issue here is that $meta->getAllServers() and $meta->getBootedServers() return array with ice objects which is not aware of the server's external IP.

My question is, why can't it inherit the remote address from the $meta object?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...