Настройка туннеля WireGuard на роутере на базе irzOS

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

WireGuard – это современный протокол виртуальных частных сетей (VPN), отличающийся простотой, высокой производительностью и надёжной защитой данных. Работает на уровне L3, превосходит OpenVPN и IPsec по скорости передачи данных.

Настройка WireGuard в irzOS состоит из настройки интерфейса и настройки пира – другой стороны туннеля.

Настройка irzOS может производиться как через Web интерфейс, так и через интерфейс CLI с помощью протокола SSH и терминального клиента. Несмотря на разные способы подключения логика настройки идентична в обоих случаях.

Настройка WireGuard сети с использованием топологии Site-to-site

Задача:

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

Необходимо обеспечить связь между локальными сетями через туннель WireGuard.

Туннельными адресами будут адреса из сети 10.1.1.0/30, так как для связи точка-точка достаточно двух адресов.

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

Настройка интерфейсов

Для настройки интерфейса WireGuard необходимо:

  1. Перейти в раздел /tunnel → wireguard → interface в WEB панели или интерфейсе CLI

  2. Нажать на кнопку Add и дать имя новому интерфейсу, например: wg0. После чего откроется форма для заполнения.

    wireguard 2
    Схема 2. Интерфейс WireGuard
    • Tunnel IP – локальный адрес туннеля. Задается вместе с маской, например: 192.168.1.1/24

    • Private Key – закрытая часть ключа шифрования туннеля. Генерируется автоматически, может изменяться пользователем

    • Public Key – открытая часть ключа шифрования, производная от закрытого

    • Port – порт, на котором WireGuard будет принимать входящие соединения

    • MTU – максимальный размер пакета в туннеле. Не следует изменять без необходимости

    • Mark – маркировка пакетов, проходящих через интерфейс, для их последующей обработкой файрволлом и т.д.

  3. Нажать Apply.

Пример настройки интерфейсов

В примере используются закрыте ключи только для демонстрационных целей.

Конфигурация на роутере R1

wireguard 3
Параметры роутера R1

Поле

Значение

Tunnel IP

IP адрес локального интерфейса туннеля: 10.1.1.1/30

Private Key

собственный ключ (при необходимости)

Настройка роутера R1 через CLI:

/tunnel wireguard interface add name=wg0
    disabled true
    fw-mark -
    mtu 1420
    port 100
    priv-key qDbGVhjpEhSQrNXZcCOX0nIx++xLk4vvE1NZC09nX04=
    tunnel-ip 10.1.1.1/30
/
/tunnel wireguard interface apply

Конфигурация на роутере R2

wireguard 4
Параметры роутера R2

Поле

Значение

Tunnel IP

IP адрес локального интерфейса туннеля: 10.1.1.2/30

Private Key

собственный ключ (при необходимости)

Настройка роутера R2 через CLI:

/tunnel wireguard interface add name=wg1
    disabled true
    fw-mark -
    mtu 1420
    port 100
    priv-key QPdx6DQ0FcALIwGQF6zuwBXgxlDHrZgzANSLylq6R1o=
    tunnel-ip 10.1.1.2/30
/
/tunnel wireguard interface apply

Настройка пиров

wireguard 5
Схема 3. Настройка пира
  • Interface – настроенный ранее интерфейс WireGuard, выбирается из списка

  • Remote IP – внешний IP адрес удаленной стороны туннеля. Указывается вместе с портом, например: 192.1.1.1:8000

  • Allowed IP – удаленные подсети адресов, трафик к которым разрешен через туннель WireGuard. Возможно так же указание конкретных адресов (в этом случае указание маски необязательно) в сети за туннелем. Для доступа к удаленной стороне по его туннельному адресу он также должен быть указан

  • Public Key – публичный (открытый) ключ противоположной стороны туннеля

  • Pre-Shared Key – необязательный ключ для дополнительной безопасности. Должен быть идентичным на обоих сторонах туннеля

  • Keepalive – параметр, определяющий с какой частотой в туннель будут посылаться пакеты ping, поддерживающие активность туннеля

Пример настройки пиров

