Настраиваем часовой пояс, NTP-клиента.
/system clock set time-zone-autodetect=no time-zone-name=Europe/Moscow
/system ntp client set enabled=yes servers=0.ru.pool.ntp.org,1.ru.pool.ntp.org
Добавляем бридж и вешаем пул адресов на него же
/interface bridge add name=IKE2-loopback
/ip address add address=10.0.100.1/24 interface=IKE2-loopback network=10.0.100.0
/ip pool add name="IKE2" ranges=10.0.100.100-10.0.100.200
Настройку DNS вам нужно провести самостоятельно в зависимости от вашей специфики, но в итоге нам нужно, чтобы по адресу cloud-life.site пинговался IP-адрес настраиваемого VPN-сервера 66.66.66.66.
Следующий шаг — генерация сертификатов. Я разбил команды на блоки не случайно. Ошибки при генерации сертификатов нам не нужны. Выполняем по порядку, дожидаясь завершения процесса подписания, не прерывать!!!!
Генерируем корневой сертификат:
/certificate
add name=CA.cloud-life.site country=RU state=MO \
locality="Moscow region" organization=Cloud-life \
common-name=CA.cloud-life.site subject-alt-name=IP:66.66.66.66 \
key-size=2048 days-valid=3650 trusted=yes \
key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign
sign CA.cloud-life.site
Генерируем сертификат VPN-сервера:
add name=ikev2@cloud-life.site country=RU state=MO locality="Moscow region" \
organization=Cloud-life common-name=ikev2@cloud-life.site subject-alt-name=DNS:cloud-life.site \
key-size=2048 days-valid=3560 trusted=yes key-usage=tls-server
sign ikev2@cloud-life.site ca=CA.cloud-life.site
Создаём шаблон для дальнейшего создания сертификатов через копирование с шаблона:
add name=~clienttemplate@cloud-life.site country=RU state=MO locality="Moscow region" \
organization=Cloud-life common-name=~client-template@cloud-life.site \
subject-alt-name=email:~clienttemplate@cloud-life.site key-size=2048 days-valid=3650 \
trusted=yes key-usage=tls-client
Сертификат для схемы Site 2 Site (для микротика Site-2):
add copy-from=~clienttemplate@cloud-life.site name=s2s@cloud-life.site \
common-name=s2s@cloud-life.site subject-alt-name=email:s2s@cloud-life.site
sign s2s@cloud-life.site ca=CA.cloud-life.site
Для первого клиента:
add copy-from=~clienttemplate@cloud-life.site name=client-1@cloud-life.site \
common-name=client-1@cloud-life.site subject-alt-name=email:client-1@cloud-life.site
sign client-1@cloud-life.site ca=CA.cloud-life.site
Для второго клиента, а остальные по той же схеме:
add copy-from=~clienttemplate@cloud-life.site name=client-2@cloud-life.site \
common-name=client-2@cloud-life.site subject-alt-name=email:client-2@cloud-life.site
sign client-2@cloud-life.site ca=CA.cloud-life.site
Далее экспортируем сгенерированные ключи, но обратите внимание, что сертификаты экспортируются в разных форматах (pem и pkcs12). Обязательно установите пароль при экспорте, т.к. при его отсутствии ошибок не будет, но работать VPN тоже не будет. Ни в коем случае не экспортируйте CA-сертификат с паролем, т.к. тогда экспортируется и закрытый ключ.
/certificate export-certificate CA.cloud-life.site type=pem
/certificate export-certificate ikev2@cloud-life.site type=pem export-passphrase=passwordforexport
/certificate export-certificate s2s@cloud-life.site type=pem export-passphrase=passwordforexport
/certificate export-certificate client-1@cloud-life.site type=pkcs12 export-passphrase=passwordforexport
/certificate export-certificate client-2@cloud-life.site type=pkcs12 export-passphrase=passwordforexport
Скачиваем экспортированные сертификаты и сохраняем в одну папку. Я еще и переименовал скаченные сертификаты для удобства, удалив начало cert_export_.
Чуть настроим FireWall и изменим MSS. Правила размещайте перед запрещающими!!!! Я расположу их в самом начале списка (place-before=0)
/ip firewall filter
add action=accept chain=input comment="IKE2 - Accept UDP 500,4500 IPSec" \
dst-address=66.66.66.66 dst-port=500,4500 protocol=udp place-before=0
add action=accept chain=input comment="IKE2 - Accept IPSec-esp" dst-address=\
66.66.66.66 protocol=ipsec-esp place-before=0
add action=accept chain=input comment="Accept - In Ipsec" ipsec-policy=\
in,ipsec src-address=10.0.100.0/24 place-before=0
add action=accept chain=forward comment=\
"Accept - All Traffic from VPN to ANY" dst-address=192.168.0.0/22 \
ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
add action=accept chain=forward comment=\
"Accept - All Traffic from VPN to ANY" dst-address=0.0.0.0/0 \
ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
/ip firewall mangle
add action=change-mss chain=forward dst-address=10.0.100.0/24 ipsec-policy=\
in,ipsec new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=\
!0-1360 place-before=0
Добавим правила NAT и поместим их над правилом основного маскарада:
/ip firewall nat
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
ipsec-policy=out,none out-interface-list="WAN interfaces" place-before=0
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
ipsec-policy=out,none out-interface-list="WAN interfaces" src-address=\
10.0.100.0/24 place-before=0
add action=src-nat chain=srcnat comment="ike2 masq non ipsec" ipsec-policy=\
out,none out-interface=WAN src-address=10.0.100.0/24 to-addresses=\
66.66.66.66 place-before=0
Настраиваем параметры IPSec. Настройка едина как для конфигурации Client 2 Site, так и для Site 2 Site:
/ip ipsec policy group
add name="clients"
add name="s2s
«
/ip ipsec profile
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
hash-algorithm=sha256 name="cloud-life.site"
/ip ipsec peer
add exchange-mode=ike2 local-address=66.66.66.66 name=\
"peer VPN" passive=yes profile="cloud-life.site"
/ip ipsec proposal
add auth-algorithms=sha512,sha256,sha1 enc-algorithms="aes-256-cbc,aes-256-ctr\
,aes-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-cbc,aes-128-ctr,aes-128-gcm" \
lifetime=8h name="cloud-life.site" pfs-group=none
/ip ipsec mode-config
add address-pool=IKE2 address-prefix-length=32 name=clients.cloud-life.site split-include=\
0.0.0.0/0 static-dns=10.0.100.1 system-dns=no
add address=10.0.100.2 name=s2s.cloud-life.site split-include=10.0.100.1 static-dns=10.0.100.1 \
system-dns=no
/ip ipsec identity
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
generate-policy=port-strict match-by=certificate mode-config=clients.cloud-life.site \
peer="peer VPN" policy-template-group="clients" \
remote-certificate=client-1@cloud-life.site remote-id=user-fqdn:client-1@cloud-life.site
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
generate-policy=port-strict match-by=certificate mode-config=clients.cloud-life.site \
peer="peer VPN" policy-template-group="clients" \
remote-certificate=client-2@cloud-life.site remote-id=user-fqdn:client-2@cloud-life.site
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
generate-policy=port-strict match-by=certificate mode-config=s2s.cloud-life.site \
peer="peer VPN" policy-template-group="s2s" \
remote-certificate=s2s@cloud-life.site remote-id=user-fqdn:s2s@cloud-life.site
/ip ipsec policy
add dst-address=10.0.100.2/32 group=s2s proposal=cloud-life.site src-address=10.0.100.1/32 template=yes
add dst-address=10.0.100.0/24 group=clients proposal=cloud-life.site src-address=0.0.0.0/0 template=yes
Сразу добавим GRE-туннель, который в дальнейшем позволит нам легко настроить маршрутизацию между офисами:
/interface gre add local-address=10.0.100.1 name="IKEv2-GRE-Tunnel" remote-address=10.0.100.2
/ip route add distance=1 dst-address=10.10.10.0/24 gateway="IKEv2-GRE-Tunnel"
На этом настройку VPN-сервера можно считать законченной и пора переходить на сторону клиента.
Обсудить статью на форуме
No responses yet