23 กรกฎาคม 2558

Mikrotik Script update ddns for No-IP

กับบทความที่แล้วที่ทำให้กับ DYNDNS host กันมาแล้วในบทความนี้ก็ขอเอาใจคนใช้ No-IPหน่่อย เนื่องจาก script ที่ได้จาก wiki ของ mikrotik นั้น พอใช้กับ ADSL ของ true แล้วดันไม่อัพเดทเป็น ip ของ router แต่ไป update public ip เลยกลายเป็นว่า ไม่สามารถ ใช้งานได้

environment ที่ใช้ในการ config 
mikrotik routerboard model : RB951G-2HnD
software version : 6.30
ddns : no-ip host

ISP : true internet ADSL

script ที่ใช้ ก็ตามนี้นะครับ

# Define User account&Host ddns Variables
:global ddnsuser "username"
:global ddnspass "password"
:global ddnshost "***.no-ip.**"
# Define Global Variables
:global ddnsip
:global ddnslastip
:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }
:global ddnssystem ("mt-" . [/system package get system version] )
# Grab the current IP address on pppoe-out1 interface.
:global ddnsip [ /ip address get [/ip address find interface="pppoe-out1" ] address ]
:global ddnsip [:pick $ddnsip 0 [:find $ddnsip "/"]]
# Did we get an IP address to compare?
:if ([ :typeof $ddnsip ] = nil ) do={
   :log info ("DynDNS: No ip address present on pppoe-out1 interface , please check.")
} else={
# NORMAL ROUTINE FOR RUN WHEN CHANGE IP
  :if ($ddnsip != $ddnslastip) do={
    :log info ("No-IP: Sending UPDATE! IP:".$ddnsip)
    :local str "http://$ddnsuser:$ddnspass@dynupdate.no-ip.com/nic/update\?hostname=$ddnshost&myip=$ddnsip"
    /tool fetch url=$str
    :delay 1
    :local str [/file find name="No-IP.$ddnshost"];
    /file remove $str
    :global ddnslastip $ddnsip
    }
  }
เวลาใช้ก็ปรับแก้ส่วน ddnsuser, ddnspass แล้วก็ ddnshost ได้เลยครับ
ส่วน ใครที่ปรับแก้ interface pppoe-out1 ไป ก็ต้องไปแก้ชื่อให้ตรงด้วยนะครับ ไม่อย่างนั้นมันจะหยิบ ip ไป update no-ip ผิดนะครับ
หลังจากที่เราสร้าง script เสร็จเรียบร้อยเราก็ไปสร้าง scheduler มาเพื่อเรียก script ที่เราสร้างก็เป็นอันจบ ขั้นตอน เท่านี้ ก็จะสามารถ update ddns ไปให้ no-ipได้เรียบร้อยครับ

11 กรกฎาคม 2558

Script Mikrotik update DDNS

ไม่ได้เข้ามา update blog ซะนาน ก็ขอเขียน script เอาใจคนที่หันมาเล่นกับ routerboard ซะหน่อย เนื่องจากทาง เจ้าของ blog เองก็ได้ ให้ความสนใจกับตัวนี้แล้วก็มีปัญหา จากการ update ddns ของ dyndns ผ่าน เจ้า mikrotik เหมือนกัน เนื่องจาก script ที่ได้จาก wiki ของ mikrotik นั้น พอใช้กับ ADSL ของ true แล้วดันไม่อัพเดทเป็น ip ของ router แต่ไป update public ip เลยกลายเป็นว่า ไม่สามารถ ใช้งานได้

environment ที่ใช้ในการ config 
mikrotik routerboard model : RB951G-2HnD
software version : 6.30
ddns : dyndns host

ISP : true internet ADSL

script ที่ใช้ ก็ตามนี้นะครับ

# Define User account&Host ddns Variables
:global ddnsuser "username"
:global ddnspass "password"
:global ddnshost "***.dyndns.**"
# Define Global Variables
:global ddnsip
:global ddnslastip
:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }
:global ddnssystem ("mt-" . [/system package get system version] )
# Grab the current IP address on pppoe-out1 interface.
:global ddnsip [ /ip address get [/ip address find interface="pppoe-out1" ] address ]
:global ddnsip [:pick $ddnsip 0 [:find $ddnsip "/"]]
# Did we get an IP address to compare?
:if ([ :typeof $ddnsip ] = nil ) do={
   :log info ("DynDNS: No ip address present on pppoe-out1 interface , please check.")
} else={
# NORMAL ROUTINE FOR RUN WHEN CHANGE IP
  :if ($ddnsip != $ddnslastip) do={
    :log info ("DynDNS: Sending UPDATE! IP:".$ddnsip)
    :local str "/nic/update\?hostname=$ddnshost&myip=$ddnsip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
    /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
        password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
    :local str "http://$ddnsuser:$ddnspass@members.dyndns.org/nic/update\?hostname=$ddnshost&myip=$ddnsip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
    /tool fetch url=$str
    :delay 1
    :local str [/file find name="DynDNS.$ddnshost"];
    /file remove $str
    :global ddnslastip $ddnsip
    }
  }
เวลาใช้ก็ปรับแก้ส่วน username, password แล้วก็ dyndns host ได้เลยครับ
ส่วน ใครที่ปรับแก้ interface pppoe-out1 ไป ก็ต้องไปแก้ชื่อให้ตรงด้วยนะครับ ไม่อย่างนั้นมันจะหยิบ ip ไป update dyndns ผิดนะครับ
หลังจากที่เราสร้าง script เสร็จเรียบร้อยเราก็ไปสร้าง scheduler มาเพื่อเรียก script ที่เราสร้างก็เป็นอันจบ ขั้นตอน เท่านี้ ก็จะสามารถ update ddns ไปให้ dyndns ได้เรียบร้อยครับ