Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Failover GW + OpenVPN

    Russian
    6
    36
    6.0k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      winmasta
      last edited by

      нашел интересную тему https://forum.pfsense.org/index.php?topic=65846.0 там вроде как описано, что можно через файл /etc/devd.conf по событию запускать команды, может кто в курсе как в этот файл добавить инструкцию по перезапуску впн сервера при падении wan ?

      и еще интересная старая тема, https://forum.pfsense.org/index.php?topic=42000.0 там есть строка на php по перезапуску openvpn (я так понял аналог нажатия на кнопку "перезапустьть опенвпн сервер"), но она не работает, может знатоки ее подправят ?

      1 Reply Last reply Reply Quote 0
      • werterW
        werter
        last edited by

        Доброе.
        А если понизить tier (вес) до 2 второму WAN ?

        1 Reply Last reply Reply Quote 0
        • W
          winmasta
          last edited by

          это было сделано изначально

          1 Reply Last reply Reply Quote 0
          • P
            PavelSv
            last edited by

            Тоже спрошу в этой теме:

            Имеем 2х провайдеров в режиме "load balance", OpenVPN cервер  слушающий locallhost. У клиентов прописаны оба внешних адреса.
            Проблема появляется когда у клиента  пропадает интернет и подключение проходит через второй адрес, но ответные пакеты при этом приходят с первого адреса. Помогает "сброс" подключения на стороне сервера. Есть ли какое ни будь решение?

            1 Reply Last reply Reply Quote 0
            • werterW
              werter
              last edited by

              Доброе.

              Проблема появляется когда у клиента  пропадает интернет и подключение проходит через второй адрес

              С чего бы клиенту точно подкл. на 2-ой впн? Пропал инет у клиента, появился, соединение пошло на тот адрес, к-ый указан первым в конфиге клиента.
              Покажите конфиг клиента.

              1 Reply Last reply Reply Quote 0
              • P
                pigbrother
                last edited by

                @werter:

                Доброе.

                Проблема появляется когда у клиента  пропадает интернет и подключение проходит через второй адрес

                С чего бы клиенту точно подкл. на 2-ой впн? Пропал инет у клиента, появился, соединение пошло на тот адрес, к-ый указан первым в конфиге клиента.
                Покажите конфиг клиента.

                @werter:

                Тогда зачем отслеживать падение gw для впн серверов ? Failover для опенвпн настраивается на клиентах. В конфиге клиентов, напр. :

                ...
                remote 1.1.1.1 1194 udp
                remote 2.2.2.2 1195 udp
                remote-random
                ...
                

                Всё. Клиент будет перебирать адреса впн-серверов. Недоступен один - подкл. к другому.

                Может быть из-за  remote-random, который для failover, imho, не нужен?

                1 Reply Last reply Reply Quote 0
                • P
                  PavelSv
                  last edited by

                  Дело не в remote-random. Клиент - чаще всего виндовая машина за роутрером. Теряется инет, но связь то до роутера остаётся. Клиент и реконектится на следующий адрес.
                  Ну это я так понимаю… Поправьте если что то не так

                  1 Reply Last reply Reply Quote 0
                  • W
                    winmasta
                    last edited by

                    Придумал кое-какое решение для своей проблемы через zabbix, может кому пригодится. Настройку заббикса опишу поверхностно, если надо позже распишу более подробно.

                    0. Устанавливаем и настраиваем пакет zabbix-agent на нашем pfsense, настраиваем узел сети для нашего pfsense, проверяем, что заббикс агент видит заббикс сервер и наоборот. В настройках zabbix-agent нажав Advanced Options в поле User Parameters добавляем

                    EnableRemoteCommands=1
                    

                    1. Создаем на заббикс сервере скрипт в разделе Администрирование-Скрипты следующего содержания

                    sudo -S sh /usr/openvpnrestart.sh
                    

                    2. Создаем на заббикс сервере узел сети в разделе Настройки-Узлы сети с любым названием (например providerNameGw) и ip адресом нужного gateway (в моем случае это основной шлюз, за ним и будем следить). Присоединяем к этому узлу шаблон Template ICMP Ping. Далее заходим в элементы данных этого узла, открываем элемент ICMP Ping и в поле Интервал обновления (в сек) выставляем желаемый интервал "пингования" шлюза (я себе поставил 10 сек). Далее заходим в триггеры и (чтобы не изменять триггер шаблона) создаем новый триггер с именем например {HOST.NAME} is DOWN и с выражением {providerNameGw:icmpping.max(#6)}=0 это значит, что после 6 неудачных пингов каждый через 10 сек (итого 6 раз * 10 сек = 1 мин) сработает триггер.

                    3. Создаем на заббикс сервере действие в разделе Настройки-Действия для источника событий Триггеры (выбрать в меню в правом верхнем углу) с именем например openvpn restart, обязательно ставим галку Сообщение о восстановлении. На вкладке Условия удаляем все условия и добавляем единственное Триггер = ИМЯ_ТРИГГЕРА например в нашем случае будет providerNameGw is DOWN. На вкладке операции добавляем операцию Длительность шага операции по умолчанию (я поставил 60 секунд), Шаги 1-1, Длительность шага - 0 (по умолчанию), Тип операции - Удаленная команда, в Список целей добавляем наш pfsense (из шага 0), Тип-Глобальный скрипт (хотя тут можно было и пользовательский прямо в действии прописать, но вдруг у нас будет много pfsens'ов), имя скрипта - из шага 1, нажимаем Обновить

                    4. Устанавливаем пакет sudo на pfsense. Заходим в настройку System-sudo, выбираем Custom Configuration - Include at Start.

                    5. Заходим по ssh на наш pfsense (если ssh не включен, то включаем в System-Advansed раздел Secure Shell) и создаем там скрипт например в папке /usr с названием openvpnrestart.sh и с содержимым

                    #!/bin/sh
                    pgrep openvpn | xargs kill -9
                    /usr/local/sbin/openvpn --config /var/etc/openvpn/server1.conf
                    /usr/local/sbin/openvpn --config /var/etc/openvpn/server2.conf
                    
                    

                    если у вас один сервер, то нижнюю строку убираем, если 3 то добавляем еще одну поменяв номер сервера и т.д. по анологии. Делаем скрипт исполняемым (на всякий случай, хотя у меня он и без этого выполняется)

                    sudo chmod a+x /usr/openvpnrestart.sh
                    

                    6. Создаем файл в папке /usr/local/etc/sudoers.d с именем например zabbix и следующим содержимым

                    zabbix ALL=NOPASSWD: /bin/sh /usr/openvpnserver.sh
                    

                    ВСЁ! Теперь при отсутствии шлюза в течение минуты сработает триггер, который перезапустит пн серверы на нашем pfsense, как только шлюз вновь будет доступен, впн серверы перезапустятся снова.
                    В реальных условиях буду тестировать завтра, если где ошибся или не прав, сообщите.

                    1 Reply Last reply Reply Quote 0
                    • P
                      PavelSv
                      last edited by

                      С нетерпением жду тестов и бегу разворачивать Zabbix

                      1 Reply Last reply Reply Quote 0
                      • P
                        PavelSv
                        last edited by

                        Еще назрел вопрос: а что если вместо внешних ip указать dns имена (А записи)? Есть ли какие то подводные камни? И как лучше сделать: 2 А-записи на разные ip или 1 A-запись с разным приоритетом ip?

                        1 Reply Last reply Reply Quote 0
                        • W
                          winmasta
                          last edited by

                          @PavelSv:

                          Еще назрел вопрос: а что если вместо внешних ip указать dns имена (А записи)? Есть ли какие то подводные камни? И как лучше сделать: 2 А-записи на разные ip или 1 A-запись с разным приоритетом ip?

                          У нас сделано так: есть ddns имя, в сети (не на pfsense а отдельно) стоит dynamic updater от noip с интервалом обновления 1 минута, при отвале основного шлюза в течение минуты записи обновляются, но вот когда эти обновления дойдут до клиентов - большой вопрос, однако по результатам тестов руководство устраивает такая схема. Возможно лучший вариант все таки 2 remote на клиентах, первый - основной, второй - резервный, при рестарте сервера сначала клиенты всегда будут стучать на первый.

                          Не совсем понятно, что значит "А-запись с разным приоритетом ip", возможно имеется ввиду roundrobin ?

                          PS теста похоже не будет, обещали с утра свет отключить, но видимо не будут. С другой стороны вчера на "левом" триггере несколько раз оттестировал - работает (серверы рестартуют, что и требуется).

                          1 Reply Last reply Reply Quote 0
                          • P
                            pigbrother
                            last edited by

                            winmasta,
                            Нарыл в своих запасниках рестартер Open VPN, который пару раз использовал на 2.0.2

                            echo "" | php -q
                            

                            Проверил - вроде работает и сейчас,  из консоли, через SSH, через pitty\plink свежих версий.
                            Полная версия, из которой взял нужный кусок выглядит так:

                            /usr/bin/time -h sh -c 'RUNNING=`ps ax | grep openvpn | grep -v grep`; while [ -n "$RUNNING" ]; do RUNNING=`ps ax | grep openvpn | grep -v grep`;  done' | & awk '{print $3}' & echo '' | php -q
                            

                            Что не понравилось - какая-то из этих версий отрабатывала, но иногда оставляла CPU нагруженным.
                            Необходимость перезагрузки отпала, разбираться не стал.

                            1 Reply Last reply Reply Quote 0
                            • W
                              winmasta
                              last edited by

                              @pigbrother:

                              winmasta,
                              Нарыл в своих запасниках рестартер Open VPN, который пару раз использовал на 2.0.2

                              echo "" | php -q
                              

                              Проверил - вроде работает и сейчас,  из консоли, через SSH, через pitty\plink свежих версий.
                              Полная версия, из которой взял нужный кусок выглядит так:

                              /usr/bin/time -h sh -c 'RUNNING=`ps ax | grep openvpn | grep -v grep`; while [ -n "$RUNNING" ]; do RUNNING=`ps ax | grep openvpn | grep -v grep`;  done' | & awk '{print $3}' & echo '' | php -q
                              

                              Что не понравилось - какая-то из этих версий отрабатывала, но иногда оставляла CPU нагруженным.
                              Необходимость перезагрузки отпала, разбираться не стал.

                              попробовал выполнить - ничего не произошло, версия 2.3.3, где то я эту строку уже находил

                              1 Reply Last reply Reply Quote 0
                              • P
                                pigbrother
                                last edited by

                                Оба варианта пробовали?

                                1 Reply Last reply Reply Quote 0
                                • P
                                  pigbrother
                                  last edited by

                                  Если еще актуально.
                                  Корректный стоп\старт\рестарт индивидуального экземпляра Open VPN сервера. Возможно - и клиента, это не проверял.

                                  pfSsh.php playback svc stop openvpn server 2

                                  Starting the pfSense developer shell….
                                  Attempting to issue stop to openvpn service...
                                  openvpn has been stopped.

                                  pfSsh.php playback svc start openvpn server 2

                                  Starting the pfSense developer shell….
                                  Attempting to issue start to openvpn service...
                                  openvpn has been started.

                                  pfSsh.php playback svc restart openvpn server 2

                                  Starting the pfSense developer shell….
                                  Attempting to issue restart to openvpn service...
                                  openvpn has been restarted.

                                  server 2 - то, что в
                                  /var/etc/openvpn
                                  соответствует server2.conf

                                  Используется PHP pfSense Shell. Теретически можно писать подобие макросов.
                                  https://doc.pfsense.org/index.php/Using_the_PHP_pfSense_Shell

                                  Создам, пожалуй, отдельный пост.

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post
                                  Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.