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

    OpenVPN PSK: Site-to-Site инструкция для обсуждения

    Scheduled Pinned Locked Moved Russian
    180 Posts 32 Posters 98.8k Views
    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.
    • R
      rubic
      last edited by rubic

      Как и обещал, начинаю выкладывать инструкции по соединению сетей удаленных офисов посредством OpenVPN. Не стал писать сразу в Вики потому что все результаты получены на стенде и требуют проверки.

      Начнем с режима OpenVPN “Peer to Peer (Shared Key)” - PSK. Вообще, надо сказать, что режим OpenVPN (“Server Mode” в GUI) полностью определяет все последующие настройки маршрутизации. И для разных режимов эти настройки, мягко говоря, разные. Поэтому, спрашивая совета по OpenVPN на форуме, первое, что вы должны сообщить – это режим, в котором у вас работает OpenVPN.

      Режим PSK является наиболее простым в развертывании. Если вам необходимо соединить сети  головного офиса и 3-4 филиалов, то это возможно ваш выбор. Дело в том, что одно из ограничений режима PSK заключается в том, что для каждого клиента (филиала) вам придется создать отдельный экземпляр OpenVPN сервера на pfSense головного офиса. Если филиалов много, то стоит подумать о режиме  “Peer to Peer (SSL/TLS)” – PKI, в котором один экземпляр сервера может обслуживать много клиентов.

      Схема сети:

      img1.png

      зеленым обозначен туннель через общедоступную сеть, который нам предстоит создать.

      На pfSense1 головного офиса переходим в меню VPN – OpenVPN. На вкладке Server нажимаем кнопку “+” для добавления нового экземпляра сервера OpenVPN и устанавливаем его параметры:

      Img2.png

      Не пренебрегайте описанием (Description) экземпляра сервера. Когда их будет несколько, проще будет разобраться. Обратите внимание на галку в чекбоксе Shared Key - Automatically generate a shared key. Tunnel Network – любая неиспользуемая подсеть емкостью не менее /30. В поле Remote Network ставим локальную сеть клиента (филиала). Сохраняем настройки.

      Переходим в меню Firewall – Rules и на вкладке WAN добавляем правило для доступа извне к созданному OpenVPN серверу:

      img3.png

      Переходим на вкладку OpenVPN и добавляем правило:

      img4.png

      Возвращаемся в меню VPN – OpenVPN и нажимаем кнопку “е” редактирования созданного нами OpenVPN сервера. Копируем автоматически созданный Shared key в буфер обмена:

      img5.png

      Преходим к настройке клиента.

      В меню VPN – OpenVPN pfSense2 филиала переходим на вкладку Client и нажимаем кнопку “+” для создания клиента:

      img6.png

      В Server host or address ставим внешний адрес pfSense1 головного офиса. Снимаем галку в чекбоксе Shared Key - Automatically generate a shared key и вставляем в появившееся поле общий ключ из буфера обмена. Параметры Encryption algorithm и Tunnel Network выставляем такими же, как на сервере. В поле Remote Network ставим локальную сеть сервера (головного офиса). Сохраняем параметры.

      Через несколько секунд в меню Status – OpenVPN видим успешно подключившийся клиент:

      img7.png

      Переходим в меню Firewall – Rules и на вкладке OpenVPN создаем такое же правило, как на сервере:

      img4-1.png

      На этом настройка закончена, компьютеры двух сетей пингуют друг-друга.

      1 Reply Last reply Reply Quote 0
      • R
        rubic
        last edited by rubic

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

        img8.png

        Как уже говорилось выше, для подключения нового клиента нам придется создать новый экземпляр сервера OpenVPN на pfSense1. Переходим в меню VPN – OpenVPN. На вкладке Server нажимаем кнопку “+” для добавления нового экземпляра сервера OpenVPN. Настройка параметров аналогична настройке первого экземпляра, за исключением параметров: Local Port (здесь ставим например 1195), Description (OVPNS2), Tunnel Network (выбираем 10.0.9.0/24) и Remote Network (здесь ставим сеть филиала 2 – 192.168.30.0/24). Все эти параметры должны быть отличны от параметров первого экземпляра. Также будет автоматически сгенерирован общий ключ для подключения к OVPNS2.

        Так же как и в случае с первым экземпляром, на WAN pfSense1 необходимо создать разрешающее правило для UDP пакетов извне на локальный порт нового экземпляра (1195).

        Настраиваем клиента на pfSense3 филиала 2.

        Здесь опять же все аналогично настройке клиента в первом филиале, за исключением параметров: Server Port (1195), Description (OVPNC2) и Tunnel Network (10.0.9.0/24). Так же как и в первом филиале вставляем в поле Shared Key новый общий ключ, и создаем разрешающее правило в Firewall – Rules на вкладке OpenVPN.

        После поднятия туннеля компьютеры филиала 2 пингуют компьютеры головного офиса и наоборот, но нет связи между филиалами. Для того, чтобы филиалы “видели” друг-друга, необходимо в настройках клиента первого филиала в Advanced Configuration вписать директиву:

        route 192.168.30.0 255.255.255.0

        т. е. маршрут через туннель в сеть второго филиала. А в настройках клиента второго филиала, соответственно:

        route 192.168.20.0 255.255.255.0

        т. е. маршрут в сеть первого филиала.

        Как видим, маршрутизация в режиме PSK очень и очень проста. По сути между сервером и клиентом создается самое настоящее соединение PtP (точка-точка). Один адрес (10.0.8.1) принадлежит серверу, второй (10.0.8.2) - клиенту, причем, это не виртуальные адреса. Это все равно как если бы в pfSense вставили еще один сетевой адаптер и дали ему адрес. Так же, как и в случае с обычным адаптером, весь его трафик повинуется системной таблице маршрутов и, соответственно, легко маршрутизируется в любые подключенные сети, если это не запрещено правилами firewall. Однако, не следует назначать адрес OpenVPN интерфейса вручную, а также вручную прописывать для него статические маршруты. Первое происходит автоматически, второе - с помощью директив route в настройках Advanced OpenVPN или в поле Remote Network. Подчеркну последний момент:

        Когда вы прописываете 192.168.20.0/24 в Remote Network - это абсолютно аналогично тому, что вы напишете route 192.168.20.0 255.255.255.0 в поле Advanced и приводит к тому, что в системной таблице маршрутов появляется новый маршрут в сеть 192.168.20.0/24 через туннель OpenVPN. Это справедливо и для сервера, и для клиента.

        Когда вы прописываете 192.168.10.0/24 в Local Network сервера - это абсолютно аналогично тому, что вы напишете push "route 192.168.10.0 255.255.255.0" в поле Advanced и приводит к тому, что в системной таблице маршрутов клиента появляется новый маршрут в сеть 192.168.10.0/24 через туннель OpenVPN. Это справедливо только для сервера и это не работает в режиме PSK! Во всяком случае у меня не работает - в таблице маршрутов клиента ничего не появляется, хотя подтверждения этому факту в документации я не нашел.

        Также следует сказать, что в режиме PSK не нужны никакие Client specific overrides и iroute в них, поскольку клиент всегда один.

        Не дублируйте то, что вы пишете в Remote Network директивами route и не создавайте никаких override, если ваш OpenVPN работает в режиме PSK.

        1 Reply Last reply Reply Quote 0
        • R
          rubic
          last edited by rubic

          OSPF

          Вот. Возвращаясь к предыдущему посту, можно ли сделать связь между офисами без всех этих Remote Networks и route? А как же!
          Более того, можно еще и обеспечить резервирование канала, и поможет нам в этом OSPF.

          OSPF - это когда, коротко говоря, есть граф, вершинами которого являются маршрутизаторы, а ребрами - линки между ними. OSPF, глядя на граф, может найти оптимальный маршрут между двумя маршрутизаторами. При этом он учитывает то, что какие-то линки могут быть упавшими. Остальное - в документации.

          img18.png

          Есть psSense1 головного офиса, у которого 2 канала в интернет: WAN1 - 192.0.2.2 и WAN2 - 198.51.100.2. Есть филиал с единственным каналом в интернет: WAN - 203.0.113.2.

          В головном офисе настроено 2 экземпляра сервера OpenVPN:

          OVPNS1 на WAN1:1194, Tunnel Network 10.0.8.0/24
          OVPNS2 на WAN2:1195, Tunnel Network 10.0.9.0/24

          В филиале настроено 2 клиента OpenVPN:

          OVPNS1 на 192.0.2.2:1194, Tunnel Network 10.0.8.0/24
          OVPNS2 на 198.51.100.2:1195, Tunnel Network 10.0.9.0/24

          Ни в головном офисе, ни в филиале на серверах и клиентах не прописаны ни Remote Network, ни какие-либо route.

          Филиал хочет при падении одного из каналов в головном офисе автоматически переключаться на другой, компы офиса и филиала должны видеть друг-друга.

          Ставим и в офисе и в филиале  (System -> Packages, вкладка Available Packages) пакет Quagga OSPF. В первую очередь необходимо настроить интерфейсы, на которых будет работать OSPF (Services -> Quagga OSPFd, вкладка Interface Settings) "+" добавляем интерфейсы.

          В головном офисе:

          первый интерфейс - OVPNS1:

          img19.png

          второй интерфейс - OVPNS2:

          img20.png

          И основные параметры OSPF (вкладка Global Settings):

          img21.png

          В филиале:

          первый интерфейс - OVPNC1:

          img22.png

          второй интерфейс - OVPNC2:

          img23.png

          И основные параметры:

          img24.png

          Area везде одна: 1.1.1.1, а Router ID - разные в офисе и филиале (я просто взял их публичные IP). Для наших нужд и там и там можно писать что попало, хотя знатоки OSPF будут смеяться.
          Галка Redistribute connected subnets заставляет роутеры обмениваться информацией о подключенных к ним сетям, т.е. маршрутами в эти сети, что нам и нужно. При этом внизу в Disable Redistribution прописаны сети, инфой о которых делиться не надо. Во-первых, наши 2 pfSense и так уже в курсе об этих сетях, во-вторых возможны чудеса, так что лучше не рисковать.

          После того как OSPF настроен и в офисе и в филиале, роутеры устанавливают отношение соседства (все скрины из филиала):

          img25.png

          И получают друг у друга маршруты:

          img26.png

          Видим, что филиал теперь знает путь в локалку головного офиса:

          img27.png

          У линка OVPNS1 - OVPNC1 метрика меньше чем у OVPNS2 - OVPNC2 поэтому все идет сейчас через него. Но если линк оборвать в головном офисе (отключить WAN1), то маршрутизаторы по оставшемуся линку посредством OSPF договорятся, что линк упал и перестроят таблицы. Все пойдет по OVPNS2 - OVPNC2. Это довольно быстро происходит, пропадает буквально один пинг))

          1 Reply Last reply Reply Quote 0
          • V
            vibperson
            last edited by

            Спасибо за руководство!
            Попробовал настроить всё как у вас
            Виртуал сеть 10.0.8.0/24
            Сеть сервера овпн 10.10.10.0/24
            Сеть клиента овпн 192.168.61.0/24

            Сервер находится в рабочей сети тоже на виртуалке (ван по дхсп от роутера, на лан статик ип)
            Клиент находится на виртуалке вмваре на моем пк (только ван интерфэйс с дхсп)
            Подключение проходит нормально, но пинга так и нет (пробовал из консоли виртуалки)

            Вот скриншоты диагностики маршрутизации

            Сервер

            Клиент

            1 Reply Last reply Reply Quote 0
            • ?
              A Former User
              last edited by

              Красота, молодец! Только еще додумать надо как инет пустить туда ;)

              1 Reply Last reply Reply Quote 0
              • D
                dvserg
                last edited by

                Поле сервера Local Network не заполнено.

                SquidGuardDoc EN  RU Tutorial
                Localization ru_PFSense

                1 Reply Last reply Reply Quote 0
                • R
                  rubic
                  last edited by rubic

                  @vibperson:

                  Спасибо за руководство!
                  Попробовал настроить всё как у вас
                  Виртуал сеть 10.0.8.0/24
                  Сеть сервера овпн 10.10.10.0/24
                  Сеть клиента овпн 192.168.61.0/24

                  Сервер находится в рабочей сети тоже на виртуалке (ван по дхсп от роутера, на лан статик ип)
                  Клиент находится на виртуалке вмваре на моем пк (только ван интерфэйс с дхсп)
                  Подключение проходит нормально, но пинга так и нет (пробовал из консоли виртуалки)

                  Вот скриншоты диагностики маршрутизации

                  Сервер

                  Какая-то муть с OpenVPN на сервере (на клиенте все OK). Точно на сервере Tunnel Network 10.0.8.0/24?
                  Вот так по идее должно быть:

                  img9.png

                  1 Reply Last reply Reply Quote 0
                  • R
                    rubic
                    last edited by rubic

                    @Bansardo:

                    Красота, молодец! Только еще додумать надо как инет пустить туда ;)

                    Для того, чтобы филиал выходил в интернет через головной офис, нужно пустить весь трафик, идущий из LAN филиала в интернет, через туннель. Сделать это можно только назначив этому трафику новый gateway. Но, так как gateway в pfSense назначаются только интерфейсам, нужно объявить интерфейс OpenVPN в pfSense явно:

                    На клиенте идем в Interfaces -> (assign), жмем "+" и выбираем ovpnc1

                    img10.png

                    Жмем "Save", переходим в Interfaces -> OPT1 и ставим галку в Enable Interface.

                    img11.png

                    Даем новому интерфейсу имя, больше ничего не меняем. Жмем "Save" - "Apply changes", идем в VPN -> OpenVPN на вкладку Client и жмем "е" для редактирования клиента. Ничего не меняем, посто жмем "Save" внизу, чтобы перезапустить туннель.
                    Теперь в Status -> Gateways должна наблюдаться такая картина:

                    img12.png

                    Если в System -> General Setup прописан какой-то левый DNS сервер, то его тоже надо пустить через новый gateway:
                    img13.png

                    Переходим в Firewall -> Rules на вкладку LAN и приводим правила к такому виду:

                    img14.png

                    То есть дефолтному правилу мы назначили новый gateway, а над дефолтным сделали еще правило для доступа из LAN к DNS Forwarder'у pfSense, иначе бы эти запросы полетели в новый gateway т.е. в никуда.

                    На этом настройка клиента с некоторыми оговорками закончена.

                    На сервере (т.е. в головном офисе) заходим в Firewall -> NAT на вкладку Outbound и если стоит  Automatic outbound NAT rule generation, то переводим в Manual и сохраняем. Добавляем правило:

                    img15.png

                    Где 192.168.20.0/24 - локальная сеть клиента (т.е. филиала).

                    На этом все, компы филиала выходят в интернет через головной офис.

                    Если на pfSense филиала изначально интернета нет, а просто провайдер дал вам виртуальный канал для связи с головным офисом и вы в этом канале сделали еще канал OpenVPN, то сам pfSense филиала при таких настройках в интернет (например за пакетами или обновлениями) не попадет. Чтобы он тоже ходил в интернет через туннель заходим на нем в Firewall -> Rules на вкладку Floating и добавляем правило:

                    img16.png

                    Здесь 192.0.2.2 - WAN адрес головного офиса, остальное должно быть точно как на картинке. Это правило заворачивает трафик самого pfSense филиала в туннель и он попадает в головной офис. Там его еще нужно проNATить. На pfSense головного офиса опять заходим в Firewall -> NAT на вкладку Outbound и создаем правило:

                    img17.png

                    Где 203.0.113.2  - WAN адрес филиала. Но pfSense головного офиса так же не знает что ответные пакеты на WAN адрес филиала теперь нужно посылать через туннель. Заходим на нем в свойства OpenVPN сервера и в Advanced пишем route 203.0.113.2 255.255.255.255.

                    Это все. Если кто-нибудь скажет мне, что это не работает, пусть будет готов запостить столько же скриншотов, сколько я

                    1 Reply Last reply Reply Quote 0
                    • ?
                      A Former User
                      last edited by

                      Сегодня протестирую дополнение!

                      1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User
                        last edited by

                        @dvserg:

                        Поле сервера Local Network не заполнено.

                        Оно не должно быть заполнено для Shared VPN

                        1 Reply Last reply Reply Quote 0
                        • ?
                          A Former User
                          last edited by

                          Так, вобщем после тго как я прописал в генерале ДНС, интернет появился на ван интерфейсе и на виртуальном интерфейсе… с лан не хочет пинговать... в чем тут дело?
                          Плюс сейчас нарвался на подвисания веб интерфейса... интернета так и нет...
                          Более того, пошли какието непонятки на сервере... ничего в адвансед не написано а в логах сразу
                          openvpn[48071]: ERROR: FreeBSD route add command failed: external program exited with error status: 1
                          статус канал не пишет, в табличке заполнена только первая срочка… не могу понять что творится

                          1 Reply Last reply Reply Quote 0
                          • R
                            rubic
                            last edited by

                            Обновил 3 пост топика OSPF!

                            1 Reply Last reply Reply Quote 0
                            • D
                              dvserg
                              last edited by

                              @rubic:

                              Обновил 3 пост топика OSPF!

                              Спасибо за развернутый мануал.

                              SquidGuardDoc EN  RU Tutorial
                              Localization ru_PFSense

                              1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User
                                last edited by

                                http://forum.pfsense.org/index.php/topic,58764.msg316116.html#msg316116
                                Вот так вот подвисло все

                                1 Reply Last reply Reply Quote 0
                                • R
                                  rubic
                                  last edited by

                                  @dvserg:

                                  Спасибо за развернутый мануал.

                                  Не поверишь, но у меня нет в продакшене ни ovpn, ни ospf. Просто самому стало интересно и вопросы эти в последнее время как-то часто стали вставать в сообшестве.
                                  Если можно, закрепи тему вверху или в FAQ. Чую не раз еще к этому вернемся))

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    dvserg
                                    last edited by

                                    @rubic:

                                    @dvserg:

                                    Спасибо за развернутый мануал.

                                    Не поверишь, но у меня нет в продакшене ни ovpn, ни ospf. Просто самому стало интересно и вопросы эти в последнее время как-то часто стали вставать в сообшестве.
                                    Если можно, закрепи тему вверху или в FAQ. Чую не раз еще к этому вернемся))

                                    Уже в FAQ. Аналогично, хотелось заняться этой темой, но времени катастрофически не хватает.

                                    SquidGuardDoc EN  RU Tutorial
                                    Localization ru_PFSense

                                    1 Reply Last reply Reply Quote 0
                                    • R
                                      rubic
                                      last edited by

                                      @dvserg:

                                      @rubic:

                                      @dvserg:

                                      Спасибо за развернутый мануал.

                                      Не поверишь, но у меня нет в продакшене ни ovpn, ни ospf. Просто самому стало интересно и вопросы эти в последнее время как-то часто стали вставать в сообшестве.
                                      Если можно, закрепи тему вверху или в FAQ. Чую не раз еще к этому вернемся))

                                      Уже в FAQ. Аналогично, хотелось заняться этой темой, но времени катастрофически не хватает.

                                      О! Спасиб! Из-за такой зарплаты что ли у меня времени вагон? Надо пересмотреть приоритеты))

                                      1 Reply Last reply Reply Quote 0
                                      • ?
                                        A Former User
                                        last edited by

                                        Инструкция и правда очень хорошая, счас ее протестим на все и будет серьезный мануал!

                                        1 Reply Last reply Reply Quote 0
                                        • ?
                                          A Former User
                                          last edited by

                                          @rubic:

                                          Переходим в Firewall -> Rules на вкладку LAN и приводим правила к такому виду:

                                          То есть дефолтному правилу мы назначили новый gateway, а над дефолтным сделали еще правило для доступа из LAN к DNS Forwarder'у pfSense, иначе бы эти запросы полетели в новый gateway т.е. в никуда.

                                          Этого я не пойму, как антилок по дефолту вынести из фаервола?
                                          У меня на виртуальном интерфейсе интернет есть, а вот на лане и на ване нету…
                                          Ping output:
                                          PING www.ru (194.87.0.50) from 192.168.1.10: 56 data bytes

                                          --- www.ru ping statistics ---
                                          3 packets transmitted, 0 packets received, 100.0% packet loss

                                          Плюс, если не прописать в генерале днс по дефолту, то ничего не получится даже на интерфейса виртуальном у клиента

                                          1 Reply Last reply Reply Quote 0
                                          • R
                                            rubic
                                            last edited by

                                            Пока объяснял уже сам все понял. Дела… Сегодня заставил наконец бегать OSPF по OpenVPN между работой и домашним микротиком. Полгода назад неделю на это убил безрезультатно. Пришлось править quagga_ospfd.inc

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