自动更新DDNS并更新IPSEC

IPSEC更新域名脚本

:local localip [/ip address get [find interface=pppoe-out1] address];

:set localip [:pick $localip 0 [:find $localip "/"]]

:local remoteip [:resolve XXX.3322.org]

:local peerA [/ip ipsec peer find comment=site-to-site]

:local policyA [/ip ipsec policy find comment=site-to-site]

:if ([/ip ipsec peer get  $peerA address]!="$remoteip/32" || [/ip ipsec peer get $peerA local-address]!=$localip || [/ip ipsec policy get $policyA sa-dst-address]!=$remoteip || [/ip ipsec policy get $policyA sa-src-address]!=$localip) \

  do={/ip ipsec peer set $peerA address="$remoteip/32" local-address=$localip

      /ip ipsec policy set $policyA sa-dst-address=$remoteip sa-src-address=$localip}


DDNS更新脚本

:local ednsuser "root"

:local ednspass "GzysCwLp"

:local ednshost "XXX.3322.org"

:local ednsinterface "pppoe-out1"

:local members "http://members.3322.org/dyndns/update?system=dyndns"

:local status

:local status [/interface get [/interface find  name=$ednsinterface] running]

:if ($status!=false) do={

:local ednslastip [:resolve $ednshost]

:if ([ :typeof $ednslastip ] = nil ) do={ :local ednslastip "0" }

:local ednsiph [ /ip address get [/ip address find interface=$ednsinterface ] address ]

:local ednsip [:pick $ednsiph 0 [:find $ednsiph "/"]]

:local ednsstr "&hostname=$ednshost&myip=$ednsip"

:if ($ednslastip != $ednsip) do={

/tool fetch url=($members . $ednsstr) mode=http user=$ednsuser password=$ednspass dst-path=$ednshost

:delay 2

:local result [/file get $ednshost contents]

:log info ($ednshost . " " .$result)

/file remove $ednshost ;

}

}