Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
:if ([:len [/system script job find script=SetIpSecDstAddrFromDns]]>1) do={
:error
}
:local DnsNameFromComment
:local ResolvedIpFromComment
:local ResolvedIpWithMaskFromComment
:local IpDstAddr
:local IpSaDstAddr
:local TunnelPolicy
:foreach IpSecPolicyCount in=[/ip ipsec policy find] do={
:set DnsNameFromComment [/ip ipsec policy get $IpSecPolicyCount comment]
:if ($DnsNameFromComment!="") do={
:do {
:set ResolvedIpFromComment ([:resolve $DnsNameFromComment])
:set ResolvedIpWithMaskFromComment ($ResolvedIpFromComment . "/32")
:set IpDstAddr [/ip ipsec policy get $IpSecPolicyCount dst-address]
:set IpSaDstAddr [/ip ipsec policy get $IpSecPolicyCount sa-dst-address]
:set TunnelPolicy [/ip ipsec policy get $IpSecPolicyCount tunnel]
:if ($ResolvedIpWithMaskFromComment!=$IpDstAddr or $ResolvedIpFromComment!=$IpSaDstAddr) do={
:if ($TunnelPolicy=no) do={
:log warning ("[SetIpSecDstAddrFromDns] Change IPsec policy dst-addr and sa-dst-addr from " . $IpSaDstAddr . " to " . $ResolvedIpFromComment . " for $DnsNameFromComment")
/ip ipsec policy set $IpSecPolicyCount dst-address=$ResolvedIpWithMaskFromComment sa-dst-address=$ResolvedIpFromComment
} else={
:log warning ("[SetIpSecDstAddrFromDns] Change IPsec tunnel policy dst-addr from " . $IpSaDstAddr . " to " . $ResolvedIpFromComment . " for $DnsNameFromComment")
/ip ipsec policy set $IpSecPolicyCount sa-dst-address=$ResolvedIpFromComment
}
}
} on-error={
:set ResolvedIpFromComment "unknown"
:log error ("[SetIpSecDstAddrFromDns] Cant resolve name " . $DnsNameFromComment)
}
}
}
:local IpPeerAddr
:foreach IpSecPeerCount in=[/ip ipsec peer find] do={
:set DnsNameFromComment [/ip ipsec peer get $IpSecPeerCount comment]
:if ($DnsNameFromComment!="") do={
:do {
:set ResolvedIpFromComment [:resolve $DnsNameFromComment]
:set ResolvedIpWithMaskFromComment ($ResolvedIpFromComment . "/32")
:set IpPeerAddr [/ip ipsec peer get $IpSecPeerCount address]
:if ($ResolvedIpWithMaskFromComment!=$IpPeerAddr) do={
:log warning ("[SetIpSecDstAddrFromDns] Change IPsec peer addr from " . $IpPeerAddr . " to " . $ResolvedIpFromComment . " for $DnsNameFromComment")
/ip ipsec peer set $IpSecPeerCount address=$ResolvedIpWithMaskFromComment
}
} on-error={
:set ResolvedIpFromComment "unknown"
:log error ("[SetIpSecDstAddrFromDns] Cant resolve name " . $DnsNameFromComment)
}
}
}
Mikrotik: настройка IPsec на автоматическое обновление адреса VPN сервера