Настройка туннеля WireGuard на роутере на базе irzOS
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 необходимо:
-
Перейти в раздел /tunnel → wireguard → interface в WEB панели или интерфейсе CLI
-
Нажать на кнопку Add и дать имя новому интерфейсу, например: wg0. После чего откроется форма для заполнения.
Схема 2. Интерфейс WireGuard-
Tunnel IP – локальный адрес туннеля. Задается вместе с маской, например: 192.168.1.1/24
-
Private Key – закрытая часть ключа шифрования туннеля. Генерируется автоматически, может изменяться пользователем
-
Public Key – открытая часть ключа шифрования, производная от закрытого
-
Port – порт, на котором WireGuard будет принимать входящие соединения
-
MTU – максимальный размер пакета в туннеле. Не следует изменять без необходимости
-
Mark – маркировка пакетов, проходящих через интерфейс, для их последующей обработкой файрволлом и т.д.
-
-
Нажать Apply.
Пример настройки интерфейсов
| В примере используются закрыте ключи только для демонстрационных целей. |
Конфигурация на роутере 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
Поле |
Значение |
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
Настройка пиров
-
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
Поле |
Значение |
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
Поле |
Значение |
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.
Для настройки маршрутов:
-
Перейдите в раздел /ip → route → list и нажмите Add.
-
Задайте настройки:
-
Target: локальная подсеть противоположного роутера
-
Gateway: канальный адрес туннеля WireGuard на противоположной стороне
-
Source Interface: интерфейс WireGuard
-
Firewall
Для установки туннеля WireGuard необходимо чтобы порты интерфейсов настроенные в /tunnel → wireguard → interface были открыты в межсетевом экране в разделе /firewall → filter.
По умолчанию irzOS не применяет правила межсетевого экрана для трафика туннельных интерфейсов. При необходимости можно добавить интерфейс в зону LAN (/firewall → zone → zone-lan) или зону Wan (/firewall → zone → zone-wan).
Проверим доступность с помощью ping (/tools → ping).
Задача выполнена.
Построение 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
Пример настройки интерфейсов
Конфигурация сервера S0
-
Перейти в раздел /tunnel → wireguard → interface и нажать Add.
-
Дать имя интерфейсу 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
Пример настройки пиров
Конфигурация на сервере S0 с роутером R1
Для настройки перейти в раздел /tunnel → wireguard → peer и нажать кнопку Add.
| В 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.
| В 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
| В 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
| В 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
Настройка на роутере 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
Настройка на роутере 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 по своим туннельным адресам соответственно.
Настройка через 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
Настройка через 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.
Завершить настройку командой /system → config → commit.
|
Следует учитывать, что сетевой трафик в данной схеме является зашифрованным в каналах между роутерами R1\R2 и сервером S0. Однако внутри S0 таковым не является (происходит расшифровка и повторное шифрование). При необходимости построения туннеля таким образом, чтобы промежуточное звено в схеме не могло получить доступа к зашифрованному трафику, следует построить еще один туннель внутри имеющегося. При этом необходимо учитывать дополнительную нагрузку на многослойное шифрование. |