Настройка openVPN для схемы с сервером и клиентом

#irzOS #роутеры #OpenVPN #tunnel

Задача:

Построить туннель и обеспечить взаимную доступность адресов из одной локальной сети в другую. Для решения этой задачи мы настроим один роутер как сервер, второй – в качестве клиента.

В данном случае лишь роутеру, выступающему в роли сервера, необходим внешний или «белый» IP адрес. Клиент может использовать «серый» и находиться за NAT-ом.

openVPN1
Схема 1. Схема сети

В этом примере роутер R1 выступает в роли сервера и имеет внешний IP 200.1.1.1 и локальную сеть с адресами из подсети 192.168.2.0/24.

Клиентский роутер R2 имеет локальную сеть с адресами в диапазоне 192.168.3.0/24.

Настройка OpenVPN предполагает наличие на роутере установленных сертификатов для клиента и сервера. Инструкцию как создать, экспортировать и импортировать сертификаты в iRZos смотрите в отдельной статье.
Сертификаты могут быть созданы как с помощью отдельной инфраструктуры PKI (например, easy-rsa), так и в интерфейсе роутера.

Настройка R1 (сервер)

  1. Перейдите в раздел /service → openvpn-server.

    openVPN2
    Схема 2. Настройка сервера
    Параметры сервера

    Поле

    Значение

    Dey-Type

    Tun

    Protocol

    UDP (по умолчанию)

    Port

    1194 (по умолчанию)

    Tunel IP

    10.8.0.1/24

    Pool

    10.8.0.10-10.8.0.20

    Clipher

    AES-256-CBC (по умолчанию)

    Auth

    SHA1 (по умолчанию)

    TA Key

    Ca

    Имя файла нашего CA (в примере это CA)

    Cert

    Имя сертификата сервера (в примере это server)

    Keepalive

    10 60

    Push To Client

    topology=subnet (по умолчанию); route=192.168.2.0/24 (клиенту будет передан маршрут до локальной сети роутера R1); route-gateway=10.8.0.1 (шлюзом к передаваемому маршруту назначается туннельный адрес роутера R1)

    Flag

    duplicate-cn (по умолчанию)

  2. Нажмите Apply, чтобы применить внесенные настройки.

  3. Перейдите в раздел /service → client.

  4. Нажмите Add и задайте Username.

    Username должен полностью соответствовать common name сертификата пользователя, который будет подключаться к серверу OpenVPN в качестве клиента!
    openVPN3
    Схема 3. Создание клиентской записи
  5. Настройте параметры для подключаемого клиента:

    • В поле Service выберите openvpn.

    • В поле Tunnel IP можно указать туннельный IP адрес с маской (из диапазона Pool), который будет привязан к данному клиенту. Если оставить это поле пустым, адрес будет назначен автоматически.

    • В поле Route укажите локальную подсеть роутера R2, которую нужно сделать доступной с роутера R1. В данном примере это 192.168.3.0/24.

    • Нажмите Apply для применения настроек.

Если нужно подключить к OpenVPN несколько разных клиентов, создайте соответствующие записи в разделе /service → client с различными Username, идентичными CN соответствующих сертификатов. Если нужно предоставить доступ к локальным сетям данных клиентов, укажите их подсети в поле Route для данного клиента.

Теперь запустите сервер OpenVPN в разделе /service → openvpn-server, сняв галочку напротив Disabled и нажав Apply. Статус туннеля изменится на running.

openVPN4
Схема 4. Статус туннеля

Настройка роутера R2 (клиент)

  1. Перейдите в /tunnel → openvpn.

    openVPN5
    Схема 5. Настройка клиента
    Параметры клиента

    Поле

    Значение

    Local IP

    WAN

    Remote IP

    200.1.1.1

    Tunnel IP

    Device Type

    tun

    Protocol

    udp

    Encryption

    tls

    Cipher

    AES-256-CBC

    Auth

    SHA1

    TA Key

    Не используется в примере

    Ca

    Имя файла сертификата CA (CA.pfx_0)

    Cert

    Имя файла сертификата клиента (client.pfx_0)

    Username

    Не используется в примере

    Password

    Не используется в примере

    Flag

    Pull (по умолчанию)

    Extra Parameters

    Не используется в примере

    Ca и Сert имеют иные наименования в связи с тем, что были созданы на роутере-сервере irzOS и экспортированы, при этом изменись имена файлов.
    Чтобы импортировать сертификаты на роутер, их необходимо загрузить в разделе /storage → file. А затем воспользоваться функцией импорта в разделе /storage → certificate → cert import. Подробнее в статье.
  2. Для завершения настройки снимите галочку напротив Disabled и нажмите Apply.

    Как только туннель поднимется, это отобразится в его статусе.

    openVPN6
    Схема 6. Статус туннеля

