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/

Reply via email to