Cómo interconectar dos redes inaccesibles entre sí ya sea porque ambas están detrás de NAT o por consecuencias de las nuevas e incomprensibles «políticas de seguridad» de la empresa.
Ejecuta lo siguiente:
# cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
# cd /etc/openvpn/easy-rsa/2.0
# . ./vars
# ./clean-all
# ./build-caEl servidor debería ser una máquina con una IP pública. Si no es posible, se puede hacer en una máquina con IP privada pero habrá que redireccionar el puerto desde el router. El servidor va a rutar tráfico entre la red remota y redes locales que son accesibles para él pero no lo son remotamente.
# ./build-key-server servidor # ./build-dh
Todo esto genera los siguientes ficheros en el directorio keys:
ca.crtca.keyservidor.crtservidor.keydh1024.pemLos puedes mover a /etc/openvpn por comodidad.
Cada cliente que quieras conectar a la red remota debe tener una clave y un certificado para autenticarse contra el servidor. Necesitas repetir esto por cada cliente que quieras incorporar a la VPN.
# ./build-key marcial
Esto genera los siguientes ficheros:
marcial.crtmarcial.keyTienes que copiar esos dos ficheros y el ca.crt al directorio /etc/openvpn del cliente. Intenta que sea de la forma más segura posible.
En el servidor crea el fichero /etc/openvpn/mivpn.conf y escribe esto:
port 1194 proto udp dev tun persist-tun ca ca.crt cert servidor.crt key servidor.key dh dh1024.pem server 10.1.1.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-to-client keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 4
Y en los clientes:
tls-client client dev tun proto udp remote server.example.org # El nombre público del servidor float # Solo si el servidor tiene IP dinámica resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert marcial.crt # Aquí tu certificado key marcial.key # y clave comp-lzo verb 4
Ejecuta lo siguiente en ambas máquinas:
# /etc/init.d/openvpn start
Si todo ha ido bien tendrás una nueva interfaz de red llamada tun0 con una IP en la red 10.1.1.0/24:
# ip addr show tun0 10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 link/[65534] inet 10.1.1.10 peer 10.1.1.9/32 scope global tun0
Y tendrás también rutas nuevas para usar ese enlace:
# ip route show 10.1.1.0/24 via 10.1.1.9 dev tun0 10.1.1.9 dev tun0 proto kernel scope link src 10.1.1.10 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.4 metric 1 default via 192.168.1.1 dev eth0 proto static
Y deberías poder acceder desde el cliente al servidor y viceversa usando las direcciones privadas.
Imagina que el servidor tiene acceso a la red 120.20.30.0/24 pero que es inaccesible desde el exterior de la empresa. Veamos cómo conseguir que los clientes de la VPN puedan llegar a las máquinas de esa red utilizando el servidor de la VPN como router. Todos los cambios que se indican a continuación se realizan sólo en el servidor.
En fichero de configuración del servidor (el que escribiste antes) añade esto:
push "route 120.20.30.0 255.255.255.0"
Esa ruta se añadirá automáticamente a los clientes para que ruten el tráfico hacia esa red a través de la VPN.
Y por último es necesario activar el reenvío (forwarding) y el NAT, dado que el servidor actuará como router entre la red privada y una red pública. Para ello escribe lo siguiente en /etc/sysctl.conf:
net.ipv4.ip_forward=1
Y añade la siguiente regla iptables:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Para que esta regla se aplique automáticamente aunque se reinicie el servidor modifica /etc/network/interfaces para que quede así:
iface eth0 inet static
[…]
pre-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEComo ya he comentado esto es para un servidor con IP fija, pero si es dinámica los cambios son mínimos.
Para más información sobre configuración de iptables y rutado puedes mirar estas recetas:
No olvides reiniciar el servicio en el servidor y en el cliente:
# /etc/init.d/openvpn restart
Comments
¿ Type ether ?
Hola David! pues yo personalmente prefiero VTUN, sólo por una cosa y es porque tiene la opción de comportarse como una ethernet (type: ether) por lo demás openvpn es mejor, ya que admite cifrado y tiene clientes windows, pero que no tenga la opción de comportarse como una ethernet es una puñeta a la hora de enrutar con Iptable e Iproute. Si sabes como ponerlo en opción ethernet cuentame
¡¡ Saludos y gracias por la receta
!!
http://www.improvisa.com
Se puede
Según dice el propio howto de openvpn
«If you are using Ethernet bridging, you must use
server-bridgeanddev tapinstead ofserveranddev tun.»pero TAP tiene el grave problema de que envía por el túnel todo el tráfico broadcast y multicast Ethernet, a menos que hagas el filtrado correspondiente, lo que requiere afinar más la config que con TUN.
Saludos
No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.
No me referia a Bridge
Hola de nuevo david, no me referia a meter la VPN en un bridge sino a poder utilziarla como tipo ethernet, es decir si pones ifconfig que salga esto:
tun0 Link encap:Ethernet HWaddr 00:ff:1e:61:f1:e7 inet addr:172.0.0.1 Bcast:172.0.0.3 Mask:255.255.255.252 inet6 addr: fe80::2ff:1eff:fe61:f1e7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:163 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:35723 (34.8 KiB) TX bytes:468 (468.0 B)Si pones ifconfig con Openvpn te saldrá tipo Point to point o tipo tun, ¿podrias pegarme a ver que sale?
Mil gracias
http://www.improvisa.com
Igual me equivoco, pero
Igual me equivoco, pero yo diría que estás hablando justo de Ethernet bridging. Cuando pueda lo probaré y te cuento. Y si lo pruebas tú, pues también nos lo cuentas, por favor, y salimos de dudas.
No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.
Ok
Ok me pongo en cuanto tenga un hueco a probar y como funcione cambio de vtun a openvpn
Mil gracias de nuevo y si lo sacas antes que yo avisa
http://www.improvisa.com