Edytowana odpowiedź
(Re) poprawione na podstawie prawie poprawionej odpowiedzi wszystkich (@elmart, @ user26312, ja). W skrypcie nie powinny być potrzebne zmiany:
#!/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
Spraw, aby plik, który wstawiłeś, był wykonywalny i uruchom (po połączeniu z VPN) za pomocą sudo. Zanim skrypt dokona jakichkolwiek zmian, sprawdza twoją domyślną trasę i dlatego zna twoją aktualną bramę i interfejs.
Stara odpowiedź
Nie jest to kompletne rozwiązanie, po każdej konfiguracji połączenia VPN musisz wykonać dwie rzeczy wysokiego poziomu:
- Będziemy musieli ustawić interfejs tunelu na
ppp0
- Ponów domyślne trasy (ponieważ 1. domyślnie ustawia niewłaściwą domyślną bramę, podzielony tunel powinien dalej działać poprawnie)
Utwórz plik o nazwie scutil-forti
na przykład
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
Ponów trasy bramy, więc utwórz kolejny plik, routes-forti
z (pamiętaj o liniach z określonymi ustawieniami dla swojej sieci):
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
teraz wykonaj,
$ cat scutil-forti |sudo scutil ; bash routes-forti
State:/Network/Service/forticlientsslvpn/IPv4
klucz można zacząć od momentu uruchomienia tunelu VPN i jest on usuwany po usunięciu tunelu VPN. Trasy tak naprawdę nie różnią się od tego, jakie powinny być.Przerobiłem rozwiązanie @ hbogert na łatwiejszy do zarządzania pojedynczy skrypt:
Zakłada się, że używasz interfejsu en0 i domyślnej bramy 192.168.1.1. Jeśli nie, zastąp je odpowiednimi wartościami. Jeśli ich nie znasz, wpisz,
route get www.google.com
aby je zdobyć. Następnie:chmod u+x fix-vpn
).sudo fix-vpn
) zaraz po podłączeniu do VPN.Próbowałem i działa. Jak powiedziałem, jest to tylko przeróbka poprzedniego rozwiązania. Właśnie zamieściłem to jako osobną odpowiedź, ponieważ nie miałem wystarczająco dużo miejsca w komentarzu.
BTW, myślałem również, że może to zostać uwzględnione w
/etc/ppp/ip-up
skrypcie, aby był automatycznie wykonywany podczas łączenia. Ale z jakiegoś powodu to nie działa w ten sposób. Jeśli ktoś może to wyjaśnić / poprawić, proszę.źródło
Byłem w stanie użyć starszej wersji Forticlient i potwierdziłem, że działa!
Oto link do tego na moim Dropbox:
https://www.dropbox.com/s/p43ssvp0gusmzeq/forticlientsslvpn_macosx_4.0.2297.dmg?dl=0
źródło
AKTUALIZACJA: Pobieranie i instalowanie najnowszej i oficjalnej wersji 5.4.1 dla Mac OS X rozwiązuje wszystkie problemy w Mac OS X El Capitan.
Jak opisano na forum fortinet, należy pobrać najnowszą (jeszcze nieopublikowaną) wersję FortiClient, aby naprawić problemy w Mac OS X El Capitan:
https://www.dropbox.com/sh/cb0j4pxw1f8nq84/AABHzZW1bpx1VjzYAmiK00S9a?dl=0
To było dla mnie najłatwiejsze rozwiązanie.
źródło
Trochę poprawiam odpowiedź @ elmart (myślę).
W ten sposób skrypt nie musi być edytowany (a zmiana interfejsów nie powinna stanowić problemu).
xargs
służy do usuwania białych znaków.Dodałem również (choć nie wiem, czy to poprawa):
Do samego początku skryptu przypominającego ludziom o używaniu sudo.
źródło
route get
poleceniu, aby wyeliminować zależność od DNS.$ netstat -rn
aby uzyskać bramę i interfejs.Wziąłem skrypt hbogerta i zapakowałem go w Applescript dla siebie i innego pracownika, jest dostępny tutaj: https://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Connection.app.zip?dl=0
Wystarczy połączyć się z VPN, a następnie uruchomić aplikację i wpisać hasło administratora (wymagane do sudo). UWAGA: MUSISZ BYĆ ZAPISANY W / Aplikacje /
źródło
Rozwiązałem problem, zmieniając konfigurację ustawień DNS, tak aby korzystały z serwerów Google DNS przed serwerami dostarczonymi przez FortiClient. Niestety, należy to zrobić po każdym ponownym połączeniu.
Szczegółowe informacje na ten temat można znaleźć tutaj .
źródło
W mojej bieżącej wersji OS X (Sierra 10.12.6) i FortiClient 5.6.1 wydaje się, że jeśli ServerAddresses ma więcej niż 2 adresy, wówczas połączenie „set” niczego nie utrzymuje (jeśli „dostaniesz”, nic nie będzie zaktualizowane). Aby obejść ten problem, postanowiłem zachować tylko pierwszy adres DNS FortiClient i połączyć go z moim publicznym adresem DNS (8.8.8.8).
Ponadto sugerowałbym automatyczne uruchomienie skryptu bash na FortiClient connect: można to zrobić, eksportując skrypt konfiguracyjny FortiClient, a następnie importując go ponownie
Pełny przewodnik poniżej:
1 / Utwórz następujący skrypt bash i zapisz go gdzieś (w moim przypadku był w
~/bashscripts/update-forticlient-dns.sh
) i nie zapomnij zastąpić<FIRST IP ADDRESS FOR FORTICLIENT DNS>
przez wynikiem,scutil --dns | grep "nameserver\[0\]"
gdy połączenie FortiClient jest aktywne2 / Uruchom FortiClient, a następnie przejdź do Preferencje > Ogólne i kliknij przycisk Kopia zapasowa , która wyeksportuje konfigurację FortiClient do pliku
3 / W tym pliku zlokalizuj i edytuj / forticlient_configuration / vpn / sslvpn / connection / connection [name = "YOUR CONNECTION"] / on_connect / script / script node i wywołaj w nim swój skrypt:
4 / Wróć do konsoli FortiClient, kliknij blokadę w lewym dolnym rogu, a następnie przejdź do Preferencji > Ogólne i kliknij przycisk Przywróć : zlokalizuj zaktualizowany plik konfiguracyjny i to wszystko, konfiguracja DNS będzie aktualizowana na bieżąco za każdym razem, gdy połączyć się z VPN.
źródło