UPnP: randomize external port
authorJulien Muchembled <jm@nexedi.com>
Mon, 2 Feb 2015 17:19:23 +0000 (18:19 +0100)
committerJulien Muchembled <jm@nexedi.com>
Mon, 2 Feb 2015 17:19:23 +0000 (18:19 +0100)
commit3a9e668c08d826284b2bbd5b66067182c5407d6c
tree61623d5b6edac0d0e1d181ee305abff978f9ab2d
parente3c424942dda646d4a2b43eefbb30185b99c813c
UPnP: randomize external port

Some routers are so broken that UPnP NAT don't report ConflictInMappingEntry
when redirecting the same port several times.

Here is for example what we had with a Numericable Box (France):

0 (1024, 'TCP', ('192.168.0.29', 1194), 're6stnet openvpn server (1194/tcp)', '1', '', 0)
1 (1024, 'TCP', ('192.168.0.16', 1194), 're6stnet openvpn server (1194/tcp)', '1', '', 0)
2 (1024, 'TCP', ('192.168.0.33', 1194), 're6stnet openvpn server (1194/tcp)', '1', '', 0)
3 (1024, 'TCP', ('192.168.0.20', 1194), 're6stnet openvpn server (1194/tcp)', '1', '', 0)
('192.168.0.29', 1194, 're6stnet openvpn server (1194/tcp)', True, 0)

Obviously, this can't work.

It seems that this router also accepts a limited number of NAT rules, far less
than we'd like, so even if there's still a probability of conflict with this
commit, it will be good enough for our use.
re6st/upnpigd.py