Openvpn

instalar
apt-get install openvpn easy-rsa
copiamos el easy-rsa a openvpn, a veces me ha pasado que ya estaba hecho,:
mkdir /etc/openvpn/easy-rsa/ cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
Modificamos el vars con nuestro entorno. Después ya creamos certificados:
source vars ./clean-all ./build-ca

Cerficicados de servidor

./build-key-server nombreserver
Diffie Hellman, hay que hacerlo si o si:
./build-dh
ahora copiamos todo lo que acabamos de generar en /etc/openvpn
cp nombreserver.crt nombreserver.key ca.crt dh2048.pem /etc/openvpn

Certificados de cliente

Dentro de /etc/openvpn/easy-rsa/
source vars
no hacemos el clean-all
./build-key nombrecliente
Ahora yo para crear los archivos para el cliente, en vez de copiarme todo esto, uso un script que existe . Este funciona con un archivo Default.txt, que tiene la configuración basica y después el script introduce los certificados inline. el Default.txt viene a ser algo como esto:

client
dev tun
proto udp
remote direccionippublica 1194
resolv-retry infinite
nobind
persist-key 
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1 
cipher AES-128-CBC
comp-lzo
verb 1
mute 20  

Una vez tenemos esto, ejecutamos:
./MakeOPVN.sh
nos pide el nombre de cliente que hemos usado antes para hacer las certificaciones de cliente nombrecliente , una vez hacemos esto tendremos un nombrecliente.conf que luego podemos usar en los clientes.
En ubuntu con copiar ese archivo en /etc/openvpn es suficiente, reinicar openvpn antes.

Iniciar y estatus Servidor

/etc/init.d/openvpn restart
Con esto reiniciamos el openvpn , como ya tenemos un server.conf en la carpeta /etc/openvpn ya se ejecuta, si hay más .conf también los ejecuta todos.
Para ver el estado
systemctl status openvpn*.service o bien
service openvpn status o
service openvpn@nombreserver status

Cliente en macosx

Instalamos tunnelblick y copiamos el nombrecliente.conf en el equipo, una vez instalado tunnelblick clicamos en el archivo de conf y debería de tirar.

Direcciones ip staticas

Por defecto se usa dhcp en el servidor pero yo en el archivo de configuración del servidor uso la opción de poder dar direcciones ip staticas
client-config-dir ccd
Por eso tengo una carpeta ccd en la base y ahí tengo un archivo con el nombre del cliente, y en ese archivo ponemos:
ifconfig-push 10.8.0.2 10.8.0.1
siendo la primera dirección la queremos y la segunda el gw.