0103 — VPN
Были проблемы с корпоративным VPN: подключаешь один — получаешь доступ к одной части ресурсов, подключаешь второй — к другой. При этом доступ к первой части отваливается.
Решение
Оказывается, всё довольно просто. Нужно в момент подключения к VPN посмотреть, нет ли там маршрута, который пускает весь трафик через себя, и если есть — удалить его.
Проверка маршрутов:
ip route
Чтобы удалить маршрут, используйте команду:
ip route delete <маршрут>
Автоматизация
Делать это вручную глупо, поэтому лучше написать небольшой скрипт, который будет делать это автоматически. Его даже запускать вручную не надо. Используем встроенную функциональность NetworkManager.
-
В каталоге
/etc/NetworkManager/dispatcher.d/создайте файл с расширением.conf. -
Сделайте этот файл исполняемым. Что?
.confи исполняемый? Да!sudo chmod +x /etc/NetworkManager/dispatcher.d/<script>.conf -
Добавьте код скрипта.
Код скрипта должен корректно обрабатывать два входных параметра:
-
Название сетевого интерфейса.
-
Статус подключения. Тут нужно всего лишь обработать события
vpn-upиvpn-down.
У меня получилось так:
#!/bin/bash IFACE="$1" STATUS="$2" if [ "$IFACE" = "tun0" ] ; then case "$STATUS" in vpn-up) ip route delete default via <VPN-IP> dev tun0 proto static metric 50 ip route add <IP> via <VPN-IP> dev tun0 proto static metric 50 ;; vpn-down) ip route delete <IP> via <VPN-IP> dev tun0 proto static metric 50 ;; *) ;; esac fi -
Всё. Теперь при включении VPN NetworkManager будет удалять маршрут default, который направляет весь трафик через VPN, и добавлять маршруты для выбранных IP-адресов. А при отключении VPN, наоборот, будет удалять добавленные маршруты.