У многих возникает задача подцепить к офисной сети точку с динамическим IP (ну скажем ваша домашняя сеть). Итак все настройки сделаны осталось при смене внешнего IP с динамической стороны прописать его в IPSec политиках с обоих сторон.
Сразу оговорюсь: использование IPSec за NAT – дело не благодарное. Поэтому если ваш провайдер поставил вас за NAT лучше используйте PPTP с динамической точки в сторону статической (с белым IP).
Сделать базовую настройку объединения офисов можно при помощи мастера. Выясните текущий IP с динамической стороны и добейтесь работы VPN/IPSec с действующим IP.
Чтобы иметь сведения об IP динамической точки включаем функцию IP / Cloud:
В Cloud-DNS abcdef.sn.mynetname.net микротик динамической точки будет публиковать свой внешний IP при его смене.
1. Динамическая точка
Основная задача здесь следить за изменением своего публичного IP (который мы возьмем с внешнего интерфейса) и менять локальные IPSec политики.
Добавляем комментарий к IPSec политике (IP / IPSec / Policy) “MAIN_OFFICE”, чтобы из скрипта иметь возможность менять нужную политику, т.к. политик может быть несколько.
У локальной политики, с комментарием MAIN_OFFICE, необходимо, при смене публичного IP, менять параметр sa-src-address. Для этого добавляем скрипт (System /Scripts):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
:local localIP [/ip address get [find interface="<имя_wan_интерфейса>"] address] :for i from=( [:len $localIP] - 1) to=0 do={ :if ( [:pick $localIP $i] = "/") do={ :set localIP [:pick $localIP 0 $i] } } :local ipsecIP [/ip ipsec policy get [find comment="MAIN_OFFICE"] sa-src-address]; :if ($ipsecIP != $localIP) do={ log warning "Changed IP" /ip ipsec policy set [find comment="MAIN_OFFICE"] sa-src-address=$localIP; } |
,где <имя_wan_интерфейса> – замените на имя интерфейса (PPPoE, PPTP и т.д.) вашего интернет-подключения на динамической точке.
Добавьте этот скрипт в System / Sheduler, чтобы он выполнялся каждые, например, 5 секунд.
Скрипт работает так:
- Получаем IP адрес ($localIP) с WAN интерфейса в формате a.b.c.d/32;
- Убираем “/32” из $localIP;
- Получаем атрибут sa-src-address у IPSec политики с комментарием MAIN_OFFICE в переменную $ipsecIP;
- Если $localIP отличается $ipsecIP, то устанавливаем sa-src-address, у IPSec политики с комментарием MAIN_OFFICE, равным $localIP;
2. Статическая точка (с белым IP)
Здесь необходимо контролировать домен abcdef.sn.mynetname.net и при изменении менять фильтр Firewall (разрешающий входящие подключения с динамической точки), политики IPSec и peer связанные с этим подключением.
Чтобы идентифицировать правило Firewall, политику IPSec и IPSec Peer необходимо добавить к ним одинаковый комментарий, например, DYN_OFFICE;
Далее создаем скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
:local pointDNS "abcdef.sn.mynetname.net" :local pointIP [: resolve $pointDNS]; :local pointIPscope; set $pointIPscope "$pointIP/32"; :local ipsecComment "DYN_OFFICE"; :local ipsecIP [/ip ipsec peer get [find comment=$ipsecComment] address]; :if ($pointIPscope != $ipsecIP) do={ log warning "ChangedIP"; #change firewall filters /ip firewall filter set [find comment=$ipsecComment] src-address=$pointIP; # cahnge ipsec settings /ip ipsec policy set [find comment=$ipsecComment] sa-dst-address=$pointIP; /ip ipsec peer set [find comment=$ipsecComment] address=$pointIPscope; } else= { #log info "IP Not changed"; } |
, где в переменной $ipsecComment содержится комментарий для идентификации записей связанных с удаленной точкой, $pointDNS – Cloud-DNS имя удаленной точки.
Скрипт работает так:
- Разрешаем в $pointIP имя динамической точки abcdef.sn.mynetname.net;
- Добавляем к $pointIP суффикс “/32” и сохраняем в переменную $pointIPscope. Именно в таком формате задается атрибут address у IPSec Peer;
- Получаем значение атрибута address у IPSec Peer с комментарием DYN_OFFICE в переменную $ipsecIP;
- Если $ipsecIP отличается от $pointIPscope то:
- Устанавливаем атрибут src-address для правила Firewall с комментарием DYN_OFFICE равным $pointIP;
- Устанавливаем атрибут sa-dst-address у IPSec политики с комментарием DYN_OFFICE равным $pointIP;
- Устанавливаем атрибут address у IPSec Peer с комментарием DYN_OFFICE равным $pointIPscope;
Добавляем скрипт в System / Sheduler с интервалом, например, 10 секунд (учтите TTL Cloud-DNS).
Заключение
При смене IP понадобится некоторое время для восстановления связи, поэтому, если необходимо более оперативное восстановление лучше воспользоваться вариантом, например, с PPTP.
В статье использовалась RouterOS версии 6.22.