Для настройки перейти в раздел /tunnel → wireguard → peer.

Конфигурация на роутере R1 с роутером R2

wireguard 6
Параметры роутера R1

Поле

Значение

Interface

ранее созданный интерфейс – wg0

Remote IP

IP адрес удаленной стороны вместе с портом, в данном случае 200.1.1.2:100

Allowed IP

подсеть туннельных адресов 10.1.1.0/30 (либо туннельный адрес удаленного пира) и удаленная сеть 192.168.3.0/24

Public Key

собственный открытый ключ удаленной стороны (R2)

Настройка пира на роутере R1 через CLI:

/tunnel wireguard peer add interface=wg0 name=router-R2
    allowed-ip -
    allowed-ip 10.1.1.0/30,192.168.3.0/24
    disabled true
    keepalive 5
    psk -
    pub-key 4+kzVqmZQvzYgA56g1XTYAhlDNmXcKYk32F/5uARXSA=
    remote-ip 200.1.1.2:100

  /tunnel wireguard peer apply

Конфигурация на роутере R2 с роутером R1

wireguard 7
Параметры роутера R2

Поле

Значение

Interface

ранее созданный интерфейс – wg0

Remote IP

IP адрес удаленной стороны вместе с портом, в данном случае 200.1.1.1:100

Allowed IP

подсеть туннельных адресов 10.1.1.0/30 (либо туннельный адрес удаленного пира) и удаленная сеть 192.168.2.0/24

Public Key

собственный открытый ключ удаленной стороны (R1)

Настройка пира на роутере R2 через CLI:

/tunnel wireguard peer add interface=wg1 name=router-R1
    allowed-ip -
    allowed-ip 10.1.1.0/30,192.168.2.0/24
    disabled true
    keepalive -
    psk -
    pub-key jjFvdA4uWL2XcVm3dc2cXJ0Q5xAsGGANu1Gv4G6vqDg=
    remote-ip 200.1.1.1:100

  /tunnel wireguard peer apply

Настройка статических маршрутов

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

Для настройки маршрутов:

  1. Перейдите в раздел /ip → route → list и нажмите Add.

  2. Задайте настройки:

    • Target: локальная подсеть противоположного роутера

    • Gateway: канальный адрес туннеля WireGuard на противоположной стороне

    • Source Interface: интерфейс WireGuard

Конфигурация на роутере R1

wireguard 8

Настройка на роутере R1 через CLI:

/ip route list add dst-addr=192.168.3.0/24 interface=Wire
    disabled false
    gateway 10.1.1.2
    metric -
    src-addr -
    table main
    type unicast



  /ip route list apply

Конфигурация на роутере R2

wireguard 9

Настройка на роутере R2 через CLI:

/ip route list add dst-addr=192.168.2.0/24 interface=Wire
    disabled false
    gateway 10.1.1.1
    metric -
    src-addr -
    table main
    type unicast



  /ip route list apply

Firewall

Для установки туннеля WireGuard необходимо чтобы порты интерфейсов настроенные в /tunnel → wireguard → interface были открыты в межсетевом экране в разделе /firewall → filter.

По умолчанию irzOS не применяет правила межсетевого экрана для трафика туннельных интерфейсов. При необходимости можно добавить интерфейс в зону LAN (/firewall → zone → zone-lan) или зону Wan (/firewall → zone → zone-wan).

Проверим доступность с помощью ping (/tools → ping).

wireguard 10
Схема 4. Результат пингов

Задача выполнена.

Построение WireGuard сети с использованием топологии Hub and Spoke ("звезда")

Задача:

Роутер S0, выступающий в качестве сервера, имеет внешний IP адрес 200.0.0.1 и туннельный IP адрес 10.0.0.1/24 в WireGuard.

Роутеры R1 и R2 имеют серые внешние IP адреса и могут установить связь друг с другом только через S0. Роутер R1 имеет локальную сеть с адресом в LAN 192.168.2.1/24, роутер R1 – с адресом в LAN 192.168.3.1/24.

Необходимо обеспечить связь между локальными сетями роутеров R1 и R2

