IPsec VPN між віртуальними маршрутизаторами MikroTik за NAT Traversal (NAT-T)

Опис

У прикладі налаштовується VPN між двома віддаленими віртуальними маршрутизаторами MikroTik. Вони виходять до публічного інтернету через маршрутизатор провайдера, тому обидва перебувають за NAT-T. Налаштування наведено для консолі та графічного інтерфейсу WinBox.

Початкові умови

Робочі станції та інфраструктура також перебувають за NAT. Кожен майданчик має власну приватну підмережу:

  • 10.10.10.0/24 для майданчика A;

  • 10.5.4.0/24 для майданчика B.

  • Версія MikroTik: RouterOS 6.41.2 stable (CHR).

  • Версія WinBox: 3.18.

Попередження

Кроки можуть відрізнятися залежно від версій RouterOS і програмного забезпечення.

Примітка

Для встановлення VPN мають виконуватися такі вимоги:

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

  • UDP, порт 500 — IKE та керування ключами;

  • UDP, порт 4500 — IPsec NAT Traversal;

  • ESP, значення 50 — IPsec;

  • AH, значення 51 — IPsec.

  • Правила брандмауера не блокують трафік між маршрутизаторами та приватними підмережами.

  • Приватні підмережі, з’єднані через IPsec, відрізняються й не перетинаються.

Маршрутизатор

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

У прикладі створюється захищене IPsec-з’єднання між приватними мережами 10.10.10.0/24 і 10.5.4.0/24 за маршрутизаторами.

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

Налаштування майданчика 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. Алгоритми автентифікації та шифрування мають збігатися на обох маршрутизаторах. У прикладі використано стандартні значення. Перевірте їх:

[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. Створіть політику 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

Перевірте політику:

[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

Після трьох кроків на майданчику A налаштуйте маршрутизатор майданчика B.

Налаштування майданчика B

1-B. Конфігурація IPsec peer майданчика B майже ідентична майданчику A. Відрізняються адреса віддаленого вузла 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. Створіть політику 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

Перевірте політику:

[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 тунель має встановитися, а на кожному маршрутизаторі має бути створено дві асоціації безпеки.

Для перевірки виконайте 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

Стан 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 masquerade на обох маршрутизаторах змінюють адресу джерела до шифрування, тому вона більше не відповідає політиці. Докладніше дивіться в прикладі обробки IPsec-пакетів.

Створіть правило обходу NAT.

Маршрутизатор майданчика 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

Маршрутизатор майданчика 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

Примітка

Якщо ви намагалися встановити IPsec до додавання правила обходу NAT, видаліть наявне з’єднання з таблиці відстеження або перезапустіть обидва маршрутизатори.

Правило обходу має розташовуватися вище за всі інші правила NAT.