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

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

    Scheduled Pinned Locked Moved Russian
    376 Posts 39 Posters 189.2k 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

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

      img28.png

      это та же схема клиент-сервер, что и в топике о режиме PSK (http://forum.pfsense.org/index.php/topic,58846.0.html), изменилась лишь адресация в туннеле. Ее мы обсудим позже, а сейчас создадим туннель для соединения сетей головного офиса и филиала.

      На сервере (pfSense1) переходим в меню System -> Cert Manager на вкладку CAs и нажимаем “+” для создания нового центра сертификации:

      img29.png

      Сохраняем и экспортируем сертификат нового центра сертификации в файл internal-ca.crt.

      img29-1.png

      Переходим на вкладку Certificates. Создаем сертификат сервера OpenVPN:

      img30.png

      И клиента:

      img31.png

      Экспортируем сертификат и ключ клиента в файлы:  ovpnc1-cert.crt и ovpnc1-cert.key, соответственно.

      Переходим в меню VPN -> OpenVPN на вкладку Server и добавляем новый сервер кнопкой “+”:

      img32.png

      Переходим на вкладку Client Specific Overrides и кнопкой “+” добавляем настройки специфичные для нашего клиента:

      img33.png

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

      img3.png

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

      img4.png

      На этом настройка сервера закончена. Переходим к настройке клиента (pfSense2). В первую очередь необходимо импортировать сертификаты. В меню System -> Cert Manager на вкладке CAs нажимаем “+” для импорта сертификата центра сертификации и вставляем в поле Certificate data содержимое файла internal-ca.crt:

      img34.png

      Сохраняем и переходим на вкладку Certificates, где импортируем клиентский сертификат, вставляя содержимое файлов ovpnc1-cert.crt и ovpnc1-cert.key в поля Certificate data и Private key data, соответственно:

      img35.png

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

      img5.png

      На pfSense2 филиала в меню VPN  – > OpenVPN на вкладке Client кнопкой “+” создаем новый клиента OpenVPN:

      img36.png

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

      img37.png

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

      img4.png

      Таблица маршрутов сервера (pfSense1 головного офиса):

      img38.png

      Таблица маршрутов клиента (pfSense2 филиала):

      img39.png

      Сети головного офиса и филиала доступны друг другу через созданный туннель.

      Как видите, какие либо настройки маршрутизации на OpenVPN клиенте полностью отсутствуют. Заполнив поле Local Network на сервере, мы передали маршрут в сеть головного офиса клиенту. Напомню, это действие абсолютно аналогично тому, что на сервере в поле Advanced мы написали бы: push “route 192.168.10.0 255.255.255.0” или тому, что на клиенте в Remote Network написали: 192.168.10.0/24, или на клиенте в поле Advanced: route 192.168.10.0 255.255.255.0. Но и это не все. Мы могли бы написать: push “route 192.168.10.0 255.255.255.0” в Client Specific Overrides для ovpnc1 на сервере и это привело бы к тому же результату.
      OpenVPN в режиме PKI позволяет централизованно и гибко управлять клиентами. Все можно сделать на сервере, не прописывая route или Remote Network на каждом клиенте. Все можно настроить индивидуально в Client Specific Overrides. Для сравнения, push “route 192.168.10.0 255.255.255.0” в поле Advanced сервера действует глобально на всех клиентов.

      Теперь вернемся к адресации в туннеле. Вообще говоря, OpenVPN поддерживает 3 топологии сети: p2p, net30 и subnet. Задать топологию сети можно в поле Advanced сервера. Например:

      topology subnet

      С топологией p2p мы уже знакомы по настройке сервера в режиме PSK. В режиме PKI по умолчанию используется топология net30. Создана она для обхода ограничения TAP-Win32 драйвера Microsoft в режиме эмуляции TUN интерфейса. Драйвер требует, чтобы в туннеле клиент и сервер находились в одной /30 подсети. Т.е. например сервер 10.0.8.1, клиент -  10.0.8.2. Ясно, что при таком ограничении сервер не сможет принимать подключения от нескольких клиентов, т.к. сеть /30 вмещает всего 2 эффективных адреса. Чтобы Windows могла работать с OpenVPN, на машине клиенте, образно говоря, создается виртуальный сервер, а на машине сервере – виртуальный клиент:

      10.0.8.1 <–p2p--> 10.0.8.2 <=============p2p==============> 10.0.8.5 <--p2p--> 10.0.8.6

      Адреса 10.0.8.1 и 10.0.8.2 укладываются в подсеть /30 и фактически находятся на pfSense1. При этом адрес 10.0.8.2 чисто виртуальный и символизирует собой удаленного клиента, в то время как адрес 10.0.8.1 – реальный и принадлежит локальной машине.
      Аналогично адреса 10.0.8.5 и 10.0.8.6 укладываются в подсеть /30 и фактически находятся на pfSense2. При этом 10.0.8.5 - виртуальный адрес, символизирующий удаленный сервер, а адрес 10.0.8.6 – реальный, принадлежащий локальной машине.

      Если вы не собираетесь подключать Windows клиентов к OpenVPN серверу на pfSense, то можно использовать новую топологию subnet. В ней, если в настройках сервера в Tunnel Network стоит 10.0.8.0/24, то сервер получает адрес 10.0.8.1, а клиенты последовательно адреса 10.0.8.2, 10.0.8.3, …, 10.0.8.254. Одним словом, subnet.
      Если же вы собираетесь использовать OSPF над вашими туннелями в режиме PKI, то топологию subnet использовать нужно, т.к. в net30 OSPF работать не хочет.

      Наконец, зачем была нужна директива: iroute 192.168.20.0 255.255.255.0 в Client Specific Overrides для клиента ovpnc1, при том, что мы и так прописали сеть клиента в Remote Network на сервере?
      То, что мы написали в Remote Network, лишь говорит ядру системы, что сеть 192.168.20.0/24 находится за шлюзом 10.0.8.2 на интерфейсе ovpns1. Но, как мы знаем, за ним может находится множество клиентов OpenVPN. Директивой iroute мы даем знать серверу OpenVPN, за каким именно клиентом находится та или иная сеть.

      1 Reply Last reply Reply Quote 0
      • A
        aleksvolgin
        last edited by

        Графическая иллюстрация топологии net30:

        net30.png
        net30.png_thumb

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

          @aleksvolgin:

          Графическая иллюстрация топологии net30:

          Спасибо! А откуда картинка? Сам бы почитал, ибо инфы немного. В инструкции описал свое понимание, про "прилегающие" интерфейсы не слышал.

          1 Reply Last reply Reply Quote 0
          • A
            aleksvolgin
            last edited by

            Отсюда, вестимо. Кстати, там очень много полезного и в русле темы.

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

              Спасибо за столь развернутые инструкции! Однозначно в FAQ, ибо лучше, как говорится, один раз увидеть.

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

                Автору спасибо не только за инструкции, но и за помощь. Смог все объяснить на пальцах! Теперь с такой инструкцией ни у кого не должно быть проблем!

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

                  Да за инструкцию спасибо, сбросил всё на ноль по вашей предыдущей инструкции поднял заработало. Однако попробовал поднять в режиме Remote Access (SSL/TLS) для доступа клиентов из под винды, коннект проходит, а пинги опять не идут.  :( Может подскажете, что может быть или для этого типа ещё инструкцию сделаете?

                  Вот на клиенте маршрутизация
                  IPv4 таблица маршрута

                  Активные маршруты:
                  Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
                           0.0.0.0          0.0.0.0      192.168.0.1    192.168.0.122     10
                          10.0.8.0    255.255.255.0         10.0.8.5         10.0.8.6     30
                          10.0.8.4  255.255.255.252         On-link          10.0.8.6    286
                          10.0.8.6  255.255.255.255         On-link          10.0.8.6    286
                          10.0.8.7  255.255.255.255         On-link          10.0.8.6    286
                        10.10.10.0  255.255.255.255         10.0.8.5         10.0.8.6     30
                         127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
                         127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
                   127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
                       192.168.0.0    255.255.255.0         On-link     192.168.0.122    266
                     192.168.0.122  255.255.255.255         On-link     192.168.0.122    266
                     192.168.0.255  255.255.255.255         On-link     192.168.0.122    266
                      192.168.61.0    255.255.255.0         On-link      192.168.61.1    276
                      192.168.61.1  255.255.255.255         On-link      192.168.61.1    276
                    192.168.61.255  255.255.255.255         On-link      192.168.61.1    276
                     192.168.132.0    255.255.255.0         On-link     192.168.132.1    276
                     192.168.132.1  255.255.255.255         On-link     192.168.132.1    276
                   192.168.132.255  255.255.255.255         On-link     192.168.132.1    276
                         224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
                         224.0.0.0        240.0.0.0         On-link     192.168.0.122    266
                         224.0.0.0        240.0.0.0         On-link          10.0.8.6    286
                         224.0.0.0        240.0.0.0         On-link     192.168.132.1    276
                         224.0.0.0        240.0.0.0         On-link      192.168.61.1    276
                   255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
                   255.255.255.255  255.255.255.255         On-link     192.168.0.122    266
                   255.255.255.255  255.255.255.255         On-link          10.0.8.6    286
                   255.255.255.255  255.255.255.255         On-link     192.168.132.1    276
                   255.255.255.255  255.255.255.255         On-link      192.168.61.1    276

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

                    Сеть за сервером 10.10.10.0? Если так то почему:

                    10.10.10.0  255.255.255.255         10.0.8.5        10.0.8.6    30 ??

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

                      Кстате, ДНС пришлось в ручную прописывать у клиентского сенса в генерал сеттингс… Сам не выдает. Так и не смог решить эту проблему

                      1 Reply Last reply Reply Quote 0
                      • S
                        sweep4
                        last edited by

                        Что-то не разобрался - если на сервере pfSense1 не указывать Remote Network: 192.168.20.0/24, то как на этом сервере указать маршрутизацию в эту сеть ?

                        Ситуация - у меня два site-to-site, в одном пусть условно сеть 192.168.20.0/24, в другом 192.168.30.0/24, как маршрутизацию указать первому серверу в эти две сети ?

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

                          @sweep4:

                          Что-то не разобрался - если на сервере pfSense1 не указывать Remote Network: 192.168.20.0/24, то как на этом сервере указать маршрутизацию в эту сеть ?

                          Ситуация - у меня два site-to-site, в одном пусть условно сеть 192.168.20.0/24, в другом 192.168.30.0/24, как маршрутизацию указать первому серверу в эти две сети ?

                          на pfSense1 в Advanced вставить:

                          route 192.168.20.0 255.255.255.0; route 192.168.30.0 255.255.255.0

                          в Client Specific Overrides -> Advanced:

                          iroute 192.168.20.0 255.255.255.0 для первого клиента, и:

                          iroute 192.168.30.0 255.255.255.0 - для второго

                          1 Reply Last reply Reply Quote 0
                          • S
                            sweep4
                            last edited by

                            @rubic:

                            на pfSense1 в Advanced вставить:

                            route 192.168.20.0 255.255.255.0; route 192.168.30.0 255.255.255.0

                            в Client Specific Overrides -> Advanced:

                            iroute 192.168.20.0 255.255.255.0 для первого клиента, и:

                            iroute 192.168.30.0 255.255.255.0 - для второго

                            Вот теперь я понял, в чем суть команды iroute  :D

                            Кажется взлетело и заработало все хозяйство.

                            1 Reply Last reply Reply Quote 0
                            • S
                              Sebastien1
                              last edited by

                              Спасибо. Сделал по мануалу.
                              Обе сетки с белыми адресами. внутренние 192.168.0.1 сервер, 192.168.1.1 клиент. Тоннель поднимается, пинги не ходят. Помогите, где туплю. скрины маршрутов прилагаю. Поправочка: со стороны центрального (192.168.0.0) сеть 192.168.1.0 пингуется, все видно. наоборот трасировка доходит только до 10.0.8.1
                              Спасибо.

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

                                @Sebastien1:

                                Спасибо. Сделал по мануалу.
                                Обе сетки с белыми адресами. внутренние 192.168.0.1 сервер, 192.168.1.1 клиент. Тоннель поднимается, пинги не ходят. Помогите, где туплю. скрины маршрутов прилагаю. Поправочка: со стороны центрального (192.168.0.0) сеть 192.168.1.0 пингуется, все видно. наоборот трасировка доходит только до 10.0.8.1
                                Спасибо.

                                Маршруты, судя по всему, в порядке. Смотрите в сторону правил firewall для OpenVPN на сервере.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  Sebastien1
                                  last edited by

                                  Правила как в мануале.
                                  На wan разрешен udp на 1194
                                  на openvpn и связанном с ним opt2 разрешено все всюду.
                                  ничего не понимаю. со стороны центрального офиса видны даже захудалые принтера, со тороны филиала только сам пф.

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

                                    Клик о помощи в настройке.
                                    Все сделал как по инструкции, канал OpenVPN поднимается но сети друг друга не видят. Таблица роутирования работает правильно где я мог сделать ошибку схему своего соединения прилагаю.
                                    Заранее благодарен.
                                    [imghttp://forum.pfsense.org/index.php?action=dlattach;topic=59081.0;attach=33465;image[/img]

                                    sh1.jpg
                                    sh1.jpg_thumb

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

                                      А если убрать роутеры из этой цепочки ? Пускай пфсенсы всем "рулят".

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

                                        Выкинуть немогу так как система нехорошо дружит с 3g модемами у которых новая прошивка, она не видит их как модем.
                                        Возникла другая проблема когда проверяю видят ли сети друг друга по ssh то пинги идут по обе стороны, а пытюсь с рабочей станции или через веб инерфейс все куда-то теряется, настройки делал по инструкции

                                        1 Reply Last reply Reply Quote 0
                                        • A
                                          aleksvolgin
                                          last edited by

                                          нехорошо дружит с 3g модемами у которых новая прошивка, она не видит их как модем.

                                          А переключить модемы в режим "only modem" не пробовали? Должно помочь.

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

                                            Если в таблице маршрутов каждого pfSense присутствует маршрут в соседнюю сеть через ovpn, то еще раз проверить правила firewall на обеих сторонах и наличие iroute в Client specific overrides -> Advanced на стороне сервера.

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