VPN IPSec (site-to-site) между виртуальными роутерами Mikrotik за NAT Traversal (NAT-T)

Описание

Рассмотрим настройку, VPN соединение «site-to-site» как показано ниже. Два удаленных виртуальных маршрутизатора Mikrotik подключены к публичной сети Интернет, через промежуточный сетевой узел - роутер провайдера. Таким образом оба роутера Mikrotik находятся за NAT-T. Статья содержит примеры конфигурации оборудования через консоль, а также через графический интерфейс управления (GUI) (winbox ).

Начальные условия

Рабочие станции, а также существующая инфраструктура также находятся за NAT. Каждая сторона Site «A» и Site «B» имеет свою собственную приватную подсеть:

  • 10.10.10.0/24 для Site «A»
  • 10.5.4.0/24 для Site «B»
  • Версия маршрутизаторов Mikrotik: RouterOS 6.41.2 stable (CHR).
  • Версия WinBox: 3.18.

Предупреждение

В зависимости от версии ОС роутера или программного обеспечения, дальнейшая настройка могут отличаться.

Примечание

Для установления VPN-соединения необходимо обеспечить выполнения обязательных условий:

  • Сетевая доступность между маршрутизаторами:

    • Protocol: UDP, port 500 (for IKE, to manage encryption keys).
    • Protocol: UDP, port 4500 (for IPSEC NAT-Traversal mode).
    • Protocol: ESP, value 50 (for IPSEC).
    • Protocol: AH, value 51 (for IPSEC).
  • Правила фаерволов не должны блокировать сетевой трафик между маршрутизаторами и приватными подсетями.

  • Приватные подсети, которые будут соединяться средствами IPSec, должны быть разными, а также не включать в себя друг друга.

Client vRouter Floating IP VPC-Network IP Private Network IP
Site «A» Mikrotik #1 156.67.54.238/32 172.16.0.12/32 10.10.10.1/32
Site «B» Mikrotik #2 156.67.54.143/32 172.16.0.15/32 10.5.4.11/32

В данном примере будет выполнена первоначальная настройка защищенного VPN соединения IPSec «site-to-site», тем самым соединим приватные сети 10.10.10.0/24 и 10.5.4.0/24, которые находятся за маршрутизаторами.

../../../_images/IPSec_Mikrotik.png

Конфигурация Site «A»

1-A. Выполняем настройку IPsec peer. На этом этапе необходимо настроить параметры:

  • address (адрес удаленного пира - роутера),
  • auth-method (метод аутентификации),
  • secret (секретное слово),
  • my-id (мой идетнитфикатор).

Остальные параметры оставляем по умолчанию, без изменений. Рассмотрим, как выполнить эту настроку из консоли:

/ip ipsec peer
add address=156.67.54.143/32 my-id=address:172.16.0.12 auth-method=pre-shared-key secret="123456"

Проверяем внесенные изменения:

[admin@Site "A"] > ip ipsec peer print
Flags: X - disabled, D - dynamic, R - responder
0      address=156.67.54.143/32 auth-method=pre-shared-key secret="123456" generate-policy=no policy-template-group=default exchange-mode=main
       send-initial-contact=yes nat-traversal=yes my-id=address:172.16.0.12 proposal-check=obey hash-algorithm=sha1
       enc-algorithm=aes-256,aes-128 dh-group=modp1024 lifetime=1d dpd-interval=2m dpd-maximum-failures=5

Как видно из вывода команды «ip ipsec peer print», параметры применились корректно. Теперь рассмотрим как эти же настройки применить через графический интерфейс управления роутером:

../../../_images/site_a_peers.png ../../../_images/site_a_peers_general.png ../../../_images/site_a_peers_advanced.png ../../../_images/site_a_peers_encryption.png

2-A. Для следующих шагов важно, чтобы предложенные алгоритмы аутентификации и шифрования совпадали на обоих маршрутизаторах. В этом примере мы будем использовать настройки параметров «по умолчанию». Чтобы просмотреть и проверить настройки параметра «proposal» выполняем команду «ip ipsec proposal print»:

[admin@Site "A"] > ip ipsec proposal print
Flags: X - disabled, * - default
 0  * name="default" auth-algorithms=sha1
      enc-algorithms=aes-256-cbc,aes-192-cbc,aes-128-cbc lifetime=30m
      pfs-group=modp1024

3-A. Задаем policy (полтитики) для IPSec:

/ip ipsec policy
add src-address=10.10.10.0/24 src-port=any dst-address=10.5.4.0/24 dst-port=any \
sa-src-address=172.16.0.12 sa-dst-address=156.67.54.143 \
tunnel=yes action=encrypt proposal=default