Туннель поднялся, а клиент получил IP адрес 10.8.0.15/24, как и было задано.

Убедитесь в том, что клиент получил нужные маршруты от сервера с помощью списка маршрутов /ip → routes → list.

openVPN7
Схема 7. Маршруты на клиенте

Отобразились маршрут №1 для туннельного интерфейса и №3 – до локальной сети R1 через туннельный интерфейс.

По умолчанию весь трафик для туннельных интерфейсов разрешен. При необходимости, настройки правил файрволла доступны в разделе /firewall!

Пинг

Перейдите в /tools → ping.

openVPN8
Схема 8. Ping

Настройка сервера и клиента в режиме CLI

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

Настройка для роутера-сервера R1

Создание конфигурации OpenVPN сервера.

/service openvpn-server
    auth -
    auth SHA1
    ca СA
    cert server
    cipher -
    cipher AES-256-CBC
    dev-type tun
    disabled -
    extra -
    flag -
    flag duplicate-cn
    keepalive 10 60
    pool 10.8.0.10-10.8.0.20
    port 1194
    protocol udp
    push -
    push route-gateway=10.8.0.1,route=192.168.2.0/24,topology=subnet
    ta-key -
    tunnel-ip 10.8.0.1/24

  /service openvpn-server apply
  /

Создание учетной записи для клиента. Username должен соответствовать CN (common name) сертификата клиента. Tunnel-ip – задайте фиксированный IP адрес клиенту только при необходимости.

/service client add username=client
    disabled -
    password -
    route -
    route 192.168.1.0/24
    service -
    service openvpn
    tunnel-ip 10.8.0.15/24
    apply
  /

Настройка для клиента R2

/tunnel openvpn add name=ovpn1
    auth -
    auth SHA1
    ca ca.crt
    cert client-bundle.pem
    cipher -
    cipher AES-256-CBC
    dev-type tun
    disabled -
    encryption tls
    extra -
    flag -
    flag pull
    local-ip auto
    password -
    protocol udp
    remote-ip -
    remote-ip 200.1.1.1
    ta-key -
    tunnel-ip -
    username -
    apply
  /

Дополнительная настройка в режиме "звезда"

На текущий момент в irzOS нет возможности передавать клиентам множественные маршруты, поэтому в некоторых ситуациях требуется ручная настройка.

Задача:

Подключить одновременно двух (и более) клиентов к серверу OpenVPN с необходимостью обеспечения их взаимного доступа к локальным сетям.

Решение:

Допустим, что локальная сеть Клиента №2 – это 192.168.4.0/24.

  1. Создайте сертификат клиента №2 (условный роутер R3) на роутере-сервере R1 или в той системе, в которой создаются сертификаты. Это может быть роутер irzOS, выступающий в роли сервера, или отдельная система PKI.

  2. В разделе /service → client создайте дополнительного клиента и укажите там его LAN подсеть.

  3. Настройте на втором клиенте подключение к OpenVPN аналогично инструкции выше.

  4. Клиент №2 получит от сервера маршрут до подсети сервера (192.168.2.0/24). Роутер-сервер R1 будет иметь маршрут до клиента R3 (192.168.4.0/24) из его клиентской записи, поле Route.

  5. Дополнительно пропишите маршруты:

    • На клиенте R3 до локальной сети клиента R2 укажите маршрут 192.168.3.0/24 через туннельный интерфейс OpenVPN. Шлюз: 10.8.0.1.

      openVPN9
      Схема 9. Создание маршрута на клиенте R3 до R2
      openVPN10
      Схема 10. Создание маршрута на клиенте R3 до R2. Продолжение
      /ip route list add dst-addr=192.168.3.0/24 interface=ovpn1
          disabled -
          gateway 10.8.0.1
          metric -
          src-addr -
          table main
          type unicast
          apply
        /
    • На клиенте R2 до локальной сети клиента R3 укажите маршрут 192.168.4.0/24 через туннельный интерфейс OpenVPN. Шлюз: 10.8.0.1.

      openVPN11
      Схема 11. Создание маршрута на клиенте R2 до R3
      openVPN12
      Схема 12. Создание маршрута на клиенте R2 до R3. Продолжение
    /ip route list add dst-addr=192.168.4.0/24 interface=OVPN
        disabled -
        gateway 10.8.0.1
        metric -
        src-addr -
        table main
        type unicast
        apply
      /

Теперь каждый из трех участников (и устройства локальной сети) имеет возможность говорить с локальной сетью другого участника.