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.
    • 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.