wireguard 11
Схема 5. Схема сети

Пример настройки интерфейсов

Конфигурация сервера S0

  1. Перейти в раздел /tunnel → wireguard → interface и нажать Add.

  2. Дать имя интерфейсу WireGuard на сервере, например: wg0.
    Задать ему адрес 10.0.0.1 с маской /24 и порт 100 для подключения.

    Данный порт должен быть доступен на внешнем IP адресе сервера т.к. сервер выступает в роли Хаба.

    Для примера используется закрытый ключ:
    kGMJ14KExnxuPrxnDmxu4O9Z4+FFqYQGkzYJnJvx2l4=

    Публичный ключ будет, соответственно:
    ARydb2a0k8tRBTacj/c2lYiOgbT3WHL6cuQAp7jwRwk=

Настройка сервера S0 через CLI:

/tunnel wireguard interface add name=wg0
    disabled -
    fw-mark -
    mtu 1420
    port 100
    priv-key kGMJ14KExnxuPrxnDmxu4O9Z4+FFqYQGkzYJnJvx2l4=
    tunnel-ip 10.0.0.1/24

  /tunnel wireguard interface apply

Конфигурация роутера R1

wireguard 12

Настройка роутера R1 через CLI:

/tunnel wireguard interface add name=wg1
    disabled -
    fw-mark -
    mtu 1420
    port 100
    priv-key MBuUvu677Qz+8J3FYOs05QWNHdULg+Z7hCswHjB2jkE=
    tunnel-ip 10.0.0.2/24

  /tunnel wireguard interface apply

Конфигурация роутера R2

wireguard 13

Настройка роутера R2 через CLI:

/tunnel wireguard interface add name=wg2
    disabled -
    fw-mark -
    mtu 1420
    port 100
    priv-key aPt/yV5Mxwxb+3itbt8ALwokeeRI3GnNOBTWPUPEtX0=
    tunnel-ip 10.0.0.3/24

  /tunnel wireguard interface apply

Пример настройки пиров

Конфигурация на сервере S0 с роутером R1

Для настройки перейти в раздел /tunnel → wireguard → peer и нажать кнопку Add.

wireguard 14
В Allowed IP нужно указать туннельный адрес R1 и его локальную подсеть, в которой далее настраивается машрутизация. Адрес 10.0.0.2/32 необходимо указать, чтобы WireGuard мог маршрутизировать трафик между пирами.

Настройка пира на сервере S0 через CLI:

/tunnel wireguard peer add interface=wg0 name=R1
    allowed-ip -
    allowed-ip 10.0.0.2/32,192.168.2.0/24
    disabled -
    keepalive 10
    psk -
    pub-key pVaVmyfKM6lPkqr1BkB3NJW80Lvc2quPAZRd4wDyclI=
    remote-ip 0.0.0.0:100

  /tunnel wireguard peer apply

Конфигурация на сервере S0 с роутером R2

Для настройки перейти в раздел /tunnel → wireguard → peer и нажать кнопку Add.

wireguard 15
В Allowed IP нужно указать туннельный адрес R2 и его локальную подсеть, в которой далее настраивается машрутизация. Адрес 10.0.0.3/32 необходимо указать, чтобы WireGuard мог маршрутизировать трафик между пирами.

Настройка пира на сервере S0 через CLI:

  /tunnel wireguard peer add interface=wg0 name=R2
    allowed-ip -
    allowed-ip 10.0.0.3/32,192.168.3.0/24
    disabled -
    keepalive 10
    psk -
    pub-key 1m2KpKE+dXc9BU4ZGGhVSCW2xEm6FXueVmK2mcNQkyY=
    remote-ip 0.0.0.0:100

  /tunnel wireguard peer apply

Таким образом сервер S0 имеет 1 интерфейс WireGuard и 2 установленных пира.

Конфигурация на роутере R1 с сервером S0

wireguard 16
В Allowed IP нужно указать 10.0.0.3/32 для связи с R2 и 192.168.3.0/24 для доступа в его локальную сеть. Указывать туннельный адрес 10.0.0.1/32 сервера S0 необязательно, но удобно для отладки.

