10 votes

Comment faire fonctionner forticlient sous OSX El Capitan ?

Le logiciel VPN forticlient présente un problème lorsqu'il utilise l'horizon partagé, depuis OSX El Capitan. Le problème est que les requêtes DNS sont envoyées sur l'interface primaire normale vers le DNS du tunnel VPN.

Comment faire pour que les requêtes DNS soient envoyées sur la bonne interface (c'est-à-dire le tunnel VPN) ?

11voto

hbogert Points 401

Réponse éditée

(Re)amélioration de la réponse améliorée d'à peu près tout le monde (@elmart, @user26312, moi-même). Les modifications ne devraient pas être nécessaires dans le script :

#!/bin/bash
default_line=$(netstat -rn |grep default)
gateway=$(echo $default_line | awk '{print $2}')
interface=$(echo $default_line | awk '{print $6}')
echo $gateway
echo $interface

scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF

route delete default
route delete -ifscope $interface default
route add -ifscope $interface default $gateway
route add -net 0.0.0.0 -interface $interface

Rendez le fichier dans lequel vous mettez ceci, exécutable et exécuté (après connexion avec le VPN) avec sudo. Avant que le script ne fasse des changements, il regarde votre route par défaut actuelle et connaît donc votre passerelle et interface actuelles.


Ancienne réponse

Il ne s'agit pas d'une solution complète, mais vous devrez effectuer les deux opérations de haut niveau suivantes après chaque configuration de connexion VPN :

  1. Nous devrons définir l'interface du tunnel comme étant ppp0
  2. Refaire les routes par défaut (parce que le point 1. définit implicitement la mauvaise passerelle par défaut, le tunnel partagé devrait toujours fonctionner correctement par la suite).

Créez un fichier avec le nom scutil-forti par exemple

d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4

Refaire les routes de la passerelle, donc faire un autre fichier, routes-forti avec (attention aux lignes contenant les paramètres spécifiques de votre réseau) :

sudo route delete default
sudo route delete  -ifscope en0 default # This line depends on your interface
sudo route add -ifscope en0 default 192.168.2.252  # This depends on your normal local gateway.
sudo route add -net 0.0.0.0 -interface en0

maintenant, exécutez,

$ cat scutil-forti |sudo scutil ; bash routes-forti

8voto

sdaau Points 171

J'ai retravaillé la solution de @hbogert en un seul script plus facile à gérer :

#!/bin/bash

scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF

route delete default
route delete -ifscope en0 default
route add -ifscope en0 default 192.168.1.1
route add -net 0.0.0.0 -interface en0

Cela suppose que vous utilisez l'interface en0 et la passerelle par défaut 192.168.1.1. Si ce n'est pas le cas, remplacez-les par vos valeurs correspondantes. Si vous ne les connaissez pas, tapez route get www.google.com pour les obtenir. Alors :

  • Placez-les dans un fichier (par exemple 'fix-vpn') quelque part dans votre chemin.
  • Donnez-lui les droits d'exécution ( chmod u+x fix-vpn ).
  • Exécutez-le avec sudo ( sudo fix-vpn ) juste après s'être connecté au vpn.

Je l'ai essayé et ça marche. Comme je l'ai dit, il s'agit simplement d'un remaniement d'une solution précédente. Je l'ai juste posté comme une réponse séparée parce que je n'avais pas assez d'espace dans un commentaire.

BTW, j'ai également pensé que cela pourrait être inclus dans une /etc/ppp/ip-up script afin qu'il soit exécuté automatiquement lors de la connexion. Mais pour une raison quelconque, cela ne fonctionne pas de cette façon. Si quelqu'un peut expliquer/améliorer cela, faites-le s'il vous plaît.

4voto

mr. brody Points 41

J'ai pu utiliser une ancienne version de Forticlient et j'ai confirmé que cela fonctionne !

Voici le lien vers celui-ci sur ma Dropbox :

https://www.dropbox.com/s/p43ssvp0gusmzeq/forticlientsslvpn_macosx_4.0.2297.dmg?dl=0

1voto

UPDATE : Le téléchargement et l'installation de la version la plus récente et officielle 5.4.1 pour Mac OS X résout tous les problèmes sur Mac OS X El Capitan.

Comme décrit dans le forum fortinet il faut télécharger la dernière version (non encore publiée) du FortiClient pour résoudre les problèmes sur Mac OS X El Capitan :

https://www.dropbox.com/sh/cb0j4pxw1f8nq84/AABHzZW1bpx1VjzYAmiK00S9a?dl=0

C'était la solution la plus simple pour moi.

0voto

Mick Knutson Points 418

Améliorer un peu la réponse de @elmart (je pense).

#!/bin/bash
scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF
ROUTE_OUT=$(route get www.google.com)
GATEWAY=$(echo "${ROUTE_OUT}"|grep gateway|cut -d':' -f2|xargs)
INTERFACE=$(echo "${ROUTE_OUT}"|grep interface|cut -d':' -f2|xargs)

echo "Fixing $INTERFACE with gateway $GATEWAY"

route delete default
route delete -ifscope $INTEFACE default
route add -ifscope $INTERFACE default $GATEWAY
route add -net 0.0.0.0 -interface $INTERFACE

De cette façon, le script n'a pas besoin d'être modifié (et le changement d'interface ne devrait pas être un problème). xargs est utilisé pour supprimer les espaces.

J'ai également ajouté (bien que je ne sache pas si cela constitue une amélioration) :

rootcheck () {
  if [ $(id -u) != "0" ]
    then
      echo "We need sudo permissions to run this script"
      sudo "$0" "$@"  # Modified as suggested below.
      exit $?
  fi
}

rootcheck "$@"

Au tout début du script pour rappeler aux gens d'utiliser sudo.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X