problema de enrutamiento
El problema aquí es que ambos perfiles de conexión VPN están en una red 10, que oficialmente viene con una máscara de red de /8
a.k.a. 255.0.0.0
a.k.a. 0xff000000
. Entonces, al establecer ambas conexiones VPN a la vez, terminas con solo un destino en la tabla de enrutamiento para el 10-network . Y esa entrada de enrutamiento enrutará todo el tráfico 10.x.x.x a la primera conexión ppp establecida, a excepción de las direcciones IP locales y remotas 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 extender manualmente la tabla de enrutamiento con las entradas deseadas. No es necesario eliminar la entrada 10, solo agregar nuevas entradas de ruta. Siempre que las entradas de ruta recién agregadas se dirijan a una subred más pequeña, la entrada tendrá preferencia. Lea esto como: cuando la subred tiene un número /X
más alto. Por ejemplo, /24
es mayor que /8
, por lo que una entrada 10/24
tendrá preferencia sobre una entrada de enrutamiento 10/8
. Básicamente, agregue 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 ingresar la ruta manualmente después de haber establecido la conexión VPN secundaria. Afortunadamente, hay una solución integrada en el daemon ppp que utiliza if-up
, como se puede leer en $ man pppd
. Cada vez que se establece una conexión ppp (VPN) que utiliza direccionamiento IPv4, se llama a un script ( /etc/ppp/if-up
) donde puede ejecutar sus reglas / comandos personalizados a.k.a. hooks.
El siguiente script está ampliamente comentado y debería explicarse por sí mismo.
Es posible que tu Mac no tenga este script ( $ ls /etc/ppp
). En ese caso, créelo ( $ sudo touch /etc/ppp/ip-up
) con e x permisos imputables ( $ 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" >> /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 por la idea de jalbrecht2000 en enlace