VPN server (OpenVPN) on FreeBSD for windows clients

1. Introduction : VPN system

We’ll describe the procedure to install a VPN server (OpenVPN) on a FreeBSD 10.1 server for Windows 7 clients.

This VPN will be configured for road warriors clients :
– 100% of the outgoing clients traffic will transit through the VPN server.
– 100% of the outgoing clients traffic will be encrypted before leaving the client computer.

I use this system to secure my connection when using untrusted networks (public WiFi) and to avoid constraints and limitations in some countries.

2. OpenVPN : server (FreeBSD 10.1)

2.1 Install

OpenVPN installation :

2.2 Configuration

To enable automatic start of services, we edit the rc.conf :

Add these lines :

To enable traffic forwarding without rebooting the server :

We can check by using this command (must return 1) :

Configuration preparation :

Build the certificate authority (CA) :

Server private key and certificate generation :

Generation of our first client key :

Generate the Diffie Hellman parameters :

We copy the generated files in the OpenVPN folder:

We backup the original configuration :

We can now edit this configuration :

My configuration :

3. OpenVPN : client (Windows 7)

3.1 Install

As a first step, we download the client software on the official OpenVPN website.

3.2 Configuration

We have to retrieve some files from the server to our client. This is a critical step in terms of safety : Do not transfer these file with a not encrypted protocol !

Here we used the SFTP (SSH File Transfer Protocol) with FileZilla client :

filezilla-sftp

Retrieve the following files, and copy them in “C:Program Files\OpenVPNconfig” :
– client1_laptop.key
– client1_laptop.crt
– ca.crt

In the same folder, we create a configuration file “client.ovpn”, and edit it :

You have to adapt/replace :
– A.B.C.D : IP of the VPN server
– client1_laptop.crt : client’s certificate
– client1_laptop.key : client’s key name

4. Start OpenVpn server

On the server, we can start the OpenVPN service :

If everything is OK, you should see this :

Just after start-up, we can check the logs :

5. Client connection

From the windows client, we should be able to connect to the server :

client openvpn windows

The client should be able to communicate with the server. Note : The OpenVPN client should be started with Administrator rights.

At this step, the server is not forwarding the traffic to/from internet yet.The clients don’t have access to internet.

6. Traffic forwarding

To allow the server to forward traffic between clients and internet, we will use the firewall Packet-filter.

To enable automatic start, we edit the rc.conf file :

Add these lines :

Create the PF’s rules :

Here is my file (use as an example) :

Load the kernel module :

Start PF :

While you don’t plan to do QOS (Quality Of Service), you can ignore these messages.

Now you should be able to surf on internet through your secure tunnel ! Enjoy :).

11 thoughts on “VPN server (OpenVPN) on FreeBSD for windows clients”

  1. Hola amigo.

    Buen día.

    Seguí tu manual,ya he podido realizar ping entre los equipos de la red virtual y de la red interna pero, no puedo ver los recursos compartidos de mi red interna.

    ¿Me puedes ayudar? ¿Hace falta algo en la configuración?

    ¡Saludos!

  2. Hola !

    Lo sentimos, yo no hablo mucho español.

    Para mi, si podes realizar ping entre los equipos de la red virtual y de la red interna, la configuración es buena.

    El acceso a los recursos compartidos de archivos con OpenVPN (en modo TUN) es un problema común. Hay que ajustar la configuración de samba (protocolo de uso compartido de archivos de Windows).

    https://openvpn.net/index.php/open-source/documentation/howto.html#samba
    http://www.ehowenespanol.com/samba-openvpn-como_250285/

    1. Gracias por la molestia en contestarme, me surgió una duda más.

      Mi red vpn es 10.8.0.0/24 y mi red interna es 10.10.10.0/24, la pc que tiene instalado el servidor open vpn es 10.10.10.20 pero los recursos compartidos los tengo en la ip 10.10.10.30.

      ¿Entonces para acceder a los recursos compartidos de 10.10.10.20 tengo que configurar samba en el servidor openvpn 10.10.10.20?

      Desde ya gracias amigo

      1. Por cierto, si hago ping de la red interna 10.10.10.0/24 hacia la red vpn 10.8.0.0/24 no hay respuesta, pero si hago ping de la red vpn hacia la red interna si hay respuesta.

        ¡Saludos!

        1. Ola,

          Para mí, esto es completamente normal.

          VPN -> LAN:
          Gateway predeterminado: Servidor VPN
          Enrutamiento de la red VPN a la LAN: enrutado

          LAN-> VPN
          Gateway predeterminado: LAN gateway (router ?)
          Enrutamiento de la red VPN a la LAN: no enrutado

          Para el servidor samba, agregue la red IP VPN en la configuración.

          Ex para ti :
          hosts allow = 10.10.10.0/24 10.8.0.0/24 127.0.0.1

          ¡Saludos!

  3. Que tal Fontenay.

    Ya pude resolver el problema, no era necesario la configuración de samba, lo que pasa es que no podía acceder a los recursos compartidos si ponía el nombre del equipo \\name_server\share_name\ pero si pongo la ip del equipo si puedo acceder \\10.10.10.30\share_name\.

    Gracias por todo.

    ¡Saludos!

  4. Muy bien gracias.

    ¿Qué DNS se utiliza para los clientes OpenVPN?

    Ver esta linea de la configuración :
    push “dhcp-option DNS 8.8.8.8”

    Éstos son los DNS Google. Debe utilizar los que están en su LAN (probablemente su puerta de enlace).

    Ronan

    1. Tengo otro detalle, cuando conecto dos clientes me proporciona la misma ip en los dos equipos y eso provoca que no pueda ver los recursos compartidos, tengo que desconectar un equipo para poder accesar a los recursos compartidos.

      ¡Saludos!

      1. Ola,

        Trate de limpiar el fichero ipp.txt. Este fichero se utiliza para asignar IP siempre mismos clientes. También puede desactivar esta función comentando la línea “ifconfig-piscina-persisten ipp.txt”.

        ¡Saludos!

  5. 19 pass in on $vpn_if from any to any

    # service pf start
    Enabling pfNo ALTQ support in kernel
    ALTQ related functions disabled
    /etc/pf.conf:19: syntax error
    pfctl: Syntax error in config file: pf rules not loaded
    No ALTQ support in kernel
    ALTQ related functions disabled

    ———————————————

    19 pass in on $vpn_if inet from any to any

    # service pf start
    Enabling pfNo ALTQ support in kernel
    ALTQ related functions disabled
    No ALTQ support in kernel
    ALTQ related functions disabled

    1. Newbie,

      Replace your line :

      19 : pass in on $vpn_if inet from any to any

      By :

      19 : pass in on $vpn_if from any to any

      🙂

Leave a Reply

Your email address will not be published. Required fields are marked *