Problème de routage
Le problème ici est que les deux profils de connexion VPN sont dans un réseau 10, qui est officiellement livré avec un /8
alias. 255.0.0.0
alias. 0xff000000
masque de réseau. Ainsi, lorsque vous établissez les deux connexions VPN en même temps, vous n'avez qu'une seule destination dans la table de routage de la connexion 10-réseau . Et cette entrée de routage acheminera tous les 10.x.x.x le trafic vers la première connexion ppp établie, à l'exception des adresses IP locales et distantes dans la deuxième connexion 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
Solution de routage
La solution consiste à ajouter manuellement les entrées souhaitées dans la table de routage. Il n'est pas nécessaire de supprimer l'entrée 10, il suffit d'ajouter de nouvelles entrées de route. Tant que les nouvelles entrées de route ajoutées adressent un sous-réseau plus petit, l'entrée aura la préférence. En d'autres termes, lorsque le sous-réseau a une valeur plus élevée, l'entrée sera préférée. /X
numéro. Par exemple /24
est plus élevé que /8
donc un 10/24
aura la préférence sur une entrée 10/8
entrée de routage. En fait, ajoutez une nouvelle entrée de routage après avoir établi la deuxième connexion VPN, comme : $ sudo /sbin/route -n add -net 10.0.2.0/24 -interface ppp1
Solution d'automatisation
C'est lourd et peut introduire des erreurs lorsqu'il faut entrer la route manuellement après avoir établi la connexion VPN secondaire. Heureusement, il existe une solution intégrée dans le démon ppp qui utilise if-up
comme vous pouvez le lire dans $ man pppd
. Chaque fois qu'une connexion ppp (VPN) est établie qui utilise un adressage IPv4, un script ( /etc/ppp/if-up
) est appelé, où vous pouvez exécuter vos règles/commandes personnalisées, c'est-à-dire des crochets.
Le script ci-dessous est abondamment commenté et devrait être explicite.
Votre Mac ne dispose peut-être pas de ce script ( $ ls /etc/ppp
). Dans ce cas, créez-le ( $ sudo touch /etc/ppp/ip-up
) avec e x les permissions 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=$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
Avec les remerciements pour l'idée de jalbrecht2000 à http://hints.macworld.com/article.php?story=20030906232648318