[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: The argument for writing a general purpose NAT for IPv6



On Apr 17, 2007, at 01:32, Brian E Carpenter wrote:
On 2007-04-17 00:55, james woodyatt wrote:
...
Whether network policy permits application reachability is independent of whether applications are addressable. I only think NAT needs to be used to redirect application flows between middleboxes, not between application endpoints in separate addressing realms.
Can you explain that?  Why can't you redirect packets without NAT?
The immediate visibility of the problem is as an implementation  
concern for the existing AirPort Extreme base station product, where  
the NAT would be used only within the router itself, though I can  
imagine more complicated application level gateway deployments that  
might require the NAT to redirect from the filtering router to a  
proxy running on another middlebox.
Here's the current situation inside the AirPort Extreme base station:

+ We have an IPv4 packet filter with an integrated NAT. The way the FTP and RTSP gateways are implemented is that NAT redirection rules are applied to the local interface to translate all outbound flows from FTP control streams and RTSP streams into a locally running proxy service.
+ The proxy service accepts these translated TCP streams and makes  
outbound connections on the client's behalf to the remote server.  In  
the IPv4 case, it translates IP addresses in the FTP control stream.   
It also inserts and removes state records for the FTP data streams it  
learns about in the process.  The equivalent things happens in the  
RTSP proxy.
+ To make this work with IPv6, the proxies don't have to translate  
anything, but they do still need to insert and remove state records  
for the associated TCP and UDP flows they learn about from parsing  
the FTP and RTSP streams.
+ The piece that's missing is the IPv6 NAT, to redirect FTP and RTSP  
control streams into the proxies.
Can you draw the picture?
Here's a crude attempt at a picture of what's going on inside the  
router for the RTSP case, which is what allows Quicktime Streaming  
and RealPlayer streaming to use RTCP/RTP transports:
  Outbound TCP port 7070 SYN       Arrives on LAN 2001:db8:aaaa::
  from 2001:db8:aaaa::1      ====> packet filter applies policy
  to 2001:db8:bbbb::1 on LAN       NAT redirects to 2001:db8:aaaa::
                                               |
                                               V
                                   TCP negotiates thru NAT between
                                   router at 2001:db8:aaaa:: and
                                   client at 2001:db8:aaaa::1
				   Proxy accepts TCP from client
                                               |
                                               V
  Outbound TCP port 7070 SYN       NAT redirects from 2001:db8:aaaa::
  from 2001:db8:aaaa::1      <==== Proxy connects TCP to server from
  to 2001:db8:bbbb::1 on WAN       router at 2001:db8:aaaa:: thru NAT
                                               |
                                               V
                                   Proxy intercepts SETUP method
                                   Adds state for RTP/RTCP flows
				   found in Transport: header
                                   [etcetera]

Can I do this without NAT? I don't see how. I'd really like to know how, which is why I'm spending so much of Apple's time trying to find out if the IETF community has solved this problem already in some way I don't yet understand.
Somehow, I've got to get my FTP and RTSP proxies to be a "man in the  
middle" for IPv6 the same way they do today for IPv4, but accepting  
TCP connections from clients and making TCP connections to servers,  
parsing the control streams to learn about data transport flows and  
managing their pinholes in the stateful packet filter.
That seems pretty easy to do by extending IPv6 NAT, and truthfully,  
that's what management here seems to think is the best path forward  
at this point.
You could surely redirect by encapsulation, and possibly by using a host route.
How?  The proxies bind to a local interface address to receive TCP  
connections intended for other destinations.   They insert themselves  
into the flow explicitly to maintain the appearance of transparency  
at the router.  I don't see any way to do that without deploying NAT.

--
j h woodyatt <jhw@apple.com>