Cuestiones de enrutamiento
El problema aquí es que ambos perfiles de conexión VPN están en una red 10, que oficialmente viene con un /8
también conocido como 255.0.0.0
también conocido como 0xff000000
máscara de red. Por lo tanto, al establecer ambas conexiones VPN a la vez, se termina con un solo destino en la tabla de enrutamiento para la 10-redes . Y esa entrada de enrutamiento dirigirá todas las 10.x.x.x el tráfico a la primera conexión ppp establecida, excepto las direcciones IP local y remota en la segunda conexión ppp.
$ netstat -nr -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.0.1 UGSc 10 0 en0
default 10.0.1.1 UGScI 0 0 ppp0
default 10.0.0.1 UGScI 0 0 ppp1
10 ppp0 USc 1 0 ppp0
10.0.0.1 10.0.0.12 UHr 2 0 ppp1
10.0.1.1 10.0.1.200 UHr 1 0 ppp0
Solución de enrutamiento
La solución es ampliar manualmente la tabla de enrutamiento con las entradas deseadas. No es necesario eliminar la entrada 10, sólo añadir nuevas entradas de ruta. Mientras las nuevas entradas de ruta añadidas se dirijan a una subred más pequeña, la entrada tendrá preferencia. Léase esto como: cuando la subred tiene un mayor /X
número. Por ejemplo /24
es mayor que /8
por lo que un 10/24
tendrá preferencia sobre una entrada 10/8
entrada de enrutamiento. Básicamente añadir una nueva entrada de enrutamiento después de haber establecido la segunda conexión VPN, como: $ sudo /sbin/route -n add -net 10.0.2.0/24 -interface ppp1
Solución de automatización
Es engorroso y puede introducir errores al tener que introducir la ruta manualmente después de haber establecido la conexión VPN secundaria. Por suerte, hay una solución integrada en el demonio ppp que utiliza if-up
como se puede leer en $ man pppd
. Cada vez que se establece una conexión ppp (VPN) que utiliza el direccionamiento IPv4, un script ( /etc/ppp/if-up
) se llama donde puede ejecutar sus reglas/comandos personalizados, es decir, ganchos.
El script de abajo está ampliamente comentado y debería ser autoexplicativo.
Es posible que su Mac no tenga este script ( $ ls /etc/ppp
). En ese caso créalo ( $ sudo touch /etc/ppp/ip-up
) con e x ualidad de los permisos ( $ sudo chmod +x /etc/ppp/ip-up
).
#!/bin/sh
#
# This script is run by the pppd after the link is established.
# It should be used to add routes, set IP address, etc.
#
# Tested with Mavericks (Mac OS X 10.9)
#
# This script is called with the following arguments:
# Arg Name Example
# $0 Script full location /etc/ppp/ip-up
# $1 Interface name ppp0
# $2 TTY device <blank>
# $3 Speed 0
# $4 Local IP address 10.0.0.200
# $5 Remote IP address 10.0.0.1
# $6 LAN gateway 192.168.0.1
# source for $1-$6 is $ man -P 'less -p " /etc/ppp/ip-up"' pppd
# ppp.log for non english systems do still have an english timestamp
export LC_TIME="C";
# Note: there is no static assignment for ppp0 to PPTP and ppp1 to L2TP
# therefore $1 isn't useful to differentiate VPN networks
# To debug, uncomment the line below
#echo "$(date +%c) : \$5=$5" >> /var/log/ppp.log
# Add your routing table corrections here
# note: 2>&1 will redirect errors to the standard output
case "$5" in
10.0.0.1) OUT=$(exec /sbin/route -n add -net 10.0.0.0/24 -interface "$1" 2>&1) ;;
10.0.1.1) OUT=$(exec /sbin/route -n add -net 10.0.1.0/24 -interface "$1" 2>&1) ;;
esac
# If standard output is not empty, log it prepended by a timestamp
[ ! -z "$OUT" ] && echo "$(date +%c) : $OUT" >>/var/log/ppp.log
# There is automatic route removal on ppp disconnect.
# So no need to manually remove the above route(s) in /etc/ppp/ip-down
Gracias a la idea de jalbrecht2000 en http://hints.macworld.com/article.php?story=20030906232648318