настройка 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