Archived

This forum has been archived. Please start a new discussion on GitHub.

NAT traversal

Hi all,
I'm new to ICE and have an embedded app running on an ARM9 running Linux. I downloaded IceE, made some simple mods and got it compiled for ARM, and it runs great. Good work guys! :)

My embedded app (ICE server) is sitting behind a NAT router and needs to be accessed from the Internet. My understanding is that I have 2 choices to traverse the NAT:
1) Replace my NAT router with a machine that has a public and private NIC and uses Glacier2 as the new NAT.
2) Or put Glacier2 behind my NAT router and open up (forward) a port from my NAT router to the machine that is running Glacier2. Glacier2 will then act as a "connection multiplexer" through the forwarded port.

Both of these choices require that the user have a fair amount of expertise -- (1) more so than (2), but with (2), the user still has to figure out how to enable port forwarding on their router.

I've been exploring a third option -- implementing a UPnP client to automatically open up the necessary ports on the router. Supposedly, all NAT routers shipped after 2002 implement UPnP (such as Netgear, Linksys, D-link, etc). I haven't seen any discussion about UPnP on this forum and was wondering why. UPnP is supposedly "consumer friendly" -- the other approaches are not so friendly. Does anyone have any thoughts on the UPnP approach?

Thanks,
--rich

Comments

  • We looked into UPnP, but we had very limited success so far with our current set of routers. We will investigate this again with newer routers, but I can't give you any time schedule yet. (If you have a commercial need for this feature, please contact us at info@zeroc.com.)

    If your server is a pure server, i.e., if there are no callbacks to the client, then you don't necessarily have to use Glacier. You only need Glacier if you want the added security and/or Glacier's session management. Otherwise, all you have to do is to set your server's published endpoints as described in this FAQ:

    http://www.zeroc.com/faq/configurationForNAT.html

    If you have callbacks to the client, then you must either use Glacier2, or you must use bi-directional connections. For an example of bi-directional connections, have a look at demo/Ice/bidir.
  • dwayne
    dwayne St. John's, Newfoundland
    Banjo wrote:
    Hi all,
    I'm new to ICE and have an embedded app running on an ARM9 running Linux. I downloaded IceE, made some simple mods and got it compiled for ARM, and it runs great. Good work guys! :)

    Glad to hear you got it working so easily. We would be interested in what the mods you had to make were to get it working. It's possible we could incorporate them and make it even easier for you with future releases.

    Regards,
    Dwayne