Cómo configurar OpenVPN en Ubuntu 16.04
Continuando con la serie de artículos sobre VPN, ahora instalamos OpenVPN en Ubuntu 16.04 Server. OpenVPN es un software VPN muy conocido de la empresa del mismo nombre. Es algo más difícil de configurar que otro software VPN, por lo que nos concentraremos en la configuración del lado del servidor y en la creación de archivos ovpn en este artículo. Esta guía está diseñada para ejecutarse como usuario no root. Si ha iniciado sesión como root, primero comenzamos agregando el usuario no root.
adduser newuser
Luego le damos derechos de sudo e inicia sesión como usuario
usermod -aG sudo newuser su newuser
Puede omitir esos pasos si ya tiene usuarios no root, y lo más probable es que los tenga.
Ahora conectado como newuser o cualquier otro usuario que no sea root, instalaremos openvpn
sudo apt-get install openvpn easy-rsa
Certificados de servidor y cliente
En primer lugar, necesitamos crear dir para la autoridad de certificación y editar el archivo vars es
make-cadir ~/openvpn-ca cd ~/openvpn-ca nano vars
Encuentra las líneas que tienen export KEY_ en ellas y hazlas así
export KEY_COUNTRY="US" export KEY_PROVINCE="New York State" export KEY_CITY="New York City" export KEY_ORG="Linoxide" export KEY_EMAIL="newuser@example.com" export KEY_OU="LinuxGeeks"
También hay una línea llamada KEY_NAME en el mismo archivo, por lo que solo pondremos allí servidor como nombre
export KEY_NAME="server"
Después de guardar el archivo vars, lo siguiente que escribimos es:
source vars
que debería darle la nota sobre el comando ./clean-all. Por lo tanto, escribámoslo para asegurarnos de que estamos ejecutando el entorno limpio.
./clean-all
Ahora pasamos a la parte de creación de certificados:
./build-ca
Le hará algunas preguntas, pero dado que editamos vars, los nuevos valores predeterminados deberían estar bien para que pueda presionar enter en todos los aspectos.
./build-key-server server
Ingrese nuevamente, pero no en todos los aspectos esta vez. Cuando te pida que pongas la contraseña, no la pongas y al final presiona para crear el certificado. El siguiente es diffie hellman:
./build-dh
Tomará algún tiempo, así que tenga paciencia. A continuación, necesitamos la tecla ta.key para mejorar la seguridad del servidor.
openvpn --genkey --secret keys/ta.key
Y luego copiamos todos los archivos relevantes al directorio / etc / openvpn, ya que openvpn solo lee desde allí.
cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Hemos terminado con el certificado del servidor, por lo que ahora creamos un certificado para client100.
cd ~/openvpn-ca source vars ./build-key client100
Los valores predeterminados de origen están bien nuevamente, así que simplemente presione enter yy al final.
Configuración del servidor
Para el punto de partida copiamos la configuración de muestra con el siguiente comando:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
A continuación, necesitamos editar server.conf para que nuestro servidor funcione. Puede usar cualquier editor, pero usaremos el comando sed ahora
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
Cosas que hicimos aquí: configuramos todo el tráfico para que pase por OpenVPN, configuramos el grupo y el usuario en nogroup y nadie, y configuramos los registros para que vayan a /etc/openvpn/openvpn.log. A continuación, necesitamos un cambio más sobre ta.key:
sudo nano /etc/openvpn/server.conf
Y encuentra esta linea
tls-auth ta.key 0 # This file is secret key-direction 0
Eso es todo para server.conf, a continuación, debemos habilitar el reenvío de paquetes para nuestro servidor Ubuntu
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf sudo sysctl -p
Las reglas de ufw también deben cambiarse para permitir el enmascaramiento, así que agregue esto al principio, antes de * filter
sección
sudo nano /etc/ufw/before.rules
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES
Tenga en cuenta que es muy probable que tenga que cambiar la parte eth0 para reflejar el nombre real de su interfaz de red orientada a Internet, así que lo resalté. A continuación, habilitamos el reenvío en ufw como lo hicimos en sysctl:
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Configuramos el firewall
sudo ufw allow 1194/udp sudo ufw disable sudo ufw enable
sudo systemctl start openvpn@server sudo systemctl status -l openvpn
Si todo salió bien, habilite el inicio de openvpn en el arranque
sudo systemctl enable openvpn@server
Configuración del cliente
Con la parte de configuración del cliente, usamos certificados que ya hicimos, por ejemplo, client100. También necesitamos archivos de configuración del cliente
mkdir -p ~/client-configs/files chmod 700 ~/client-configs/files cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
El archivo que copiamos es de configuración básica, por lo tanto, debe editarse.
nano ~/client-configs/base.conf
Y luego busque una línea que diga remoto. Cámbielo también y apunte a la dirección IP de su servidor de FQDN.
remote your.serv.ipor.fqdn 1194
Guárdelo, ya que el resto de la edición lo haremos con los comandos sed y echo:
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf sudo echo key-direction 1 >> ~/client-configs/base.conf
Entonces, ¿qué hicimos aquí? Primero configuramos usuario y grupo en nadie y no grupo. Luego comentamos las rutas de certificados, ya que integraremos certificados en línea en el archivo .ovpn. Luego agregamos el parámetro key-direction 1.
Script para hacer configuraciones de cliente
Para incrustar la configuración del cliente, las claves y los certificados en un solo archivo .ovpn para facilitar la transferencia a los clientes remotos, usaremos un script simple. Hagamos
nano ~/client-configs/make_config.sh
Y luego pegar este pastebin allí. Después de guardar esto, necesitamos agregar el bit ejecutable, así que ejecute este comando:
chmod +x ~/client-configs/make_config.sh
Entonces podemos crear fácilmente archivos de configuración
cd ~/client-configs ./make_config.sh client100 ls ~/client-configs/files
La sintaxis del comando es fácil, debe estar dentro del directorio client-configs y ejecutar el comando con el argumento que dice el nombre del cliente que creó anteriormente. Si necesita más clientes, cree más certificados de cliente con otro nombre y vuelva a ejecutar este comando. Si todo salió bien, en el directorio client-configs / files debería haber archivo (s) ovpn. Debe transferirlos a su cliente o clientes y conectarse. Lo haré con scp, desde mi computadora portátil Fedora hice un comando así
scp newuser@ip.of.my.srvr:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
Desde allí, puede cargarlo en un teléfono Android con un cable USB o AirDroid, o en Windows VM o en una Mac. Para el administrador de red de Linux, necesitaría desensamblar el archivo
Conclusión
Se trata de la configuración del servidor, a continuación tendríamos que conectarnos desde varios clientes. Para Android podemos usar OpenVPN Connect, para Mac Tunnelblick, para Windows hay OpenVPN del sitio oficial y para Linux hay un administrador de red. En algunos de los siguientes artículos cubriremos todo esto.