Пример построения VPN

Построение IPsec VPN между NSX Edge и MikroTik

1. Пример конфигурации

1. NSX Edge:

WAN – 176.107.161.41, белый адрес для доступа в интернет;
LAN – 192.168.150.0/24, локальная сеть типа routed.

2. MikroTik:

WAN – 185.242.123.138, белый адрес для доступа в интернет;
LAN – 10.10.20.0/24, локальная сеть, находящаяся за роутером MikroTik.


2. Базовая настройка роутера MikroTik:

Если не требуется, переходим сразу к настройке VPN.

1. Настройка WAN:
ip address add address=<WAN_ip/mask> interface=<WAN_interface> network=<WAN_subnet_addr>

где
WAN_ip/mask – ваш IP-адрес и маска, в нашем примере это 185.242.123.138/29,
<WAN_interface> – интерфейс типа uplink, например, ether1,
<WAN_subnet_addr> – адрес подсети, в нашем примере это 185.242.123.136/29.

Пример из GUI WinBox.

2. Настройка LAN:
ip address add address=<LAN_ip/mask> interface=<LAN_interface> network=<LAN_subnet_addr>

где <LAN_ip/mask> – 10.10.20.0/24,
<LAN_interface> – интерфейс локальной сети, например, bridge1*,
<LAN_subnet_addr> – 10.10.20.0.

Пример из GUI WinBox.

*Если для LAN используется интерфейс типа Bridge, то его необходимо создать отдельно и добавить туда нужные интерфейсы.

3. Настройка Default route:
ip route add distance=1 gateway=<GW>

где <GW> – IP-адрес шлюза по умолчанию, в нашем примере это 185.242.123.137.

Пример из GUI WinBox.

4. Настройка NAT для локальной сети:
ip firewall nat add chain=srcnat out-interface=<WAN_interface> action=masquerade

где <WAN_interface> – интерфейс типа uplink, например, ether1.

Пример из GUI WinBox.

5. Настройка DNS: 
ip dns set servers=<server1>,<server2>

где <server1>,<server2> – это адреса DNS-серверов, например, публичные DNS Google 8.8.8.8, 8.8.4.4.

Пример из GUI WinBox.

6. Настройки безопасности*:

*Рекомендованы, но не обязательны.

ip service set telnet disabled=yes

#Выключаем Telnet

ip service set ftp disabled=yes

#Выключаем FTP (если не нужен)

ip service set ssh port=<SSH_portnum>

#Меняем порт SSH со стандартного TCP/22 на другой (отсекаем брутфорс)

ip service set www disabled=yes

#Выключаем доступ по HTTP

ip service set api disabled=yes

#Выключаем API (если не нужно)

ip service set api-ssl disabled=yes

#Выключаем API SSL (если не нужно)

ip service set www-ssl disabled=no

#Включаем доступ по HTTP

Пример настроек с консоли нашего MikroTik - ip service print:

Пример из GUI WinBox.

6.1. Настройки Firewall**:

**Рекомендованы, но не обязательны.

Блокируем:

  • внешние DNS-запросы;
  • WEB proxy;
  • Microsoft-DS;
  • LOC-SRV.

Разрешаем:

  • ICMP;
  • доступ по HTTPS и Winbox;
  • Established и Related соединения;
  • IPSEC ESP и AH;
  • порты UDP/500 и UDP/4500 для IKE.

В конце правило drop для всех всех входящих на интерфейс типа Uplink пакетов.

ip firewall filter add action=drop chain=input dst-port=53 in-interface=ether1 protocol=tcp
ip firewall filter add action=drop chain=input dst-port=53 in-interface=ether1 protocol=udp
ip firewall filter add action=drop chain=input dst-port=8080 in-interface=ether1 protocol=tcp
ip firewall filter add action=drop chain=input dst-port=135,445 in-interface=ether1 protocol=tcp
ip firewall filter add action=accept chain=input in-interface=ether1 protocol=icmp
ip firewall filter add action=accept chain=input dst-port=443,8291 in-interface=ether1 protocol=tcp
ip firewall filter add action=accept chain=input connection-state=established,related in-interface=ether1
ip firewall filter add action=accept chain=forward connection-state=established,related in-interface=ether1
ip firewall filter add action=accept chain=input in-interface=ether1 protocol=ipsec-esp
ip firewall filter add action=accept chain=input in-interface=ether1 protocol=ipsec-ah
ip firewall filter add action=accept chain=input dst-port=500,4500 in-interface=ether1 protocol=udp
ip firewall filter add action=drop chain=input in-interface=ether1

