logo

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

Задача

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

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

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

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

Настройка OpenVPN предполагает наличие на роутере установленных сертификатов для клиента и сервера. Инструкцию как создать, экспортировать и импортировать сертификаты в iRZos смотрите в отдельной статье.

Сертификаты могут быть созданы с помощью отдельной инфраструктуры PKI (например, easy-rsa), так и в интерфейсе роутера.

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

Перейдите в раздел /service → openvpn-server. Пример конфигурации сервера показан на рисунке ниже.

openVPN2
Figure 2. Настройка сервера
Table 1. Параметры сервера

Поле

Значение

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 (по умолчанию)

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

Далее необходимо перейти в раздел /service → client.

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

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

Настройте параметры для подключаемого клиента.

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

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

  3. В поле Route необходимо указать локальную подсеть роутера R2, которую мы хотим сделать доступной с роутера R1. В данном примере это 192.168.3.0/24.

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

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

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

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

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

Зайдите в /tunnel → openvpn. Пример конфигурации показан на рисунке ниже.

openVPN5
Figure 5. Настройка клиента
Table 2. Параметры клиента

Поле

Значение

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. Подробнее этот процесс описан в отдельной статье.

Для завершения настройки нужно снять галочку напротив Disabled и нажать Apply.

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

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

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

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

openVPN7
Figure 7. Маршруты на клиенте

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

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

Пробуем выполнить ping (/tools → ping):

openVPN8
Figure 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.

Дополнительно требуется прописать маршруты до локальной сети клиента R2 на клиенте R3.

В частности, это будет маршрут до 192.168.3.0/24 через туннельный интерфейс OpenVPN, шлюзом будет служить 10.8.0.1.

openVPN9
Figure 9. Создание маршрута на клиенте R3 до R2
openVPN10
Figure 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
  /
  1. Так же на клиенте R2 необходимо указать маршрут до сети R3 192.168.4.0/24 через интерфейс OVPN, шлюз 10.8.0.1.

openVPN11
Figure 11. Создание маршрута на клиенте R2 до R3
openVPN12
Figure 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
  /

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