Настройка пира на роутере R1 через CLI:

/tunnel wireguard peer add interface=wg1 name=Server
    allowed-ip -
    allowed-ip 10.0.0.1/32,10.0.0.3/32,192.168.3.0/24
    disabled -
    keepalive 10
    psk -
    pub-key ARydb2a0k8tRBTacj/c2lYiOgbT3WHL6cuQAp7jwRwk=
    remote-ip 172.0.2.1:100

  /tunnel wireguard peer apply

Конфигурация на роутере R2 с сервером S0

wireguard 17
В Allowed IP нужно указать 10.0.0.2/32 для связи с R2 и 192.168.2.0/24 для доступа в его локальную сеть. Указывать туннельный адрес 10.0.0.1/32 сервера S0 необязательно, но удобно для отладки.

Настройка пира на роутере R2 через CLI:

/tunnel wireguard peer add interface=wg2 name=Server
    allowed-ip -
    allowed-ip 10.0.0.1/32,10.0.0.2/32,192.168.2.0/24
    disabled -
    keepalive 10
    psk -
    pub-key ARydb2a0k8tRBTacj/c2lYiOgbT3WHL6cuQAp7jwRwk=
    remote-ip 172.0.3.1:100

  /tunnel wireguard peer apply

После установления связи с S0 роутеры R1 и R2 могут общаться друг с другом, пересылая трафик через сервер S0. Так как они оба находятся в подсети 10.0.0.0/24, настройка дополнительной маршрутизации для обращения по туннельным адресам не нужна.

Однако чтобы клиенты подсетей 192.168.2.0/24 и 192.168.3.0/24 могли общаться через поднятый на роутерах туннель, необходимо настроить маршрутизацию.

Настройка маршрутизации

Конфигурация на роутере R1

wireguard 18
Схема 6. Настройка маршрута до 192.168.3.0/24 через туннельный адрес S0

Настройка на роутере R1 через CLI:

/ip route list add dst-addr=192.168.3.0/24 interface=wg1
    disabled -
    gateway 10.0.0.1
    metric -
    src-addr -
    table main
    type unicast

  /ip route list apply

Конфигурация на роутере R2

wireguard 19
Схема 7. Настройка маршрута до 192.168.2.0/24 через туннельный адрес S0

Настройка на роутере R2 через CLI:

/ip route list add dst-addr=192.168.2.0/24 interface=wg2
    disabled -
    gateway 10.0.0.1
    metric -
    src-addr -
    table main
    type unicast

  /ip route list apply

Конфигурация на сервере S0

На сервере S0 так же нужны маршруты между сетями 192.168.2.0/24 и 192.168.3.0/24.

В качестве шлюзов в данные сети будут выступать роутеры R1 и R2 по своим туннельным адресам соответственно.

wireguard 20
Схема 8. Маршрут до 192.168.2.0/24

Настройка через CLI:

/ip route list add dst-addr=192.168.2.0/24 interface=wg0
    disabled -
    gateway 10.0.0.2
    metric -
    src-addr -
    table main
    type unicast
/ip route list apply
wireguard 21
Схема 9. Маршрут до 192.168.3.0/24

Настройка через CLI:

/ip route list add dst-addr=192.168.3.0/24 interface=wg0
    disabled -
    gateway 10.0.0.3
    metric -
    src-addr -
    table main
    type unicast

  /ip route list apply

Теперь необходимо выполнить Ping между локальной сетью роутеров R1 и R2 в панели /tools → ping.

wireguard 22
Схема 10. Результат выполнения ping

Завершить настройку командой /system → config → commit.

Следует учитывать, что сетевой трафик в данной схеме является зашифрованным в каналах между роутерами R1\R2 и сервером S0. Однако внутри S0 таковым не является (происходит расшифровка и повторное шифрование).
При необходимости построения туннеля таким образом, чтобы промежуточное звено в схеме не могло получить доступа к зашифрованному трафику, следует построить еще один туннель внутри имеющегося. При этом необходимо учитывать дополнительную нагрузку на многослойное шифрование.