Пример настроек с консоли нашего - MikroTik ip firewall filter print:

Пример из GUI WinBox. Очередность действий для создания одного правила указаны. Вывод всех правил на скриншоте присутствует. Порядок правил очень важен, т.к. правила firewall отрабатываются сверху вниз.


3. Настройка VPN:

На роутере MikroTik:

1. Создаем профиль IPSec под именем S2SVPN, где указываем параметры шифрования:

ip ipsec profile add dh-group=modp2048 enc-algorithm=aes-256 hash-algorithm=sha256 lifetime=8h name=S2SVPN nat-traversal=no

Пример из GUI WinBox.

2. Создаем IPSec proposal под именем S2SVPN:

ip ipsec proposal add auth-algorithms=sha256 enc-algorithms=aes-256-cbc,aes-256-ctr,aes-256-gcm lifetime=1h name=S2SVPN pfs-group=modp2048

Пример из GUI WinBox.

3. Создаем IPsec-пир под именем S2SVPN, привязываем к нему ранее созданный IPsec profile S2SVPN:

ip ipsec peer add address=<remote_peer> exchange-mode=ike2 local-address=<WAN_IP> name=S2SVPN profile=S2SVPN

где <remote_peer> – IP-адрес NSX Edge, у нас 176.107.161.41,
<WAN_IP> – IP uplink, у нас 185.242.123.138.

Пример из GUI WinBox.

4. Создаем PSK-secret и привязываем его к ранее созданному пиру:

ip ipsec identity add peer=S2SVPN secret=<IPSec_secret>

где <IPSec_secret> – пароль для соединения, в нашем примере – qwerty123.

Пример из GUI WinBox.

5. Создаем политику с привязкой к ранее созданному пиру и proposal, в которой указываем связность между локальной подсетью и удаленной локальной подсетью:

ip ipsec policy add dst-address=<remote_subnet> peer=S2SVPN proposal=S2SVPN sa-dst-address=<remote_peer> sa-src-address=<WAN_ip> src-address=<local_subnet> tunnel=yes

где <remote_subnet> – локальная подсеть в облаке, у нас 192.168.150.0/24,
<local_subnet> – локальная подсеть на MikroTik, у нас 10.10.20.0/24,
<remote_peer> – IP-адрес NSX Edge, у нас 176.107.161.41,
<WAN_IP> – IP uplink, у нас 185.242.123.138.

Пример из GUI WinBox.

*ВАЖНО! Если в Site-to-Site VPN нужно добавить несколько локальных сетей, то нужно будет создать отдельную policy, а в поле Level во вкладке Action указать значение unique для каждой policy.

6. Дописываем правила в IP Firewall для того, чтобы разрешить трафик между сайтами VPN:

ip firewall nat add chain=srcnat dst-address=<remote_subnet> src-address=<local_subnet> (place-before = 0 *)
ip firewall raw add chain=prerouting dst-address=<local_subnet> src-address=<remote_subnet> (place-before = 0 *)

где <remote_subnet> – локальная подсеть в облаке, у нас 192.168.150.0/24,
<local_subnet> – локальная подсеть на MikroTik, у нас 10.10.20.0/24,

* Созданные в п. 3.6 правила ip firewall filter обязательно перемещаем вверх, т. е. они должны быть перед последним запрещающим правилом или ранее; для этого используется команда place-before. В данном случае правила нужно поставить первыми в списке, поэтому place-before = 0. Если же в цепочке правил данное правило будет первым, то команду place-before писать не нужно.

Пример из GUI WinBox.

7. Проверяем настройки:

ip ipsec profile print:
ip ipsec policy print:
ip ipsec proposal print:
ip ipsec peer print:

В WinBox нужно лишь зайти в IP → IPSec:

