Sie sind auf Seite 1von 5

VPN sobre FreeBSD usando IPSEC y cifrando con RACOON:

Autor: Iucki
Fecha: 08/10/2002
Lo que en este artculo os propongo es algo que a simple vista parece algo bastante complicado y que debe llevar mucho tiempo y requerir unas configuraciones mas
complicadas de lo que realmente es.
Que es VPN? Una vpn es una red privada virtual, y en que consiste?, consiste en unir dos redes locales como las que podemos tener en el colegio, en casa o en la
oficina entre s. Las ventajas que esto tiene son innumerables ya que estamos haciendo de dos redes fisicamente separadas (ambas conectadas a internet) una
estructura de red estable. Podemos tener un servidor en cada una de nuestras oficinas y compartir archivos entre equipos o imprimir en impresoras de red como si de
una sola red se tratase,etc..
Qu necesitamos para montar una VPN?, necesitamos dos redes, dos maquinas que den acceso a internet a cada una de esas dos redes y un poco de tiempo para
seguir con cuidado este artculo, el resultado est garantizado.
La estructura bsicamente es la siguiente:
---RED1---
|
IPPRIVADA1
{MAKINA1}
IPPUBLICA1
|
ENLACEINTERNET
|
INTERNET
|
ENLACE2INTERNET
|
IPPUBLICA2
{MAKINA2}
IPPRIVADA2
|
---RED2---
Ejemplo:
--192.168.0.0/24--
|
192.168.0.1
{MAKINA1}
213.172.100.101
|
213.172.100.100
|
INTERNET
|
80.32.152.28
|
80.32.152.29
{MAKINA2}
192.168.1.1
|
--192.168.1.0/24--
La configuracin que vamos a ver es para nuestra MAKINA1, la configuracin de la MKINA2 ser = pero cambiando los valores de las IPS y de las redes.
Paso Nmero 1: Aadir opciones a nuestro kernel:
# ee /usr/src/sys/i386/conf/KERNEL
Aadimos:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPDIVERT
pseudo-device gif 4
options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG
compilamos nuestro Kernel:
# cd /usr/src/sys/i386/conf
# config -r KERNEL
# cd ../../compile/KERNEL
# make depend && make && make install
Paso Nmero 2: Configuracin de la red
# ee /etc/rc.conf
gateway_enable="YES"
defaultrouter="enlace1" #escribimos nuestra IP de enlace. Ejemplo: defaultrouter="213.172.100.100"
ifconfig_fxp0="inet publica1 netmask mascaraPublica1" #publica1 es una IP. Ejemplo:ifconfig_fxp0="inet 213.172.100.101 netmask 255.255.255.240"
ifconfig_fxp1="inet privada1 netmask 255.255.255.0" #privada1 es una IP. Ejemplo:ifconfig_fxp1="inet 192.168.0.1 netmask 255.255.255.0"
router_flags="-q"
router="/sbin/routed"
router_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_logging="YES"
firewall_type="/etc/firewall.rules"
natd_enable="YES"
natd_interface="fxp0" #Es el dispositivo conectado a internet.
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"
gif_interfaces="gif0"
gifconfig_gif0="publica1 publica2" # Ejemplo: gifconfig_gif0="213.172.100.101 80.32.152.29""
network_interfaces="fxp1 fxp0 lo0 gif0" #aqui poneis los que tengais mas lo0 y gif0
ifconfig_gif0="privada1 privada2 netmask 255.255.255.255" #ejemplo: ifconfig_gif0="192.168.0.2 192.168.1.2 netmask 255.255.255.255"
static_routes="vpn"
route_vpn="-net red2/24 privada2" #ejemplo:route_vpn="-net 192.168.1.0 192.168.1.2"
vemos que es necesario tener dos dispositivos de red conectados,uno a Internet y el otro a una red privada. He aadido al kernel las opciones necesarias para activar
el firewall y el natd ya que para poder movernos entre las dos redes necesitamos que nuestros dos servidores sean las puertas de enlace de las mkinas de sus redes
respectivamente. Tambin podemos ver que gif0 es el pseudo-dispositivo que utilizamos para enviar informacin a travs de la vpn, o sea, el dispositivo por el
que viaja la informacin a traves de la VPN.
Paso Nmero 3: Firewall
Es necesario dar acceso a ambas redes desde ambas redes.
# ee /etc/firewall.rules
-f flush
add divert natd all from any to any via fxp1
add allow all from red1/24 to red2/24 #ejemplo: add allow all from 192.168.0.0/24 to 192.168.1.0/24
add allow all from red2/24 to red1/24 #ejemplo: add allow all from 192.168.1.0/24 to 192.168.0.0/24
#....dems reglas....
add allow icmp from any to any out icmptypes 8
add allow icmp from any to any out icmptypes 0
add deny icmp from any to any in icmptypes 8
add deny icmp from any to any out icmptypes 0
#....ms reglas...
add pass all from any to any
add allow all from any to any
Paso Nmero4: Establecimiento del tunel ipsec
# ee /etc/ipsec.conf
flush;
spdflush;
spdadd red1/24 red2/24 any -P out ipsec esp/tunnel/publica1-publica2/require; #ejemplo:spdadd 192.168.0.0/24 192.168.1.0/24 any -P out ipsec esp/tunnel/213.172.100.101-80.32.152.29/require;
spdadd red2/24 red1/24 any -P in ipsec esp/tunnel/publica2-publica1/require; #ejemplo:spdadd 192.168.1.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/80.32.152.29-213.172.100.101/require;
Paso Nmero 5:Cifrado del tunel con Racoon
Racoon es lo que vamos a usar para cifrar toda la informacin que viaja por nuestro tunel.
# cd /usr/ports/security/racoon && make install clean
Configuracin de racoon, archivo: /usr/local/etc/racoon/racoon.conf, teneis un ejemplo a seguir en /usr/local/etc/racoon/racoon.conf.dist. Yo el racoon.conf que
uso es el siguiente:
path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
path certificate "/usr/local/etc/cert" ;
log debug;
log notify;
remote anonymous
{
exchange_mode main, aggressive;
doi ipsec_doi;
situation identity_only;
nonce_size 16;
lifetime time 1 hour; # sec,min,hour
initial_contact on;
support_mip6 on;
proposal_check obey; # obey, strict or claim
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 2 ;
}
}
sainfo anonymous
{
pfs_group 2;
lifetime time 1 hour;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1;
compression_algorithm deflate ;
}
Editamos el archivo en el que van las claves que utiliza el algoritmo 3des para cifrar nuestros datos:
# ee psk.txt
publica2 clave_bastante_larga #ejemplo:80.32.152.29 eldemonio.org
publica1 clave_bastante_larga #ejemplo:213.172.100.101 eldemonio.org
Salimos y guardamos, es importante que en vuestro archivo de claves metais las claves para la red a la que quereis conectar y las claves necesarias para que se
conecten a vuestra red.Tambin es necesario que para que racoon pueda leer este archivo cambieis los permisos de este mismo a 400:
# chmod 400 /usr/local/etc/racoon/psk.txt
en Nuestro servidor2 las claves en psk.txt sern:
publica1 clave_bastante_larga #ejemplo:213.172.100.101 eldemonio.org
publica2 clave_bastante_larga #ejemplo:80.32.152.29 eldemonio.org
Script de arranque para racoon:
# ee /usr/local/etc/rc.d/racoon.sh
#!/bin/sh
if [ -x /usr/local/sbin/racoon ]; then
echo -n "racoon "
/usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.conf
fi
Salimos y guardamos:
# chmod 755 /usr/local/etc/rc.d/racoon.sh
(Ya solo queda reiniciar esta mkina). Ahora hay que hacer lo mismo en la otra mkina y reiniciar ambas.
Montar VPN entre ms de dos puntos
Si en lugar de unir 2 redes entre s lo que quereis es unir 3 redes, o una mkina con 2 redes distintas tendrais que hacer estas modificaciones: Imaginemos que
nuestra RED1 la queremos unir ahora tambin a una RED3, de modo que el esquema sera:
---RED1---
|
IPPRIVADA1
{MAKINA1}
IPPUBLICA1
|
ENLACEINTERNET
|
INTERNET _ _ _ _ _ _ _ _ _ _ _ _ _
| |
ENLACE2INTERNET ENLACE3INTERNET
| |
IPPUBLICA2 IPPUBLICA3 (62.36.241.32)
{MAKINA2} {MAKINA3} {MAKINA2}
IPPRIVADA2 IPPRIVADA3 (192.168.2.1)
| |
---RED2--- ---RED3---
Partiendo de la configuracon que ya hemos hecho para unir las redes 1 y 2 vamos a ir viendo que cambios habra que hacer para aadir nuevos tneles.
# ee /etc/rc.conf
gateway_enable="YES"
defaultrouter="enlace1" #escribimos nuestra IP de enlace. Ejemplo: defaultrouter="213.172.100.100"
ifconfig_fxp0="inet publica1 netmask mascaraPublica1" #publica1 es una IP. Ejemplo:ifconfig_fxp0="inet 213.172.100.101 netmask 255.255.255.240"
ifconfig_fxp1="inet privada1 netmask 255.255.255.0" #privada1 es una IP. Ejemplo:ifconfig_fxp1="inet 192.168.0.1 netmask 255.255.255.0"
router_flags="-q"
router="/sbin/routed"
router_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_logging="YES"
firewall_type="/etc/firewall.rules"
natd_enable="YES"
natd_interface="fxp0" #Es el dispositivo conectado a internet.
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"
gif_interfaces="gif0 gif1"
gifconfig_gif0="publica1 publica2" # Ejemplo: gifconfig_gif0="213.172.100.101 80.32.152.29"
gifconfig_gif1="publica1 publica3" # Ejemplo: gifconfig_gif1="213.172.100.101 62.36.241.32"
network_interfaces="fxp1 fxp0 lo0 gif0 gif1" #aqui poneis los que tengais mas lo0 y gif0
ifconfig_gif0="privada1 privada2 netmask 255.255.255.255" #ejemplo: ifconfig_gif0="192.168.0.2 192.168.1.2 netmask 255.255.255.255"
ifconfig_gif1="privada1 privada3 netmask 255.255.255.255" #ejemplo: ifconfig_gif1="192.168.0.3 192.168.2.2 netmask 255.255.255.255"
static_routes="vpn vpn2"
route_vpn="-net red2/24 privada2" #ejemplo:route_vpn="-net 192.168.1.0 192.168.1.2"
route_vpn2="-net red3/24 privada3" #ejemplo:route_vpn2="-net 192.168.2.0 192.168.2.2"
# ee /etc/firewall.rules
-f flush
add divert natd all from any to any via fxp1
add allow all from red1/24 to red2/24 #ejemplo: add allow all from 192.168.0.0/24 to 192.168.1.0/24
add allow all from red2/24 to red1/24 #ejemplo: add allow all from 192.168.1.0/24 to 192.168.0.0/24
add allow all from red1/24 to red3/24 #ejemplo: add allow all from 192.168.0.0/24 to 192.168.2.0/24
add allow all from red3/24 to red1/24 #ejemplo: add allow all from 192.168.2.0/24 to 192.168.0.0/24
#....dems reglas....
add allow icmp from any to any out icmptypes 8
add allow icmp from any to any out icmptypes 0
add deny icmp from any to any in icmptypes 8
add deny icmp from any to any out icmptypes 0
#....ms reglas...
add pass all from any to any
add allow all from any to any
# ee /etc/ipsec.conf
flush;
spdflush;
spdadd red1/24 red2/24 any -P out ipsec esp/tunnel/publica1-publica2/require; #ejemplo:spdadd 192.168.0.0/24 192.168.1.0/24 any -P out ipsec esp/tunnel/213.172.100.101-80.32.152.29/require;
spdadd red2/24 red1/24 any -P in ipsec esp/tunnel/publica2-publica1/require; #ejemplo:spdadd 192.168.1.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/80.32.152.29-213.172.100.101/require;
spdadd red1/24 red3/24 any -P out ipsec esp/tunnel/publica1-publica3/require; #ejemplo:spdadd 192.168.0.0/24 192.168.2.0/24 any -P out ipsec esp/tunnel/213.172.100.101-62.36.241.32/require;
spdadd red3/24 red1/24 any -P in ipsec esp/tunnel/publica3-publica1/require; #ejemplo:spdadd 192.168.2.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/62.36.241.32-213.172.100.101/require;
publica3 clave_bastante_larga #ejemplo:62.36.241.32 eldemonio.org
publica2 clave_bastante_larga #ejemplo:80.32.152.29 eldemonio.org
publica1 clave_bastante_larga #ejemplo:213.172.100.101 eldemonio.org
Por cada nuevo tunel que abrais deberes usar una nueva ipvirtual de vuestra subred, si quisisemos crear uno nuevo por ejemplo para unir nuestra red con la red
192.168.3.0/24 cuya IP-Publica es 213.172.58.25 diramos:
gifconfig_gif2="213.172.100.101 213.172.58.25"
ifconfig_gif2="192.168.0.3 192.168.3.2 netmask 255.255.255.255"
Curiosidades
Esta configuracin ha sido probada en una mkina que tiene establecidos distintos tneles, 2 tuneles con otros servidores FreeBSD que funcionan perfectamente, un
tunel con un router zyxell zywall 100, un tunel con un router DrayTeck Vigor2600 y un ltimo tunel con una mkina windows XP que tiene cargado el siguiente
cliente de vpn sentinel que se puede descargar gratutamente de esta url:
http://www.ssh.com/products/sentinel/eval/
Los routers funcionan bien aunque an con algunas anomalas que segn vaya solucionando os ir comentando, es importante que si montais VPN con algun router
dentro de la configuracin de este especifiqueis que el sistema de seguridad sobre IPSEC es High (ESP) 3DES.Y que el algoritmo de autentifiacion es SHA1.
Tambin tendreis que especificar el "Key Group" en alguno y en este campo pondramos dh2. Todos estos valores los especificamos previamente en
/usr/local/etc/racoon/racoon.conf. Ya sabeis todos que para cualquier duda o sugerencia podeis escribirme a mi direccin de correo electrnico
lucki@comocabras.com ,espero que os haya sido de utilidad, con el tiempo ir aadiendo cosas y lo profundizar todo un poco ms.
Por cierto, este artculo es propiedad de eldemonio.org ,me gustara que si alguien lo sube a su web por favor nos avise, para as poder informarle de cambios y
mejoras en l

Das könnte Ihnen auch gefallen