This is G o o g l e's cache of http://www.debianclub.com/node/83 as retrieved on 15 Feb 2007 22:39:30 GMT.
G o o g l e's cache is the snapshot that we took of the page as we crawled the web.
The page may have changed since that time. Click here for the current page without highlighting.
This cached page may reference images which are no longer available. Click here for the cached text only.
To link to or bookmark this page, use the following url: http://www.google.com/search?hl=en&q=cache%3Ahttp%3A%2F%2Fwww.debianclub.com%2Fnode%2F83&btnG=Search


Google is neither affiliated with the authors of this page nor responsible for its content.

User login

Links

debianclub.com
debian.org
ubuntuclub.com
blognone.com

Syndicate

Syndicate content

สร้างสคริปต์ 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

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