На роутере NSX Edge окно настроек* будет следующим:

  • PFS – Disable;
  • Local ID и Local Endpoint – 176.107.161.41, внешний адрес NSX Edge;
  • Local Subnets – 192.168.150.0/24, локальная сеть, которая используется для IPsec VPN за NSX;
  • Peer ID и Peer Endpoint – 185.242.123.138, внешний адрес MikroTik;
  • Peer Subnets – 10.10.20.0/24 – сеть, которая будет использоваться для IPsec VPN на стороне MikroTik;

*Подробная информация по настройке NSX Edge в инструкции

  • Encryption Algorithm – AES256, в соответствии с настройками из пункта Настройка WAN – enc-algorithm=aes-256 на MikroTik;
  • Authentication – PSK;
  • Pre-Shared Key – ключ, который будет использоваться для аутентификации, он должен совпадать  с ключом на стороне MikroTik из пункта Настройка NAT для локальной сети – <IPSec_secret>. В нашем случае ключ будет qwerty123;
  • Diffie-Hellman Group – DH14 в соответствии с настройками на Mikrotik из пункта Настройка WAN - dh-group=modp2048;
  • Digest Algorithm – SHA256, в соответствии с настройками из пункта Настройка WAN – hash-algorithm=sha256 на MikroTik;
  • IKE Option – IKEv2, в соответствии со значением exchange-mode=ike2 из пункта Настройка Default route в настройке IPSec VPN на MikroTik;
  • Sesion Type – Policy Based Session.

4. Проверка работоспособности

4.1. Проверка со стороны NSX Edge:

Channel Status – OK.
Tunnel Status – OK.

4.2. На консоли NSX Edge:

show service IPSec – Status: UP.

4.3. Проверка со стороны MikroTik:

Ip ipsec active-peers print – State Established.

WinBox:

4.4. Проверка ping между машинами:

В рамках примера проверим доступность командой ping машины, которая находится в локальной сети за MikroTik и имеет IP 10.10.20.10. Проверку осуществим с машины, которая находится в локальной сети за NSX Edge и имеет IP 192.168.150.10:

Проверим ping в обратную сторону:

На скриншоте видим, что ping есть и туннель работает исправно.

Если туннель не поднялся, смотрите дальше.


5. Troubleshooting проблем при построении туннеля:

5.1. Проверяем идентичность настроек c обеих сторон, особое внимание стоит обратить на алгоритм шифрования (Encryption Algorithm), DH Group и PSK ключ.

5.2. Проверяем  наличие разрешающих правил FW:

5.2.1. Для работы IPSec между белыми адресами на стороне оборудования MikroTik на стороне NSX Edge данные правила ставятся автоматически.

5.2.2. Для прохождения трафика между локальными сетями на NSX и MikroTik.
* Пример корректных настроек Firewall на MikroTik можно посмотреть в пункте Настройки безопасности.

5.3. Проверяем MTU:
Необходимо с роутера MikroTik выполнить пинг внешнего IP-адреса NSX Edge, используя команду ping с дополнительными параметрами:

ping <remote-peer> src-address=<local-peer> do-not-fragment size=1500

где <remote-peer> – 176.107.161.41, а <local-peer> – 185.242.123.138.

WinBox:

Если получим сообщение типа packet too large and cannot be fragmented, fragmentation needed and DF set, то необходима дополнительная настройка TCP MSS. Для этого создадим соответствующее правило в Mangle:

ip firewall mangle add chain=postrouting action=change-mss new-mss=clamp-to-pmtu passthrough=yes tcp-flags=syn protocol=tcp out-interface=<uplink-interface> log=no

где <uplink-interface> – интерфейс типа Uplink, в нашем случае это был бы ether1.

5.4. Проверяем логи со стороны оборудования MikroTik, например, командой Log print, отфильтровать лог можно, добавив в команду follow where topics~"название события". Для удобства мы рекомендуем собирать логи на Syslog-сервер и далее смотреть там.

Фрагмент лога можно увидеть на скриншоте:

5.5. Если есть проблемы с работоспособностью IPSec-туннеля, например, не устанавливается вторая фаза и т.д. и т.п., следует включить дебаг IPSec и найти причину в подробном логе.

На MikroTik это делается следующим образом:

system logging add action=memory topics=ipsec prefix=IPSec

Winbox:

Телеграм канал
Салатовая телега
Полезные статьи и анонсы бесплатных вебинаров про дата-центры, облака, ИБ и телеком