Проверяем внесенные изменения в параметры «policy»:

[admin@Site "A"] > ip ipsec policy print
Flags: T - template, X - disabled, D - dynamic, I - invalid, A - active, * - default
 0 T * group=default src-address=::/0 dst-address=::/0 protocol=all proposal=default template=yes
 1  A  src-address=10.10.10.0/24 src-port=any dst-address=10.5.4.0/24 dst-port=any protocol=all
       action=encrypt level=require ipsec-protocols=esp tunnel=yes sa-src-address=172.16.0.12
       sa-dst-address=156.67.54.143 proposal=default ph2-count=1

Как видно из вывода команды «ip ipsec policy print», параметры применились корректно. Теперь рассмотрим как эти же настройки применить через графический интерфейс управления роутером:

../../../_images/site_a_policies.png ../../../_images/site_a_policy_general.png ../../../_images/site_a_policy_action.png ../../../_images/site_a_policy_status.png

После того как мы выполнили предыдущие 3 шага по настройке маршрутизатора на стороне «A», переходим к настройке роутера на стороне «B».

Конфигурация Site «B»

1-B. Настройка параметров «IPsec peer» для Site «B» практически идентична конфигурации Site «A», отличаются только два параметра: IP-адрес удаленного пира - «address» и свой идентификатор - «my-id».

Выполнить эту настроку из консоли:

/ip ipsec peer
add address=156.67.54.238/32 my-id=address:172.16.0.15 auth-method=pre-shared-key secret="123456"

Проверяем внесенные изменения:

[admin@Site "B"] > ip ipsec peer print
Flags: X - disabled, D - dynamic, R - responder
 0     address=156.67.54.238/32 auth-method=pre-shared-key secret="123456" generate-policy=no
       policy-template-group=default exchange-mode=main send-initial-contact=yes nat-traversal=yes
       my-id=address:172.16.0.15 proposal-check=obey hash-algorithm=sha1 enc-algorithm=aes-256,aes-128
       dh-group=modp1024 lifetime=1d dpd-interval=2m dpd-maximum-failures=5

Как видно из вывода команды «ip ipsec peer print», параметры применились корректно. Теперь рассмотрим как эти же настройки применить через графический интерфейс управления роутером:

../../../_images/site_b_peers.png ../../../_images/site_b_peers_general.png ../../../_images/site_b_peers_advanced.png ../../../_images/site_b_peers_encryption.png

2-B. Проверяем, что параметры «proposal» созданы по умолчанию и совпадают параметрами роутера на стороне «A»:

[admin@Site "B"] > ip ipsec proposal print
Flags: X - disabled, * - default
 0  * name="default" auth-algorithms=sha1 enc-algorithms=aes-256-cbc,aes-192-cbc,aes-128-cbc lifetime=30m
      pfs-group=modp1024

Рузультаты вывода команд «ip ipsec proposal print» совпадают на обоих роутерах, между которыми будет создан туннель.

3-B. Cоздадим политики IPsec на стороне «B»:

/ip ipsec policy
add src-address=10.1.101.0/24 src-port=any dst-address=10.1.202.0/24 dst-port=any \
sa-src-address=192.168.80.1 sa-dst-address=192.168.90.1 \
tunnel=yes action=encrypt proposal=default

Проверяем внесенные изменения в параметры «policy»:

[admin@Site "B"] > ip ipsec policy print
Flags: T - template, X - disabled, D - dynamic, I - invalid, A - active, * - default
 0 T * group=default src-address=::/0 dst-address=::/0 protocol=all proposal=default template=yes
 1  A  src-address=10.5.4.0/24 src-port=any dst-address=10.10.10.0/24 dst-port=any protocol=all
       action=encrypt level=require ipsec-protocols=esp tunnel=yes sa-src-address=172.16.0.15
       sa-dst-address=156.67.54.238 proposal=default ph2-count=1

Как видно из вывода команды «ip ipsec policy print», параметры применились корректно. Теперь рассмотрим как эти же настройки применить через графический интерфейс управления роутером:

../../../_images/site_b_policies.png ../../../_images/site_b_policy_general.png ../../../_images/site_b_policy_action.png ../../../_images/site_b_policy_status.png

После того, как будут корректно выполнены шаги «1-A»-«3-A» и «1-B»-«3-B», туннель должен установиться и на обоих маршрутизаторах должны быть созданы две ассоциации безопасности .

Для проверки установления VPN-соединения на обоих маршрутизаторах необходимо поочередно выполнить команды «ip ipsec remote-peers print» и «ip ipsec installed-sa print».

