Hello,

Sorry it took so long to reply, but I haven't read my work
mail for a while due to all the exams.

We have been using openvpn with this multiple connection
hack of mine for a while with our embedded linux systems
and it has been running fine. Still there is a lot of
testing to do and it ain't finnished in any sense.
For example, at the moment it is very sensitive to reply attacks.

I have tried to make it as independent as possible from the
openvon peer2peer version as possible. That's why I have
used my own little protocol for handshaking and allocating
a new UDP-port.

If you are intrested in giving it a try I can mail the source
for you.

It still uses an old openvpn version but it should not
be very difficult to merge with a newer version, haven't
just got the time for that.


Let me know if you wan't a tar-bal to try it out.

Sampo

> Hi,
>
> I am interested to know what is the update/status one above.
> I see email thread  as:
>
> Hi Sampo,
>
>                                   > I have been busy writing a forking server
>                                   > addon to openvpn.
>
>                                   Cool... Does each potential connecting 
> client need a separate config file,
>                                   or does the server use a common client 
> template and then keep track of
>                                   things like dynamic ports, dynamic endpoint 
> addresses, etc?
>
>                                   > In openvpn.c I have separated the 
> processing of
>                                   > parameters from main() to a new function 
> and
>                                   > moved main to another file to allow me to
>                                   > link against different main() functions.
>                                   >
>                                   > One that implements normal peer2peer vpn
>                                   > and two others that produces forkin' 
> server
>                                   > and client.
>                                   >
>                                   > These use a simple UDP protocol to agree a
>                                   > port to use, after which server forks do
>                                   > some handshaking with client and then
>                                   > calls openvpn() funcition from openvpn.c
>
>                                   Are you sure there needs to be a new 
> protocol to do this?
>
>                                   Suppose the master server listens on a 
> particular port, reads the initial
>                                   datagram from a connecting client, verifies 
> the integrity of the datagram
>                                   using a --tls-auth variant, allocates a 
> dynamic port, forks a new server
>                                   process, and continues in its event loop.
>
>                                   When the forked process finishes up the TLS 
> authentication, it can take the
>                                   Common Name from the client certificate and 
> use it to determine the
>                                   appropriate config profile to use 
> (containing ifconfig addresses, route
>                                   statements, etc.)
>
>                                   Or the handshaking could be done by passing 
> a configuration string in the
>                                   TLS payload, similar to the string now 
> built by options_string().
>
>                                   > This way I have been able to keep
>                                   > those well tested procedures and protocol
>                                   > of openvpn untouched.
>                                   >
>                                   > I still have some questions unsolved like
>                                   > DoS protection, dropping root priviledges
>                                   > and how to handel SIGUSR1 and SIGHUP.
>
>                                   Maybe keep track of all children, so when 
> the master process gets a signal,
>                                   it dispatches it to each child process, 
> then to itself.
>
>                                   > I hope I can overcome these and mail
>                                   > you a patch.
>                                   >
>                                   >
>                                   >
>                                   >
>                                   > Sampo
>                                   >
>                                   >
>                                   >
>                                   > > Hi Michael,
>                                   > >
>                                   > > Right now OpenVPN doesn't support a 
> forking-server model on a single
>                                   port,
>                                   > > it's strictly peer-to-peer with an 
> OpenVPN process instantiated at both
>                                   ends
>                                   > > of the connection, and each connection 
> on a unique port.
>                                   > >
>                                   > > There has been some recent discussions 
> about a forking-server
>                                   implementation
>                                   > > on this list -- see the "add a server 
> feature to openvpn to share udp
>                                   > > ports?" thread in the openvpn-devel 
> archives.
>                                   > >
>                                   > > I think the simplest way to do this 
> would be something like:
>                                   > >
>                                   > > (1) Add a --forking-server flag that 
> causes the main OpenVPN event loop
>                                   to
>                                   > > fork a new process for each initial 
> datagram received from a client.
>                                   > > (2) The newly forked server process 
> switches to a dynamic port before
>                                   > > responding back to the connecting 
> client.  This is quite a bit simpler
>                                   and
>                                   > > more efficient than trying to run all 
> clients over the same UDP port.
>                                   > > (3) OpenVPN already has code (see the 
> implementation of --float) that
>                                   will
>                                   > > adapt to the new port number returned 
> by the response to initial
>                                   datagram
>                                   > > sent from server to client.  I have 
> also confirmed that this type of UDP
>                                   > > port switch is recognized by both Linux 
> and Cisco stateful firewalls.
>                                   > >
>                                   > > There are a some complications that 
> would need to be handled:
>                                   > >
>                                   > > (1) You would need to protect against 
> DoS attacks that flood the server
>                                   with
>                                   > > fork requests.  Possibly some variation 
> of --tls-auth that would
>                                   > > authenticate the initial packet before 
> the fork call.
>                                   > >
>                                   > > (2) If a client connects, gets 
> disconnected, then connects again, you
>                                   would
>                                   > > need to make sure that the old server 
> process gets killed before a new
>                                   > > server process is forked.
>                                   > >
>                                   > > Unfortunately I'm pretty busy right now 
> with my day job, so I may not
>                                   get to
>                                   > > this for a while.  If you want to take 
> a shot at some kind of
>                                   > > implementation, I will do my best to 
> answer your questions.
>                                   > >
>                                   > > Best Regards,
>                                   > > James
>                                   > >
>                                   > > ----- Original Message -----
>                                   > > From: "Michael Grigoriev" <mag@ni...>
>                                   > > To: <openvpn-devel@li...>
>                                   > > Sent: Monday, July 22, 2002 6:53 PM
>                                   > > Subject: [Openvpn-devel] Multiple VPN 
> connections on the same port
>                                   > >
>
> __________________________________________________________________
> The NEW Netscape 7.0 browser is now available. Upgrade now! 
> http://channels.netscape.com/ns/browsers/download.jsp
>
> Get your own FREE, personal Netscape Mail account today at 
> http://webmail.netscape.com/
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:
> With Great Power, Comes Great Responsibility
> Learn to use your power at OSDN's High Performance Computing Channel
> http://hpc.devchannel.org/
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
>


Reply via email to