Il semble que vous connaissiez les IP du réseau et le domaine auxquels vous vous connectez.
Un moyen d'y parvenir serait de n'utiliser le VPN qu'en fonction de l'IP/du domaine que vous demandez.
Vous pouvez le faire en utilisant le VPN intégré de macOS avec "Send all traffic through VPN" (envoyer tout le trafic via le VPN) non vérifié et définir des itinéraires.
Par exemple, si votre serveur FTP se trouve à 1.2.3.4, cette commande s'assurera que le trafic vers 1.2.3.4 utilisera le VPN pour accéder à l'internet :
/sbin/route -n add -net 1.2.3.4/32 -interface ppp0
Remarque : vous pouvez dresser la liste de tous les itinéraires existants à l'aide de netstat -rn
.
Et si vous avez des IP dynamiques derrière le DNS, vous pouvez utiliser dig
pour récupérer l'IP et l'ajouter aux routes (10.11.12.13 est l'adresse IP que vous avez obtenue du VPN).
dig -b 10.11.12.13 +noall +answer ftp.company.example
Il existe également un mécanisme d'accrochage qui examinera les éléments suivants /etc/ppp/ip-up
et l'exécuter, ce qui permet d'automatiser le processus ci-dessus. Ce script bash script peut créer des routes et rechercher des adresses IP pour vous automatiquement.
Il s'agit d'un exemple approximatif pour donner une idée de ce qui peut être fait :
#!/bin/bash
# change name to whatever your VPN is named in Pref system
vpn_name="Company vpn"
read_args() {
# Example: ppp0 0 10.239.163.212 192.0.2.1 192.168.2.1
iface=$1; shift 3
remote_ip=$1; shift
}
log() {
echo "$@" >&2
echo "$@" 2>/dev/null >> /tmp/vpn-split-tunnel.log
}
get_vpn_iface() {
/usr/sbin/scutil --nc status "$vpn_name" | grep InterfaceName | awk '{ print $3 }'
}
lookup_ips() {
if [ "$MAC_OS_MAJOR_VER" -ge 11 ]; then
xargs dig -b $remote_ip +noall +answer | grep 'IN\s\s*A' | awk '{ print $NF "/32" }'
else
xargs dig +noall +answer | grep 'IN\s\s*A' | awk '{ print $NF "/32" }'
fi
}
init() {
echo "" 2>/dev/null > /tmp/vpn-split-tunnel.log
read_args "$@"
vpn_iface=$(get_vpn_iface)
if [[ "$iface" != "$vpn_iface" && -z "$DEBUG" ]]; then
log "Interface $iface is not for the \"$vpn_name\" connection on interface $vpn_iface"
exit
fi
}
init "$@"
cmd=(/sbin/route -n add -net "1.2.3.4/32" -interface "$iface")
log ">> ${cmd[@]}"
log $(${cmd[@]} 2>&1)