¿Cómo acceder simultáneamente a dispositivos IPv4 en 2 networkinges 10/24 diferentes cuando se utilizan 2 conexiones VPN activas?

Después de que una compañía se vende a diferentes partes, puede terminar con una situación en la que la antigua networking 10.0.0.0/8 se divide en dos o más networkinges diferentes, como 10.0.0.0/24 y 10.0.1.0/24.

Ahora deseo acceder a ambas networkinges al mismo time usando el cliente VPN integrado de Mavericks . Una networking VPN está en L2TP, la otra PPTP.

Sin embargo, solo se puede acceder a los dispositivos en la primera connection VPN establecida, y no a las computadoras en la segunda networking. La única exception es la IP remota (puerta de enlace) de la connection VPN # 2.

¿Cómo puedo arreglar este set y olvidarlo ?

Nota: con configurar y olvidar, quiero decir que no quiero tener pasos adicionales al "marcar" un perfil de connection VPN ya existente.

Problema de routing

El problema aquí es que ambos perfiles de connection VPN están en una networking 10, que oficialmente viene con una /8 aka 255.0.0.0 aka 0xff000000 netmask. Entonces, al establecer ambas conexiones VPN a la vez, terminas con solo un destino en la tabla de routing para la networking 10 . Y esa input de routing encaminará todo el tráfico 10.xxx a la primera connection ppp establecida, a exception de las direcciones IP locales y remotas en la segunda connection 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 routing

La solución es extender manualmente la tabla de routing con las inputs deseadas. No es necesario eliminar la input 10, solo agregar nuevas inputs de ruta. Siempre que las inputs de ruta agregadas recientemente aborder una subnetworking más pequeña, la input tendrá preference. Lea esto como: cuando la subnetworking tiene un número mayor /X Por ejemplo, /24 es más alto que /8 por lo que una input de 10/24 tendrá preference sobre una input de routing 10/8 . Básicamente, agregue una nueva input de routing después de haber establecido la segunda connection VPN, como: $ sudo /sbin/route -n add -net 10.0.2.0/24 -interface ppp1

Solución de automation

Es engorroso y puede introducir errores al tener que ingresar la ruta manualmente después de haber establecido la connection VPN secundaria. Afortunadamente, hay una solución incorporada en el daemon ppp usando if-up , como puede leer en $ man pppd . Cada vez que se establece una connection ppp (VPN) que utiliza el direccionamiento IPv4, se llama a un script ( /etc/ppp/if-up ) donde puede ejecutar sus reglas / commands personalizados, también conocidos como hooks.

El siguiente script se comenta ampliamente y debe ser explicativo por sí mismo.

Es posible que su Mac no tenga este script ( $ ls /etc/ppp ). En ese caso, créelo ( $ sudo touch /etc/ppp/ip-up ) con permissions e xtables ( $ 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 networkingirect 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 http://hints.macworld.com/article.php?story=20030906232648318