#2133: Remove port randomization to avoid polluting DHT
-------------------+--------------------------------------------------------
 Reporter:  bmnot  |       Owner:                
     Type:  bug    |      Status:  new           
 Priority:  major  |   Milestone:  Future        
Component:  core   |     Version:  git 1.3-stable
 Keywords:         |  
-------------------+--------------------------------------------------------
 To quote hydri (libtorrent author) regarding Deluge's port randomization:
 "<hydri> yeah, you should tell them not to do that.."

 Try this: Start Deluge, connect to DHT, wait about half an hour, then
 disconnect again and re-start Deluge, letting it pick a new random port.
 Then go watch your router logs. About 2000 blocked connections per minute
 in my case. That's all the DHT peers trying to send you queries at your
 last known port.

 Now, what happened? Well, when you meet other peers on torrents, you each
 exchange lists of all the DHT peers you know about. They add you to their
 list in this format: IP:PORT:FINGERPRINT. Then when THEY meet other peers,
 they keep passing this on, further and further. Suddenly, thousands or
 tens of thousands of peers know about your IP and port.

 So, what happens when you change port all the time? Well, all those peers
 will be hammering your router at ports that are closed. At best, it means
 your DHT works much worse and that you're polluting the worldwide DHT
 tables. At worst, the DDoS-like "attack" might a crash a router that can't
 keep up with the thousands of blocked port messages per minute (it takes a
 bit of CPU and RAM to generate the text string for each blocked attempt in
 its internal logs; I've seen routers crash from this, mostly ones 8+ years
 old).

 It also harms regular torrenting (TCP), because of peer discovery
 mechanisms. In that case, peers build lists of the IP and TCP port of all
 other peers, and then share these lists with each other. If your port has
 changed, you won't get connected to by those peers anymore. So, it's bad
 all around to have random ports on *every* launch.

 The solution is so simple: Remove the "random port" checkbox, and change
 the dual incoming port "range" fields to a single port field instead.
 Next, on the first startup of the Deluge daemon, generate a port at
 random, and then stick to it. Allow the user to change the port if they
 want to, but using that single field to enter *one* port in. The process
 is as follows: "Install > first launch (rand() 49152-65535) == 53838 >
 every other launch = 53838". That way every user will still have a unique
 port, but it won't change on every launch, thus not harming DHT/getting
 your router DDoS'd. The port might still change occasionally due to being
 in use, but at least it will no longer happen on *every* launch, thus
 doing far less damage. Now, the OUTGOING ports on the other hand, should
 stay random (a port range); they have nothing to do with the torrent
 protocol. It's only the incoming port that needs to be static, for you to
 be connectable by other peers that know about you.

 Finally: I spoke to Johnny, trying to figure out why this behavior was
 even in Deluge in the first place. Neither of us can see a reason. There
 is no benefit to having a random incoming port on every launch. Hiding
 traffic from the ISP by changing ports? No, your client still runs 24/7
 for the most part and uses a single port all that time. If you really
 wanted to avoid any chance of ISPs detecting a lot of traffic on a single
 port, then the current feature is not gonna do it; the only way to combat
 traffic detection is to make a user-plugin that disables DHT, and then
 changes the libtorrent port every X minutes.

 So, the current feature has no value and just harms the torrent protocol.

 Lastly; libtorrent 16 has added a flag to "never let the OS pick a random
 port" (if port in use) for this exact reason, but it's not getting
 backported to lt15 so it cannot be used here. Here it is anyway for
 completion:
 http://upstream-tracker.org/changelogs/libtorrent-
 rasterbar/0.16.1/changelog.html "added session::listen_no_system_port flag
 to prevent libtorrent from ever binding the listen socket to port 0"

-- 
Ticket URL: <http://dev.deluge-torrent.org/ticket/2133>
Deluge <http://deluge-torrent.org/>
Deluge project

-- 
You received this message because you are subscribed to the Google Groups 
"Deluge Dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/deluge-dev?hl=en.

Reply via email to