[e2e] 100% NAT - a DoS proof internet

Joe Touch touch at ISI.EDU
Mon Feb 20 14:35:08 PST 2006



Dan Wing wrote:
...
>>>> There are two options:
>>>>
>>>> 	a. the host behind the NAT tries to reach the other host first
>>>> 		this works only if the 'other host' is NOT behind
>>>> 		a NAT, so we're out of luck
>>>>
>>>> 	b. you 'register' your host somewhere as owning a unique
>>>> 	way to demultiplex packets to it
>>> You can communicate with a host behind a NAT if that host tries to
>>> communicate with you first.  This is how ICE (draft-ietf-mmusic-ice)
>>> functions.  ICE's basic operation in this regard is this:
>>>
>>>   1. Each host learns its public IP address (ICE describes 
>>>   using STUN,
>>>      RFC3489, for this; however you could use any other 
>>>   technique you
>>>      might prefer such as Bonjour, UPnP, or whatever),
>> You can't learn your public IP address without (a) or (b) above.
>>
>>>   2. They exchange their public IP addresses with each other using a
>>>      rendezvous protocol (ICE expects "SDP" is the rendezvous
>>>      protocol; SDP is used by SIP which solves your (b)), and then
>> I don't need to 'solve' (b); it's trivial to design a protocol to do
>> this. The point I'm making is that (a) or (b) is required. 
>> This repeats that point.
>>
>> In the absence of both (a) and (b), how is it solvable? (_that_ is the
>> real question).
> 
> I must be misunderstanding.  ICE (draft-ietf-mmusic-ice) describes
> how a bi-directional UDP stream can be established between two 
> hosts behind their own NATs, like this:
> 
>    [host]--[NAT]-----[Internet]-----[NAT]--[host]

>From your description above:

	- each host learns its public IP address
		please describe how this happens if only
		the two hosts above participate - notably
		without using a service on a public IP host elsewhere

		STUN servers must reside on the public Internet
		to determine the public address of a NAT'd host

	- the hosts rendezvous
		that works only if both hosts know they want
		to talk with each other. when both are behind
		a NAT, that means a registry on a public server
		is required. ICE is one protocol for doing that,
		but it still requires a public server somewhere
		(i.e., the TURN server)

You're quoting are two protocols that solve the trivial case; the
problematic case is when you have NEITHER STUN or TURN servers on the
public Internet available.

Joe

> 
> -d
> 
>> Joe
>>
>>>   3.  The hosts begin sending UDP packets to each other's public
>>>       IP address.  The NAT binding is opened when the first
>>>       inside->outside packet is seen by the NAT, which causes a
>>>       subsequent outside->inside packet to be NATted to the
>>>       proper host.
>>>
>>>
>>> There is a similar technique that works with TCP when both hosts are
>>> behind unmodified, unconfigured NATs.  If I recall correctly the NAT
>>> technique does rely on the nearly ubiquitious (but TCP violating)
>>> "stealth" NAT behavior (that is, the NAT has to simply drop 
>> unexpected
>>> TCP SYNs rather than respond with an ICMP error or a TCP 
>> RST).  For an
>>> example of specifics please see draft-hoffman-behave-tcp-03.txt.  
>>>
>>> -d
>>>
>>>> A DHT does both of these - (a) to reach a node somewhere 
>> else that is
>>>> NOT NAT'd first, then (b) to register in that 
>> infrastructure so other
>>>> nodes can find it using its node ID.
>>>>
>>>> Two killer questions:
>>>>
>>>> 	1. if everything is NAT'd, how do you perform step (a)?
>>>> 		i.e., where is the first place you register?
>>>>
>>>> 	2. (b) assumes hosts have unique node-IDs, but you
>>>> 	went through a lot of trouble to remove that property (NATs)
>>>>
>>>> 		for every reason you had a NAT in the base net,
>>>> 		why is it now acceptable to not NAT the node-IDs?
>>>>
>>>> 		- if you NAT node IDs, you're back where you started
>>>>
>>>> 		- if you're OK with not NAT'ing node IDs, why did you
>>>> 		NAT the base net?
>>>> 			i.e., non-NAT'd node IDs now become susceptible
>>>> 			to every message on the DHT
>>>>
>>>>> there you go...the details should be simple (apart from how you
>>>>> provide sufficiently accurate synchronized time without a globally
>>>>> reachable adddress betweewn the NTP servers, which, I admit, is
>>>>> probably a mite tricky - i guess you need to have them 
>>>> agree a set of
>>>>> rough times or something:)
>>>> Time, IMO, is the least of your concerns...
>>>>
>>>> Joe
>>>>
>>>>


More information about the end2end-interest mailing list