Hello folks!

Since Solaris 10 we've supported IPsec NAT-Traversal (RFC's 3947 and 3948) by
using "nattymod" -> a STREAMS module that gets pushed in between a UDP
application (like the IKE daemon) and UDP.

Solaris 10 FCS did not have the Yosemite (PSARC 2005/082) project integrated,
so we could not de-STREAMS NAT-Traversal.  OpenSolaris has Yosemite, so we
can finally revisit the problem.

By eliminating nattymod we can:

        * Reduce the amount of lines of code in the system (~700 lines).

        * Eliminate race-condition bugs like 6481450 (nattymod calls
          putnext() on a freed queue.)

        * Open up the API for other Key Management implementations to use
          NAT-Traversal IPsec SAs with local-port == 4500.

The new API for an AF_INET UDP endpoint to enable NAT-Traversal is the
UDP_NAT_T_ENDPOINT socket option.  It's boolean (off or on), is only allowed
on AF_INET socket (AF_INET6 will return EAFNOSUPPORT, even for IPv4-mapped
sockets, because they can become IPv6 again), and requires the sys_ip_config
privilege to set.  I'll have to run this through PSARC via a fast-track, but
I can do that next week.

I have a webrev of code changes available at the new OpenSolaris code-review
site:

        http://cr.opensolaris.org/~danmcd/detangle/

and I encourage discussion and criticism.  These set of changes fall squarely
in the "networking" half of IPsec, vs. the "security" half, so discussions
should be held on networking-discuss at opensolaris.org.

One open question is whether or not we should allow NAT-Traversal SAs with a
local port that is NOT UDP 4500.  The changes required from the kernel side
are pretty small, and marked with TODO in the appropriate IPsec kernel source
files.  The user-land side for our IKE daemon, besides being in
closed-source, are non-trivial, and would require substantive changes.  I'm
willing to entertain making the kernel changes, however, given sufficient
community motiviation.  :)

I won't be able to THINK about putting these changes back until mid-June at
the earliest, but I think I'm pretty close to finished.  I've run our own IKE
and IPsec tests, plus I plan on having additional punchin-client and
punchin-server testing ("punchin" is a Sun-internal IPsec remote access
solution that is a testbed for our IPsec and other TCP/IP and crypto
components).

Please share your comments, criticism, and questions!

Thanks,
--
Daniel L. McDonald  -  Solaris Security & Networking Engineering
Mail: danmcd at sun.com             |  * MY OPINIONS ARE NOT NECESSARILY SUN'S! 
*
1 Network Drive  Burlington, MA  |"rising falling at force ten
http://blogs.sun.com/danmcd/     | we twist the world and ride the wind" - Rush

Reply via email to