You know, you're right. I've spent the past couple of days sniffing MSN
traffic and watching what it does.  Of course I'm new to kernel
programming so it's taking me a little while to understand this.  My
thinking was even if UPnP was implemented on linux, then we'd still have
to hook into netfilter and that's why I was looking to create a
conntrack, nat , and helper module for it.  I know this is just a hack
to get Messenger working, but I admint it is just a hack.

A UPnP daemon with netfilter hooks (and whatever else it needs to hook
into) is the proper way to do this and go on with it.  In the spirit of
hating Microsoft, some people may abandon this idea.  But it is becoming
widely accepted.  And lets face it, I administer some 60 windows
machines and they are all connecting at multiple locations through
Linux.  I'm sure many people are in the same boat.

I say we go for it.  Is the guy who done the one for 2.2 responding to
emails?  Let's take a look at his code, and see what we can do.
Questions?  Comments?




-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]] On Behalf Of Eric Wirt
Sent: Saturday, April 06, 2002 2:32 PM
To: [EMAIL PROTECTED]
Subject: [UPnP-SDK-discuss] UPNP Server/Application Gateway for Linux 

I have been on the lookout for a UPnP Internet Gateway for Linux for
some
time, and am glad to see that the discussion seems to have begun in
earnest.
I have been researching implementing a UPnP gateway that works with
netfilter for several months now, and wanted to throw out some more
information regarding UPnP, MSN Messenger, etc.  I see that there have
been
a couple threads regarding this stuff in the last couple days, so some
of
this may have already been covered.

>My overall impression is that UPnP is something that Microsoft designed
and
>is trying to push through any standards body that will listen.  It
doesn't
>look like something that was designed by the IETF.  Knowing how much
the
>IETF hates NAT in general, and who is implementing UPnP apps, this
makes
>perfect sense.  ;-)

While you are accurate in your assumption that UPnP is really
Microsoft's
baby, it appears to have been widely accepted by other vendors.  Intel
has
also been a driving force, and Linksys, D-Link, Netgear etc. have not
only
committed to making their internet gateway devices UPnP compatible, but
at
least several of them already have it available.  Several of the Linksys
NAT
gateways already support UPnP.  Voice, video, and file transfers for MSN
Messenger work fine from behind them.

>George sent me a private email pointing me to http://www.upnp.org
>Not surprisingly, that domain is registered by Microsoft.  They have
some
>useful information on the site, including an SDK and some drafts that
they
>submitted to the IETF.  I didn't study the drafts well enough to see
exactly
>how this UPnP thing is supposed to work for traversing firewalls.

Here is an extremely general overview of how a UPnP gateway allows
traversal
of the firewall:

1) Each UPnP device on the network sends a "Discovery" message to find
out
what other UPnP devices are around when it is first connected to the
network.  In the case of Windows XP / MSN Messenger, when it (either
Messenger or XP, I don't know which) is first loaded, it sends a
Discovery
message to see if there are any other UPnP devices on it's subnet.  The
gateway is supposed to respond by saying that it supports UPnP, and
register
the client as one of the devices it is supporting.  From that point
forward,
XP / Messenger will know that it can make use of the UPnP functions of
the
gateway.

2) When a program needs traversal through the firewall, it will ask the
gateway for X number of ports to specifically be opened and forwarded to
the
inside machine.  The gateway will report to the calling program
(Messenger)
which ports it has opened/forwarded, and the calling program takes it
from
there.  When the program is done with the ports it is supposed to ask
the
gateway to close them.

It is (of course) actually a little more complicated than above.  The
three
main sources of technical information I've found are the UPnP forum,
Microsoft's site, and the Intel UPnP site.  Intel's main UPnP website is
at:
http://www.intel.com/labs/connectivity/upnp/tech.htm.  They have several
whitepapers with more specific information on device discovery and NAT
traversal.  The upnp.org site also appears to have a very detailed
description of the actual messages/etc that a UPnP gateway is supposed
to
handle at http://www.upnp.org/resources/standards.asp

The UPnP messaging between UPnP devices appears to work primarily
through
SOAP and XML, and Intel has written an open source Linux SDK that can be
used to handle the messaging, device registration, discovery, etc.
(http://upnp.sourceforge.net)

I think the proper solution is to write an "UPnP Internet Gateway
Device"
daemon based on the Intel SDK that handles the messaging, and make sure
netfilter has the proper hooks to open/forward/close the ports as
necessary.
This seems like a much cleaner solution than trying to write conntrack
modules for Microsoft's mutilated SIP, RDP, etc.  It will also allow the
newer online games (and any other UPnP enabled software) to work through
NAT.

There is a partial implementation of this for the 2.2 kernels and
IPChains
available at: http://pseudoicsd.sourceforge.net/  This person took the
Intel
SDK and turned it into a daemon that listens for UPnP messages, and then
patched hooks into IPChains to allow the port
opening/forwarding/closing.
He has not implemented all of the UPnP messages, but it is functional
enough
that it allows MSN Messenger voice/video/file transfers to work properly
through IP Chains.  It may be a good starting place.  I suspect that the
daemon could be cleaned up and the ipchains hooks could be converted to
ones
that work on netfilter in a short period of time.

Please let me know if there is any way I can help.  I have limited time,
but
would like to help in any way I can.

Thanks.

Eric Wirt




Reply via email to