Настройка динамического GRE туннеля на Mikrotik
Содержание
GRE — это просто, GRE over IPsec — это клёво… когда IP-адреса не меняются.
Динамический GRE
Если IP-адрес хотя бы одной из сторон динамический, то нужно отображать эти изменения в Mikrotik.

Для этого воспользуемся сервисом динамического DNS и скриптом, который будет брать IP-адреса точек подключения из DNS:
# Set GRE tunnel remote and local addresses IPs from DNS.
# Script needs in policies: read, write, test.
# Define interface name and domain name of each router.
:local interfaceName "gre1"
:local localRouterDomainName "r1.example.com"
:local remoteRouterDomainName "r2.example.com"
# Get current addresses
:local currentLocalIpAddress [/interface gre get $interfaceName local-address]
:local currentRemoteIpAddress [/interface gre get $interfaceName remote-address]
# Look up addresses
:local localRouterLookedUpIpAddress [:resolve $localRouterDomainName]
:local remoteRouterLookedUpIpAddress [:resolve $remoteRouterDomainName]
# Process local address
:if ($currentLocalIpAddress != $localRouterLookedUpIpAddress) do={
/interface gre set $interfaceName local-address=$localRouterLookedUpIpAddress
:log info "local $currentLocalIpAddress updated to $localRouterLookedUpIpAddress on $interfaceName"
}
# Process remote address
:if ($currentRemoteIpAddress != $remoteRouterLookedUpIpAddress) do={
/interface gre set $interfaceName remote-address=$remoteRouterLookedUpIpAddress
:log info "remote $currentRemoteIpAddress updated to $remoteRouterLookedUpIpAddress on $interfaceName"
}
Для работы скрипта нужны права read, write, test.
Скрипт можно запускать по таймеру. Я запускаю раз в 5 минут.