[admin@Site "A"] > ip ipsec remote-peers print
Flags: R - responder, N - natt-peer
 #    ID     STATE              REMOTE-ADDRESS   DYNAMIC-ADDRESS    UPTIME
 0 RN        established        156.67.54.143                       7h55m41s


[admin@Site "B"] > ip ipsec remote-peers print
Flags: R - responder, N - natt-peer
 #    ID     STATE              REMOTE-ADDRESS  DYNAMIC-ADDRESS    UPTIME
 0  N        established        156.67.54.238                      7h58m45s

Из результата вывода выполнения команды «ip ipsec remote-peers print» видно, что соединение установилось (STATE - established). При этом флаг «N» показывает, что удаленный пир находится за NAT.

[admin@Site "A"] > ip ipsec installed-sa print
Flags: H - hw-aead, A - AH, E - ESP
 0  E spi=0xBDAD9B src-address=156.67.54.143:4500 dst-address=172.16.0.12:4500 state=mature auth-algorithm=sha1
      enc-algorithm=aes-cbc enc-key-size=256 auth-key="b09b24558822f70d618f86479ff06c948da2c3d8"
      enc-key="9d41abb6e038fead6b2943251e9a18589cbf96a1b21c9424d62c0d26d8cf3d08" add-lifetime=24m/30m
      replay=128
 1  E spi=0xE4C9D3 src-address=172.16.0.12:4500 dst-address=156.67.54.143:4500 state=mature auth-algorithm=sha1
      enc-algorithm=aes-cbc enc-key-size=256 auth-key="55971cf3d89e5377d1191ed7f9ba4253f1b6fe05"
      enc-key="0415a2ad4d141fd10642bf3c8e99f24e2d424295ac2b0f84d10c351972359706" add-lifetime=24m/30m
      replay=128


[admin@Site "B"] > ip ipsec installed-sa print
Flags: H - hw-aead, A - AH, E - ESP
 0  E spi=0xE4C9D3 src-address=156.67.54.238:4500 dst-address=172.16.0.15:
      state=mature auth-algorithm=sha1 enc-algorithm=aes-cbc enc-key-size=
      auth-key="55971cf3d89e5377d1191ed7f9ba4253f1b6fe05"
      enc-key="0415a2ad4d141fd10642bf3c8e99f24e2d424295ac2b0f84d10c3519723
      add-lifetime=24m/30m replay=128
 1  E spi=0xBDAD9B src-address=172.16.0.15:4500 dst-address=156.67.54.238:
      state=mature auth-algorithm=sha1 enc-algorithm=aes-cbc enc-key-size=
      auth-key="b09b24558822f70d618f86479ff06c948da2c3d8"
      enc-key="9d41abb6e038fead6b2943251e9a18589cbf96a1b21c9424d62c0d26d8c
      add-lifetime=24m/30m replay=128

Правила «обхода» NAT

На этом этапе, если отправить трафик через туннель IPsec, он не будет работать, пакеты будут потеряны. Это связано с тем, что оба маршрутизатора имеют правила NAT (маскарад), которые изменяют адрес источника перед шифрованием пакета. Маршрутизатор не может зашифровать пакет, поскольку адрес источника не совпадает с адресом, указанным в конфигурации политики. Для получения дополнительной информации см. Пример потока пакетов IPsec.

Чтобы это исправить, необходимо настроить правило обхода NAT.

Маршрутизатор Site «A»

/ip firewall nat
add chain=srcnat action=accept  place-before=0 \
 src-address=10.10.10.0/24 dst-address=10.5.4.0/24
[admin@Site "A"] > ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
 0    chain=srcnat action=accept src-address=10.10.10.0/24 dst-address=10.5.4.0/24 log=no log-prefix=""
 1    chain=srcnat action=masquerade out-interface=WAN log=no log-prefix=""
../../../_images/site_a_firewall_nat.png

Маршрутизатор Site «B»

/ip firewall nat
add chain=srcnat action=accept  place-before=0 \
 src-address=10.5.4.0/24 dst-address=10.10.10.0/24
[admin@Site "B"] > ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
 0    chain=srcnat action=accept src-address=10.5.4.0/24 dst-address=10.10.10.0/24 log=no log-prefix=""
 1    chain=srcnat action=masquerade out-interface=WAN log=no log-prefix=""
../../../_images/site_b_firewall_nat.png

Примечание

Если вы ранее пытались установить IP-соединение до того, как было добавлено правило обхода NAT, вы должны очистить таблицу соединений от существующего соединения или перезапустить оба маршрутизатора.

Очень важно, чтобы правило обхода было в верхней части всех других правил NAT.