OpenVPN –route-up Отсутствуют переменные окружения при передаче в скрипт

Вопрос или проблема

Я погружаюсь в величие OpenVPN и у меня возникли некоторые проблемы с ручной настройкой таблиц маршрутизации. Я на Arch Linux.

Я знаю, что OpenVPN автоматически обновляет таблицы маршрутизации при подключении, но я хочу написать скрипт, чтобы обновлять их самостоятельно. Я узнал об аргументе OpenVPN “–route-noexec”, чтобы предотвратить автоматические обновления, и аргументе “–route-up”, чтобы передавать соответствующую информацию через переменные окружения в скрипт на мой выбор.

Вот тут я и сталкиваюсь с проблемой. Я ожидаю, что переменные окружения будут переданы в скрипт, что и происходит, но, похоже, я упускаю несколько из них. Особенно ту, которая перечисляет мой удаленный IP-адрес (untrusted/trusted_ip, как я полагаю), из-за чего трудно установить iproute.

Переменные окружения, которые мой скрипт получает, выглядят следующим образом:

dev_type=tun
proto_1=udp
tun_mtu=1500
script_type=route-up
verb=1
local_port_1=1194
dev=tun0
remote_port_1=1194
PWD=/tmp
daemon=0
SHLVL=1
script_context=init
daemon_start_time=1409367799
daemon_pid=927
daemon_log_redirect=0
link_mtu=1500
_=/usr/bin/printenv

Команда, которую я использую для запуска моего VPN, выглядит следующим образом:

sudo openvpn --dev tun --route-noexec --script-security 2 --route-up /tmp/print.sh

И, наконец, скрипт, который я передаю, выглядит следующим образом:

#!/bin/bash
printenv

Кто-нибудь знает, почему мне не хватает переменных? Любая помощь была бы оценена!

Может быть, вам следует также передать опцию “–config”? Например.

openvpn --config /etc/openvpn/vpn.conf --script-security 2 --ifconfig-noexec --route-noexec --up ./netnsvpn-up --route-up ./netnsvpn-up 

А netnsvpn-up будет что-то вроде:

case $script_type in
        up)
                ip netns add vpntun0
                ip netns exec vpntun0 ip link set dev lo up
                ip link set dev "$1" up netns vpntun0 mtu "$2"
env
                ip netns exec vpntun0 ip addr add dev "$1" "${ifconfig_local}"https://serverfault.com/"${ifconfig_netmask:-30}" 
                ;;
        route-up)
                ip netns exec vpntun0 ip route add default via "$route_vpn_gateway"
                ;;
        down)
                ip netns delete vpntun0
                ;;
esac

vpntun0 — это пространство имен.

Ответ или решение

При настройке маршрутизации в OpenVPN на Arch Linux существует возможность использования аргументов --route-noexec и --route-up для запуска собственного скрипта, который будет обновлять таблицы маршрутизации. Однако, как показывает ваш опыт, не все переменные окружения передаются в скрипт, что создает сложности при получении удаленного IP-адреса, необходимого для настройки маршрутизации.

Проблема: Недостаток переменных окружения

При использовании команды, которую вы предоставили для запуска OpenVPN:

sudo openvpn --dev tun --route-noexec --script-security 2 --route-up /tmp/print.sh

вы получаете следующие переменные окружения в вашем скрипте:

dev_type=tun
proto_1=udp
tun_mtu=1500
script_type=route-up
verb=1
local_port_1=1194
dev=tun0
remote_port_1=1194
PWD=/tmp
daemon=0
SHLVL=1
script_context=init
daemon_start_time=1409367799
daemon_pid=927
daemon_log_redirect=0
link_mtu=1500
_=/usr/bin/printenv

Однако переменная, содержащая удаленный IP-адрес (или другие важные параметры), отсутствует.

Причины отсутствия переменных

Данная ситуация может быть вызвана несколькими факторами:

  1. Неправильное использование конфигурационного файла: Как было предложено, использование опции --config может быть необходимым. Убедитесь, что у вас есть конфигурационный файл, который OpenVPN может обработать, и что он содержит все нужные параметры.

    sudo openvpn --config /etc/openvpn/vpn.conf --script-security 2 --route-noexec --route-up /tmp/print.sh
  2. Права на исполнение скрипта: Убедитесь, что ваш скрипт имеет необходимые права на исполнение:

    chmod +x /tmp/print.sh
  3. Настройки безопасности скриптов: Настройка --script-security должна быть достаточной, чтобы разрешить выполнение скриптов, но не стоит забывать, что уровень 2 допускает выполнение скриптов, но может ограничивать доступ к некоторым переменным. Попробуйте временно установить уровень безопасности на 3, чтобы проверить, будет ли это иметь значение:

    sudo openvpn --config /etc/openvpn/vpn.conf --script-security 3 --route-noexec --route-up /tmp/print.sh

Возможное решение

Согласно вашему фрагменту скрипта, вам нужно немного адаптировать его для получения переменной, содержащей информацию о маршруте. Вот пример того, как можно обработать различные типы сценариев:

#!/bin/bash
case $script_type in
    route-up)
        echo "Remote IP: $untrusted_ip"
        echo "VPN Gateway: $route_vpn_gateway"
        # Ваши команды маршрутизации здесь
        ;;
    up)
        # Обработка скрипта up
        ;;
    down)
        # Обработка скрипта down
        ;;
esac

Заключение

Проблема с отсутствием некоторых переменных окружения при использовании --route-up в OpenVPN может быть решена с помощью тщательной настройки команд и прав. Не забудьте проверить конфигурационный файл, права на исполнение скрипта, и при необходимости измените уровень безопасности. Это поможет вам получить доступ к необходимым переменным, включая удаленный IP-адрес и другие параметры для успешного обновления таблицы маршрутизации.

Оцените материал
Добавить комментарий

Капча загружается...