informatica:linux:openvpn
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
informatica:linux:openvpn [2013/07/03 09:02] – external edit 127.0.0.1 | informatica:linux:openvpn [2018/01/05 10:18] – [Procedimiento generico] javi | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== OpenVPN ====== | + | ======= OpenVPN |
- | ===== Routed VPN ===== | + | ====== Routed VPN ====== |
+ | |||
+ | ===== Instalacion y configuracion | ||
Esta configuración nos permite conectividad punto a punto entre los distintos clientes y el servidor VPN | Esta configuración nos permite conectividad punto a punto entre los distintos clientes y el servidor VPN | ||
Line 13: | Line 15: | ||
sudo aptitude install openvpn openssl | sudo aptitude install openvpn openssl | ||
- | 2. Generate the master Certificate Authority (CA) certificate & key | + | 2. Creamos el archivo vacío donde se almacenarán los certificados revocados: |
+ | |||
+ | sudo touch / | ||
+ | |||
+ | 3. Generate the master Certificate Authority (CA) certificate & key | ||
< | < | ||
- | cd /usr/share/ | + | cd / |
sudo su | sudo su | ||
vim vars | vim vars | ||
Line 26: | Line 32: | ||
export KEY_PROVINCE=" | export KEY_PROVINCE=" | ||
export KEY_CITY=" | export KEY_CITY=" | ||
- | export KEY_ORG=" | + | export KEY_ORG=" |
- | export KEY_EMAIL=" | + | export KEY_EMAIL=" |
- | export KEY_EMAIL=info@jamgo.es | + | |
export KEY_CN=cn | export KEY_CN=cn | ||
export KEY_NAME=name | export KEY_NAME=name | ||
Line 41: | Line 46: | ||
</ | </ | ||
- | 3. Generate certificate & key for server | + | Error: |
- | | + | < |
+ | grep: / | ||
+ | pkitool: KEY_CONFIG (set by the ./vars script) is pointing to the wrong | ||
+ | version of openssl.cnf: | ||
+ | The correct version should have a comment that says: easy-rsa version 2.x | ||
+ | </ | ||
- | 4. Generate certificates & keys for a client | + | Solución: |
- | | + | |
- | 5. Generate Diffie Hellman parameters | + | Y volver a intentar: |
- | ./build-dh | + | ./build-ca |
+ | |||
+ | Error: | ||
- | 6. Mover llaves | + | < |
+ | unable to find ' | ||
+ | problems making Certificate Request | ||
+ | 1995425184: | ||
+ | </ | ||
- | 6.1 Servidor (todavia como root) | + | Desconozco el motivo, pero se resuleve editando las lineas en las que se le asigna un valor a la variable " |
- | | + | |
- | | + | |
- | cp keys/ca.crt / | + | Y cambio los valores: |
- | 6.2 Cliente | + | < |
+ | # anyadido | ||
+ | # | ||
+ | subjectAltName=email: | ||
+ | </ | ||
+ | |||
+ | Y volver a intentar: | ||
+ | |||
+ | | ||
+ | |||
+ | Ahora a contestar las preguntas y pulsar " | ||
< | < | ||
- | cd / | + | Country Name (2 letter code) [US]:ES |
- | tar cvfj client1.tar.bz2 client1.key client1.crt ca.crt | + | State or Province Name (full name) [BC]: |
- | scp client1.tar.bz2 | + | Locality Name (eg, city) [Barcelona]: |
- | rm -fr client1.tar.bz2 | + | Organization Name (eg, company) [Contrabanda FM]: |
+ | Organizational Unit Name (eg, section) [Tècnica]: | ||
+ | Common Name (eg, your name or your server' | ||
+ | Name [EasyRSA]: | ||
+ | Email Address [admin@example.com]: | ||
</ | </ | ||
- | On the client machine: | + | 4. Generar claves del servidor (solo 1 vez) |
+ | |||
+ | 4.1. Generate certificate & key for server | ||
+ | |||
+ | ./ | ||
+ | |||
+ | Ahora a contestar las preguntas y pulsar " | ||
< | < | ||
- | sudo su | + | Country Name (2 letter code) [US]:ES |
- | mkdir / | + | State or Province Name (full name) [BC]: |
- | mv / | + | Locality Name (eg, city) [Barcelona]: |
- | cd / | + | Organization Name (eg, company) [Contrabanda FM]: |
- | tar xvfj client1.tar.bz2 | + | Organizational Unit Name (eg, section) [Tècnica]: |
+ | Common Name (eg, your name or your server' | ||
+ | Name [EasyRSA]: | ||
+ | Email Address [admin@example.com]: | ||
</ | </ | ||
- | 7. Creating configuration files for server and clients | + | Las contraseñas las dejo en blanco: |
- | 7.1 Server | + | A challenge password []: |
+ | An optional company name []: | ||
+ | |||
+ | Y aquí hay que pulsar " | ||
+ | |||
+ | Sign the certificate? | ||
+ | | ||
+ | |||
+ | 4.2. Generate Diffie Hellman parameters | ||
+ | |||
+ | **OJO**: puede llevar mucho tiempo, unos 15 minutos: | ||
+ | |||
+ | ./ | ||
+ | |||
+ | 4.3. Mover llaves (revisar, no estoy seguro de que haya que mover en lugar de copiar nada): | ||
+ | |||
+ | mkdir -p / | ||
+ | cp keys/ca.crt / | ||
+ | |||
+ | 5. Crear el archivo de configuracion: | ||
< | < | ||
Line 90: | Line 148: | ||
vim server.conf | vim server.conf | ||
</ | </ | ||
+ | |||
+ | Yo lo he dejado asi: | ||
< | < | ||
- | ... | + | port 443 |
- | ca / | + | proto tcp |
- | cert / | + | dev tun |
- | key / | + | ca / |
- | dh / | + | cert / |
+ | key / | ||
+ | dh / | ||
+ | server 172.16.0.0 255.255.255.0 | ||
+ | ifconfig-pool-persist ipp.txt | ||
+ | push "route 10.0.0.0 255.255.255.0" | ||
+ | push "route 10.7.13.0 255.255.255.0" | ||
+ | push " | ||
+ | push " | ||
client-to-client | client-to-client | ||
+ | keepalive 10 120 | ||
+ | comp-lzo | ||
user nobody | user nobody | ||
group nogroup | group nogroup | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | status openvpn-status.log | ||
+ | log / | ||
+ | log-append | ||
+ | verb 3 | ||
crl-verify / | crl-verify / | ||
- | ... | ||
</ | </ | ||
- | Creamos | + | Hay muchas opciones (" |
- | sudo touch / | + | ===== Generar claves de los clientes ===== |
- | 7.2 Client | ||
- | On the client machine: | + | |
+ | ==== Procedimiento generico ==== | ||
+ | |||
+ | Para cada nuevo cliente se tiene que repetir este proceso completo. | ||
+ | |||
+ | 1. Convertirse en root y entrar en el directorio: | ||
+ | |||
+ | sudo su | ||
+ | cd / | ||
+ | |||
+ | 2. Reiniciar vars: | ||
+ | |||
+ | source ./vars | ||
+ | |||
+ | 3. Generar certificado y llave para el cliente " | ||
+ | |||
+ | ./build-key client1 | ||
+ | |||
+ | Contestar las preguntas, presionar " | ||
< | < | ||
- | cd / | + | Country Name (2 letter code) [US]:ES |
- | cp client.conf / | + | State or Province Name (full name) [BC]: |
- | vim / | + | Locality Name (eg, city) [Barcelona]: |
+ | Organization Name (eg, company) [Contrabanda FM]: | ||
+ | Organizational Unit Name (eg, section) [Tècnica]: | ||
+ | Common Name (eg, your name or your server' | ||
+ | Name [EasyRSA]: | ||
+ | Email Address [admin@example.com]: | ||
</ | </ | ||
+ | |||
+ | Las contraseñas las dejo en blanco: | ||
+ | |||
+ | A challenge password []: | ||
+ | An optional company name []: | ||
+ | |||
+ | Y aquí hay que pulsar “y” más “enter”: | ||
+ | |||
+ | Sign the certificate? | ||
+ | 1 out of 1 certificate requests certified, commit? [y/n] | ||
+ | |||
+ | |||
+ | 4. Mover las llaves y copiar la clave publica de la CA a un directorio: | ||
+ | |||
+ | mkdir -p ~/ | ||
+ | user=" | ||
+ | |||
+ | 5. Crear el archivo de configuracion del cliente (hay un ejemplo en / | ||
+ | ): | ||
+ | |||
+ | user=" | ||
+ | | ||
+ | Con el siguiente contenido: | ||
+ | |||
+ | 5.1.1. Si queremos que el cliente OpenVPN tome el servidor DNS del servidor VPN: | ||
< | < | ||
- | ... | + | client |
- | ca / | + | dev tun |
- | cert / | + | proto tcp |
- | key / | + | remote vpn.example.com 443 |
- | remote vpn.server.com 1194 | + | resolv-retry infinite |
- | ... | + | nobind |
+ | user nobody | ||
+ | group nogroup | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | ca / | ||
+ | cert / | ||
+ | key / | ||
+ | ns-cert-type | ||
+ | comp-lzo | ||
+ | verb 4 | ||
+ | log / | ||
+ | log-append | ||
+ | |||
+ | # If we want to get DNS server from VPN | ||
+ | script-security 2 | ||
+ | up / | ||
+ | down / | ||
</ | </ | ||
- | **IMPORTANTE**: | + | En este caso el servidor |
- | 8. Starting up the VPN and testing for initial connectivity | + | 5.1.2. Crear el script para tomar el servidor DNS al conectarse al servidor |
- | 8.1 (Opcional) Abrir el puerto y protocolo definido en el archivo de configuración en el firewall (UDP 1194 por defecto) | + | vim ~/ |
+ | |||
+ | Con el siguiente contenido: | ||
- | 8.2 (Opcional) Si se quiere que los clientes puedan acceder además de al servidor VPN a otras máquinas que estén en la red privada (LAN) de éste, y si el gateway de esa LAN NO es el servidor VPN, en el servidor VPN hay que activar masquerade. | + | < |
+ | # | ||
+ | # | ||
+ | # Parses DHCP options from openvpn to update resolv.conf | ||
+ | # To use set as ' | ||
+ | # up / | ||
+ | # down / | ||
+ | # | ||
+ | # Used snippets of resolvconf script by Thomas Hood and Chris Hanson. | ||
+ | # Licensed under the GNU GPL. See / | ||
+ | # | ||
+ | # Example envs set from openvpn: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | [ -x / | ||
+ | [ " | ||
+ | [ " | ||
+ | |||
+ | split_into_parts() | ||
+ | { | ||
+ | part1=" | ||
+ | part2=" | ||
+ | part3=" | ||
+ | } | ||
+ | |||
+ | case " | ||
+ | up) | ||
+ | NMSRVRS="" | ||
+ | SRCHS="" | ||
+ | for optionvarname in ${!foreign_option_*} ; do | ||
+ | option=" | ||
+ | echo " | ||
+ | split_into_parts $option | ||
+ | if [ " | ||
+ | if [ " | ||
+ | NMSRVRS=" | ||
+ | elif [ " | ||
+ | SRCHS=" | ||
+ | fi | ||
+ | fi | ||
+ | done | ||
+ | R="" | ||
+ | [ " | ||
+ | " | ||
+ | for NS in $NMSRVRS ; do | ||
+ | R=" | ||
+ | " | ||
+ | done | ||
+ | echo -n " | ||
+ | ;; | ||
+ | down) | ||
+ | / | ||
+ | ;; | ||
+ | esac | ||
+ | </ | ||
+ | |||
+ | 5.1.1. Si **NO** queremos que el cliente OpenVPN tome el servidor DNS del servidor VPN: | ||
+ | |||
+ | < | ||
+ | client | ||
+ | dev tun | ||
+ | proto tcp | ||
+ | remote vpn.example.com 443 | ||
+ | resolv-retry infinite | ||
+ | nobind | ||
+ | user nobody | ||
+ | group nogroup | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | ca / | ||
+ | cert / | ||
+ | key / | ||
+ | ns-cert-type server | ||
+ | comp-lzo | ||
+ | verb 4 | ||
+ | log / | ||
+ | log-append | ||
+ | </ | ||
+ | |||
+ | En este caso el servidor se llama " | ||
+ | |||
+ | 6. Empaquetar todos los archivos para poder transferirlos comodamente al cliente: | ||
+ | |||
+ | cd ~/ | ||
+ | tar cvfj ~/ | ||
+ | |||
+ | 7. Copiar del servidor al cliente el archivo comprimido y luego eliminarlo: | ||
+ | |||
+ | scp ~/ | ||
+ | rm -fr ~/openvpn | ||
+ | |||
+ | 8. (Maquina cliente) Asumo que ya esta instalado el paquete " | ||
+ | |||
+ | sudo mv / | ||
+ | sudo tar xvfj client1.tar.bz2 | ||
+ | sudo chown root:root client1* | ||
+ | sudo chmod 0700 client1 | ||
+ | sudo chmod 0600 client1/* | ||
+ | |||
+ | Si optamos por tomar las DNS del servidor VPN: | ||
+ | |||
+ | sudo chmod 0700 update-resolv-conf | ||
+ | |||
+ | 9. Starting up the VPN and testing for initial connectivity | ||
+ | |||
+ | 9.1 (Opcional) Abrir el puerto y protocolo definido en el archivo de configuración en el firewall (UDP 1194 por defecto) | ||
+ | |||
+ | 9.2 (Opcional) Si se quiere que los clientes puedan acceder además de al servidor VPN a otras máquinas que estén en la red privada (LAN) de éste, y si el gateway de esa LAN NO es el servidor VPN, en el servidor VPN hay que activar masquerade. | ||
+ | |||
+ | 9.3 Arrancar (mismo comando en el servidor y en todos los clientes): | ||
+ | |||
+ | sudo service openvpn start | ||
+ | |||
+ | ==== Migracion a openvpn >=2.3 ==== | ||
- | 8.3 Arrancar: | + | **IMPORTANTE**: |
- | sudo /etc/init.d/openvpn | + | 0. Instalar paquete, ahora ya NO es parte de openvpn |
+ | sudo aptitude install easy-rsa | ||
+ | 1. **IMPORTANTE**: | ||
+ | cd / | ||
+ | mv keys keys.old | ||
+ | sudo mv / | ||
- | ===== Acceso desde el cliente a la LAN del servidor VPN (gateway de la LAN y servidor VPN son distintos) ===== | + | ====== Acceso desde el cliente a la LAN del servidor VPN (gateway de la LAN y servidor VPN son distintos) |
Queremos que desde el cliente se llegue no solo al servidor VPN, sino también a la LAN de ese servidor. La particularidad es que el servidor VPN es una máquina virtual detrás de un Hipervisor KVM. Además el Hipervisor KVM está detrás de un router ADSL casero en modo DMZ, de forma que TODO el tráfico lo redirige hacia el Hipervisor. | Queremos que desde el cliente se llegue no solo al servidor VPN, sino también a la LAN de ese servidor. La particularidad es que el servidor VPN es una máquina virtual detrás de un Hipervisor KVM. Además el Hipervisor KVM está detrás de un router ADSL casero en modo DMZ, de forma que TODO el tráfico lo redirige hacia el Hipervisor. | ||
Line 295: | Line 558: | ||
ping 10.0.0.12 | ping 10.0.0.12 | ||
- | ===== Configurar DNS en el cliente ===== | + | ====== Configurar DNS en el cliente |
Para que el cliente reciba del servidor VPN parámetros como servidor DNS o Dominio de búsqueda necesitamos configuración tanto en el servidor como en el cliente, y un script en el lado cliente. Si la máquina es Windows el script no es necesario. | Para que el cliente reciba del servidor VPN parámetros como servidor DNS o Dominio de búsqueda necesitamos configuración tanto en el servidor como en el cliente, y un script en el lado cliente. Si la máquina es Windows el script no es necesario. | ||
Line 418: | Line 681: | ||
</ | </ | ||
- | ===== Revocar certificados ===== | + | ====== Revocar certificados |
http:// | http:// | ||
Line 475: | Line 738: | ||
</ | </ | ||
- | ====== Receta 2 (parcialmente incompleta) ====== | + | ======= Receta 2 (parcialmente incompleta) |
- | ===== Instalar OPENVPN ===== | + | ====== Instalar OPENVPN |
# apt-get install openvpn | # apt-get install openvpn | ||
- | ===== Crear certificados ===== | + | ====== Crear certificados |
- | ==== Generar la CA para firmar los certificados ==== | + | ===== Generar la CA para firmar los certificados |
Copiamos el directorio de ejemplo en la carpeta de configuración de OpenVPN: | Copiamos el directorio de ejemplo en la carpeta de configuración de OpenVPN: | ||
#/ | #/ | ||
Line 528: | Line 791: | ||
-rw-r--r-- 1 root root 3 Nov 6 21:20 serial | -rw-r--r-- 1 root root 3 Nov 6 21:20 serial | ||
- | ===== Creación de Certificado y llaves para Servidor ===== | + | ====== Creación de Certificado y llaves para Servidor |
Line 577: | Line 840: | ||
- | ===== Generar Certificado para los clientes ===== | + | ====== Generar Certificado para los clientes |
./build-key client1 | ./build-key client1 | ||
Line 607: | Line 870: | ||
Please enter the following ' | Please enter the following ' | ||
to be sent with your certificate request | to be sent with your certificate request | ||
- | A challenge password []:fermin99 | + | A challenge password []:mysecretpassword |
An optional company name []: | An optional company name []: | ||
Using configuration from / | Using configuration from / | ||
Line 630: | Line 893: | ||
- | ===== Generate Diffie Hellman parameters ===== | + | ====== Generate Diffie Hellman parameters |
Diffie Hellman parameters must be generated for the OpenVPN server. On Linux/ | Diffie Hellman parameters must be generated for the OpenVPN server. On Linux/ | ||
Line 636: | Line 899: | ||
- | ===== Ficheros de configuración ===== | + | ====== Ficheros de configuración |
donquixot:/ | donquixot:/ | ||
- | ===== Habilitar para máquinas virtuales contenedores openvz ===== | + | ====== Habilitar para máquinas virtuales contenedores openvz |
vzctl set 101 --devnodes net/tun:rw --save | vzctl set 101 --devnodes net/tun:rw --save | ||
Line 698: | Line 961: | ||
Y la ruta 10.8.0.0/24 -> 10.139.67.103 (ip del servidor vpn) | Y la ruta 10.8.0.0/24 -> 10.139.67.103 (ip del servidor vpn) | ||
- | ===== Autenticación LDAP ===== | + | ====== Autenticación LDAP ====== |
/ | / |
informatica/linux/openvpn.txt · Last modified: 2018/01/05 14:20 by javi