สร้างสคริปต์ DDNS สำหรับโมเด็ม adsl ให้ zoneedit

 

ต้องขอออกตัวก่อนครับ ว่าผมเป็นเพียงผู้ใช้งานเดเบียนคนนึง ไม่มีความรู้ลึกซึ้งกว้างขวางกับลินุกซ์เลย
ข้อเขียนต่อไปนี้จึงไม่ใช่สูตรสำเร็จแบบ How To แต่เขียนขึ้นเพื่อจุดประสงค์ในการแลกเปลี่ยนความรู้ จึงให้คิดว่าเป็นเพียงงานทดลองที่ใช้งานได้เท่านั้น
ในข้อเขียนนี้มีคำอธิบายที่ไม่ถูกต้องตามหลักวิชาการอยู่มากมาย (ลูกทุ่งสุด ๆ) ดังนั้นจึงยินดีรับข้อแนะนำเพื่อปรับปรุงให้ทราบกันต่อไปครับ

สมมุติว่า

  • เซิร์ฟเวอร์เราชื่อ www.example.com
  • เราลงทะเบียน dynamic dns ไว้ในฃื่อ MYUSERNAME รหัสผ่าน MYPASSWORD
  • อินเทอร์เฟสที่เกิดจากโมเด็มคือ ppp0

สำหรับการต่อเน็ต adsl แบบใช้โมเด็มในตัวเครื่อง จะเปรียบเสมือนกับว่าเราเป็นเราเตอร์เอง
จึงไม่ต้องการการ ping เพื่อตรวจสอบไอพีเป็นระยะ เหมือนกับการเชื่อมต่อผ่านเราเตอร์
เมื่อสายหลุด โมเด็มจะทำการเชื่อมต่อใหม่โดยอัตโนมัติ โดยขั้นตอนในการเชื่อมต่อจะเป็นดังนี้

  1. ตอนสายหลุด ระบบจะเรียกสคริปต์ /etc/ppp/ip-down.local
  2. ตอนที่เชื่อมต่อใหม่สำเร็จแล้ว ระบบจะเรียกใช้สคริปต์ /etc/ppp/ip-up.local

เราใช้แค่สคริปต์ /etc/ppp/ip-up.local ก็พอ โดยจะดักการเชื่อมต่อตรงจุดนี้
โดยเราจะสร้างสคริปต์ย่อยในการอัปเดตขึ้นมาอีกสคริปต์นึง เนื่องจากในการอัปเดต จำเป็นต้องมีชื่อผู้จดทะเบียนและรหัสผ่านอยู่ในสคริปต์ด้วย เราจึงต้องนำสคริปต์ไปไว้ในที่ปลอดภัย (ผมเอาไปใส่ใน /usr/sbin)

สำหรับ zoneedit.com
แก้ไขไฟล์ ip-up.local ดังนี้
# vi /etc/ppp/ip-up.local

...
if [ $PPP_IFACE == "ppp0" ]; then
    # REFRESH DNS
    # REFRESH IPTABLES
    # REFRESH SQUID
    # RECONNECT DDNS
    /usr/sbin/d.updatezoneedit
fi
...

สร้างสคริปต์อัปเดตชื่อ /usr/sbin/d.updatezoneedit ดังนี้
# vi /usr/sbin/d.updatezoneedit

#!/bin/bash
# SCRIPT FOR PPP TO UPDATE DNS RECORD AT zoneedit.com

# UPDATE FUNCTION
#usage: updatezonedit $USER $PASSWORD $IP_ADDR $DOMAIN $HOST 
#     : updatezonedit MYUSERNAME MYPASSWORD $PPP_IP example.com www.example.com

updatezoneedit() {
    USER=$1
    PASSWORD=$2
    IP_ADDR=$3
    DOMAIN=$4
    HOST=$5
    wget -O - --http-user=$USER --http-passwd=$PASSWD "http://www.zoneedit.com/auth/dynamic.html?host=$DOMAIN&type=A&dnsto=$IP_ADDR"
}

# BEGIN MAIN PROGRAM
I_FACE=ppp0
USER="MYUSERNAME"
PASSWD="MYPASSWORD"
DOMAIN1="example.com"
HOST1="www.example.com"

IP_ADDR=`ifconfig $I_FACE | fgrep -i inet | cut -d : -f 2 | cut -d \  -f 1`

# FOR example.com
echo "Updating $DOMAIN1 ..."
updatezoneedit $USER $PASSWD $IP_ADDR $DOMAIN1 $HOST1
echo "Finished."

# chmod 0700 /usr/sbin/d.updatezoneedit

ครั้งแรกเราเรียกใช้ครั้งเดียว ที่เหลือระบบจะทำอัตโนมัติทุกครั้งที่สายหลุด หรือเปิดเครื่อง
# /usr/sbin/d.updatezoneedit

เสร็จแล้วครับ
(ท่านใดเอาไปใช้งาน ถ้าไม่ผ่านรบกวนแจ้งด้วยนะครับ เพราะตัดทอนจากโปรแกรมที่ใช้งานอยู่ บางทีอาจตรวจทานหลุด เพราะทดสอบยาก)

 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.