Отредактированный ответ
(Re) улучшил ответ почти всех остальных (@elmart, @ user26312, я). Редактирование не должно быть необходимо в скрипте:
#!/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
Сделайте файл, в который вы его поместите, исполняемым и выполните (после соединения с VPN) с помощью sudo. Прежде чем скрипт выполнит какие-либо изменения, он смотрит на ваш текущий маршрут по умолчанию и поэтому знает ваш текущий шлюз и интерфейс.
Старый ответ
Не полное решение, вам нужно будет выполнить следующие два высокоуровневых действия после каждой настройки VPN-подключения:
- Мы должны установить интерфейс туннеля на
ppp0
- Повторите маршруты по умолчанию (потому что 1. неявно устанавливает неверный шлюз по умолчанию, разделенный туннель должен все еще работать правильно в дальнейшем)
scutil-forti
Например, создайте файл с именем
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
Повторите маршруты шлюза, поэтому создайте другой файл routes-forti
с помощью (обратите внимание на строки с конкретными настройками для вашей сети):
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
сейчас, выполни,
$ cat scutil-forti |sudo scutil ; bash routes-forti
State:/Network/Service/forticlientsslvpn/IPv4
ключ существует для запуска после запуска VPN-туннеля и удаляется при удалении VPN-туннеля отключается. Маршруты на самом деле не отличаются от того, какими они должны быть.Я переделал решение @ hbogert в более управляемый отдельный скрипт:
Это предполагает, что вы используете интерфейс en0 и шлюз 192.168.1.1 по умолчанию. Если нет, замените их соответствующими значениями. Если вы их не знаете, напечатайте,
route get www.google.com
чтобы получить их. Потом:chmod u+x fix-vpn
).sudo fix-vpn
) сразу после подключения к vpn.Я попробовал это, и это работает. Как я уже сказал, это просто переделка предыдущего решения. Я просто опубликовал это как отдельный ответ, потому что у меня не было достаточно места в комментарии.
Кстати, я также думал, что это может быть включено в
/etc/ppp/ip-up
сценарий, чтобы он автоматически выполнялся при подключении. Но по некоторым причинам, это не работает таким образом. Если кто-то может объяснить / улучшить это, пожалуйста, сделайте.источник
Я смог использовать старую версию Forticlient и подтвердил, что она работает!
Вот ссылка на него на моем Dropbox:
https://www.dropbox.com/s/p43ssvp0gusmzeq/forticlientsslvpn_macosx_4.0.2297.dmg?dl=0
источник
ОБНОВЛЕНИЕ: Загрузка и установка новейшей и официальной версии 5.4.1 для Mac OS X устраняет все проблемы в Mac OS X El Capitan.
Как описано на форуме fortinet, необходимо скачать новейшую (пока неопубликованную) версию FortiClient, чтобы исправить проблемы в Mac OS X El Capitan:
https://www.dropbox.com/sh/cb0j4pxw1f8nq84/AABHzZW1bpx1VjzYAmiK00S9a?dl=0
Это было самое простое решение для меня.
источник
Немного улучшив ответ @ elmart (я думаю).
Таким образом, скрипт не нужно редактировать (и смена интерфейсов не должна быть проблемой).
xargs
используется для удаления пробелов.Я также добавил (хотя я не знаю, если это улучшение):
До самого начала сценарий напоминал людям об использовании sudo.
источник
route get
команде, чтобы устранить зависимость от DNS.$ netstat -rn
чтобы получить шлюз и интерфейс.Я взял скрипт hbogert и обернул его в Applescript для себя и другого сотрудника, он доступен здесь: https://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Connection.app.zip?dl=0
Просто подключитесь к VPN, затем запустите приложение и введите свой пароль администратора (необходим для sudo). ПРИМЕЧАНИЕ: ДОЛЖНЫ БЫТЬ СОХРАНЕНЫ / Приложения /
источник
Я решил эту проблему для себя, переконфигурировав настройки DNS для использования DNS-серверов Google до тех, которые были предоставлены FortiClient. К сожалению, это должно быть сделано после каждого повторного подключения.
Подробности об этом можно найти здесь .
источник
В моей текущей версии OS X (Sierra 10.12.6) и FortiClient 5.6.1 кажется, что если ServerAddresses имеет более 2 адресов, то вызов «set» ничего не сохраняется (если вы «получаете», ничего не будет обновлено). Чтобы обойти это, я решил оставить только первый DNS-адрес FortiClient и объединить его с моим общедоступным DNS-адресом (8.8.8.8).
Более того, я бы предложил автоматически запускать скрипт bash на FortiClient connect: это можно сделать, экспортировав скрипт конфигурации FortiClient, а затем повторно импортировав его.
Полное руководство ниже:
1 / Создайте следующий скрипт bash и сохраните его где-нибудь (в моем случае это было в
~/bashscripts/update-forticlient-dns.sh
) и не забудьте заменить<FIRST IP ADDRESS FOR FORTICLIENT DNS>
его результатом,scutil --dns | grep "nameserver\[0\]"
пока ваше соединение FortiClient установлено2 / Запустите FortiClient, затем перейдите в « Настройки» > « Основные» и нажмите кнопку « Резервное копирование» , чтобы экспортировать конфигурацию FortiClient в файл.
3 / В этом файле найдите и отредактируйте узел / forticlient_configuration / vpn / sslvpn / connections / connection [name = "YOUR CONNECTION"] / on_connect / script / script и вызовите в нем свой скрипт:
4 / Вернитесь в консоль FortiClient, нажмите на замок в левом нижнем углу, затем перейдите в « Настройки» > « Общие» и нажмите кнопку « Восстановить» : найдите обновленный файл конфигурации, и все, ваша DNS-конфигурация будет обновляться на лету каждый раз, когда вы подключиться к VPN.
источник