> Hi,
>
> our setup needs openvpn UDP/TLS tunnels with dynamic client IP addresses, so 
> I implemented a fix for the bug #49 that has been open for over two years. 
>
> The patch is for version 2.2.2 as I had trouble compiling the 2.3.x tarball 
> from openvpn.net. As the solution is rather simple (just two small utility 
> functions in mudp.c) I'd guess it could be comfortambly migrated to 2.3.x.
>
> Basically what the fix does is the following: incoming data channel UDP 
> packets from an unknown IP are matched against existing UDP/TLS sessions, and 
> if the packet passes the HMAC authentication against an existing TLS context 
> we know the client IP has changed and the session state will be instantly 
> updated accordingly.
>
> I have tested this fix to some extent, and the IP handover works impressively 
> smoothly in my test setup where I randomly switch between two routes from 
> client to server.
>
> Dynamic client IP's are enabled/disabled with --float in the server side.
>
> Please feel free to contact me for any questions etc.

This is not a full review of the patch, just a few quick remarks.

This patch seems to do (number of tunnels) HMAC's for any packet received from 
an unknown IP. If this is correct, couldn't a server with a couple thousand 
tunnels be brought just by sending it a few hundred packets a second?

authenticate_tls_packet() contains a for() loop, but I see no code path that 
actually loops - everything seems to return immediately?

memcmp() should be replaced by a constant-time function to prevent timing 
attacks (probably only realistic on a server with a single tunnel); even then, 
this patch allows determining the (approximate) number of tunnels in use by 
looking at processing time.

I haven't looked at how this interacts with other features; it's at least 
noteworthy that the floating behavior can't be specified on a per-connection 
basis.

                Joachim

Reply via email to