настройка tun0 через скрипт с использованием nmcli

Фон

Для работы мне приходится использовать Appgate SDP, который является VPN-клиентом. Он создает устройство tun0, добавляет кучу (более 300) маршрутов и должен настроить DNS-серверы с поиском домена для tun0. В какой-то момент на прошлой неделе конфигурация DNS перестала работать, и я больше не мог сопоставлять имена серверов с IP-адресами. Я подозреваю, что это могло быть вызвано каким-то обновлением, NetworkManager или исправленным, но я действительно не знаю.

Технически это проблема, которую должен решить Appgate, однако в то же время, если я смогу написать сценарий решения, которое будет для меня лучше всего на данном этапе.

Частичное решение

Используя небольшой скрипт с nmcli, я смог настроить DNS и домен поиска на tun0, и мое разрешение DNS снова заработало.

      nmcli con mod tun0 ipv4.dns "10.x.x.x"
ncmli con mod tun0 ip4.dns-search "~example.com"

Единственная проблема с этим подходом заключается в том, что все маршруты, добавленные Appgate, исчезают после запуска моего скрипта. Я проверил журналы Appgate и обнаружил, что это приложение используетспособ добавить те маршруты, которые не сохраняются после запуска.

Вопрос

Есть ли способ проанализировать и повторно добавить эти маршруты с помощью?

      # Setup DNS for tun0
nmcli con mod tun0 ipv4.dns "10.x.x.x"
ncmli con mod tun0 ip4.dns-search "~example.com"
# Code to parse the current tun0 routes into memory

. . . 

# Add routes for tun0
for route in "${routes[@]}"
do
    nmcli con mod tun0 +ipv4.routes "route"
done

Бонус

На данный момент каждый раз, когда я использую Appgate, мне действительно нужен только Tun0. Могу ли я просто маршрутизировать весь трафик через tun0 при подключении к Appgate, а затем сбросить всю маршрутизацию на eth0 при выходе из Appgate?

1 ответ

Гугл-фу, несколько проб и ошибок и мне удалось получить работающий скрипт

Как отметила Esa в своем комментарии, мой сценарий должен получить маршруты перед добавлением DNS, потому что, если я добавлю DNS, он удалит все маршруты.

Итак, после некоторого тестирования я пришел к следующему:

      # Code to parse the current tun0 routes into memory
rts=($(route | grep tun0 | awk '{print $1}'))

# Setup DNS for tun0
nmcli con mod tun0 ipv4.dns "10.x.x.x"
ncmli con mod tun0 ip4.dns-search "~example.com"

# Add routes for tun0
for i in "${rts[@]}"
do
    nmcli con mod tun0 +ipv4.routes "$i/32"
done

# Reapply rules
nmcli device reapply tun0
Другие вопросы по тегам