การเชื่อมต่อแบบ PPP
การเซ็ตอัพให้ลีนุกซ์เชื่อมต่อเครือข่ายอินเทอร์เนตแบบ PPP
ในการเชื่อมต่อคอมพิวเตอร์เข้ากับเครือข่ายของอินเทอร์เนตนั้น ทาง ISP จะทำการกำหนด
IP Numbers หรือหมายเลขประจำตัวของ IP ให้กับเครื่องที่ขอทำการเชื่อมต่อนั้น ในกรณี
ที่เป็นการขอเชื่อมต่อแบบ real PPP ซึ่งจะแตกต่างจาก slirp ที่เป็นลักษณะของการ
จำลอง slip เท่านั้น นั่นหมายความว่าหากทำการเชื่อมต่อเข้ากับอินเทอร์เนตแล้ว
ผู้ใช้จากที่อื่นๆในอินเทอร์เนตจะสามารถเข้าใช้บริการเครื่องของคุณได้ ตัวอย่างเช่น
ผู้ใช้คนอื่นๆในอินเทอร์เนตอาจจะทำการบราวซ์ดูเอกสาร HTML ของคุณได้ในกรณี
ที่เครื่องของคุณสามารถให้บริการแบบ HTML server
ได้
การกำหนดหมายเลข IP ให้กับคอมพิวเตอร์นั้นจะแบ่งออกเป็นสองแบบคือ static ip
กับ dynamic ip สำหรับ static ip นั้นหมายถึงเลข IP ที่ได้จาก ISP จะเป็นเลข IP
เลขเดิมตลอด ในขณะที่ dynamic ip จะมีการเปลี่ยนค่าเลข IP ที่กำหนดให้กับเครื่องที่
ติดต่อเข้าไปหาทุกครั้ง นั่นคือในการเชื่อมต่อแบบ dynamic ip นั้นจะได้ตัวเลขที่ไม่
เหมือนกันทุกครั้ง โดยทั่วไปแล้ว ISP ส่วนใหญ่จะกำหนดการเชื่อมต่อแบบ dynamic ip
ให้กับลูกค้าทั่วๆไป (เท่าที่ทดลองติดต่อ real ppp กับ อินเทอร์เนตไทยแลนด์และ
สามารถไซเบอร์เนตจะเป็นลักษณะของ dynamic)
โดยปกติแล้วเราสามารถใช้โปรแกรม dip เพื่อเข้าขอทำการเชื่อมต่อกับทาง ISP ใน
แบบ slip แต่สำหรับการเชื่อมต่อกับ ISP โดยวิธีแบบ ppp แล้ว มักจะนิยมใช้โปรแกรม
ที่เกี่ยวข้องกับ ppp บนลีนุกซ์ซึ่งก็คือ chat และ pppd
สำหรับการเชื่อมต่อแบบ ppp นั้นเราสามารถกำหนดให้เครื่องลีนุกซ์รับการติดต่อเข้ามา
เป็นแบบ ppp ซึ่งจะเรียกว่า ppp server หรือทำการติดต่อไปหายัง ISP เพื่อขอรับ
บริการ ppp ซึ่งจะเรียกว่า ppp client ก็ได้ หรือแม้แต่จะทำการกำหนดให้เครื่อง
ลีนุกซ์ทำงานพร้อมกันทั้งสองแบบก็ย่อมได้ สำหรับเอกสารฉบับนี้จะอธิบายเฉพาะวิธีการ
กำหนดให้ลีนุกซ์ทำหน้าที่แบบ ppp client
ในการจะใช้งาน ppp คุณจะต้องทำการคอมไพล์เคอร์เนลของคุณให้สามารถใช้งาน
ppp ได้เสียก่อน ให้คุณเลือก option ที่เกี่ยวข้องกับ protocol ppp ที่เกี่ยวข้อง
กับการ config kernel แล้วทำการคอมไพล์ใหม่ อย่างไรก็ดีเคอร์เนลที่คุณได้รับ
มาจากดิสตริบิวเตอร์ส่วนใหญ่ก็ติดตั้งเคอร์เนลที่ใช้งาน ppp ได้ มาให้อยู่แล้ว
สิ่งที่คุณจะต้องทราบก่อนการปรับแต่งให้เครื่องลีนุกซ์ของคุณใช้ ppp
-
หมายเลขโทรศัพท์ของ ISP
-
ISP ให้การเชื่อมต่อแบบ static ip หรือ dynamic ip
-
ใช้ PAP/CHAP หรือไม่ สำหรับ PAP/CHAP จะเป็นการตรวจสอบการมีสิทธิ์เข้า
ใช้งาน HOST ของ ISP แต่จะมีการตรวจสอบว่าชื่อเครื่อง (machine name) ที่มี
สิทธิ์ได้ใช้งานแทนที่จะเป็น ชื่อของผู้ใช้งาน (user name) แต่โดยทั่วไปแล้ว ISP
จะเปิดให้ใช้การติดต่อแบบปกติคือตรวจสอบชื่อผู้ใช้งาน (ไม่ได้ใช้ PAP/CHAP)
-
DNS ของ ISP คุณคืออะไร
ไฟล์ที่เกี่ยวข้องกับการเชื่อมต่อ ppp มีดังต่อไปนี้ หากคุณไม่พบสคริปต์ทั้งสองข้างล่างนี้ คุณจำเป็นจะต้องเขียนขึ้นมาใหม่ ซึ่งก็จะมีตัวอย่างไว้ให้แล้ว และอย่าลืมเปลี่ยน mode ของไฟล์ให้เป็น execute mode ด้วยคำสั่ง chmod +x [ชื่อสคริปต์]
เนื่องจากการใช้งานหลายๆอย่างต้องอาศัย root priveledge ดังนั้นก่อนการ
แก้ไขหรือใช้งาน pppd ขอให้คุณเข้าทำการล็อกอินเป็น super user (root)
เสียก่อน
-
/usr/sbin/pppd ซอฟท์แวร์สำหรับการเชื่อมต่อแบบ ppp
-
/usr/sbin/ppp-on สคริปต์สำหรับเริ่มการเชื่อมต่อ (จะไปเรียก pppd)
-
/usr/sbin/ppp-off สคริปต์สำหรับตัดการเชื่อมต่อ
-
/etc/ppp/options เป็นไฟล์ option ที่ pppd จะทำการอ่านเมื่อเริ่มต้นทำงาน
ตัวอย่างของ /etc/ppp/options
# /etc/ppp/options (NO PAP/CHAP)
#
# Prevent pppd from forking into the background
-detach
# If you are using a STATIC IP number, edit the 0.0.0.0 part of the
# following line to your static IP number.
0.0.0.0:
#
# use the modem control lines
modem
# use uucp style locks to ensure exclusive access to the serial device
lock
# use hardware flow control
crtscts
# create a default route for this connection in the routing table
defaultroute
# do NOT set up any "escaped" control sequences
asyncmap 0
# use a maximum transmission packet size of 552 bytes
mtu 552
# use a maximum receive packet size of 552 bytes
mru 552
#
#-------END OF SAMPLE /etc/ppp/options (no PAP/CHAP)
การเรียกใช้ ppp โดยการลงมือทำเอง (manual)
ให้ทำการหมุนโทรศัพท์เข้าไปที่ ISP หรือ Host ที่อนุญาต ให้เชื่อมต่อไปยัง
อินเทอร์เนต ด้วยการใช้ minicom ก่อนโดยทำการเรียก minicom ที่คอมมานด์ไลน์
วิธีการใช้ minicom จะคล้ายกับการใช้ telix ให้กด Ctrl-A-Z เพื่อแสดงคำสั่ง
ของ minicom ทั้งหมดขึ้นมา
เมื่อเชื่อมต่อได้แล้วให้กด Ctrl-A-Q เพื่อออกจาก minicom ซึ่ง minicom
ก็จะถามว่าต้องการออกแบบไม่ reset modem ใช่หรือไม่ ให้ตอบ "OK" ไป
เพื่อยืนยันว่าไม่ต้องการ reset modem เนื่องจากเราจะให้ ppp ใช้การเชื่อมต่อนี้
จากนั้นจึงสั่ง /usr/sbin/pppd -d -detach /dev/ttyS0
(ttyS0 สำหรับ com1 แต่ถ้าเป็น com2 จะเป็น /dev/ttyS1)
pppd จะทำการเชื่อมต่อแบบ ppp ให้
ให้ใช้ ifconfig ตรวจดู การเชื่อมต่อแบบ ppp --> ppp0 หากสามารถทำการติดต่อ
ได้สำเร็จจะเห็นผลลัพธ์ดังต่อไปนี้
ppp0 Link encap:Point-Point Protocol
inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0
UP POINTOPOINT RUNNING MTU:552 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
ลองใช้งานโปรแกรมที่เกี่ยวข้องกับอินเทอร์เนตดู เช่น บราวเซอร์, ftp, telnet, ping
เป็นต้น หากต้องการจะตัดการติดต่อให้ใช้คำสั่ง ps เพื่อแสดง PID (Process id) แล้ว
kill PID ของโปรแกรม pppd ทิ้ง
# ps -ax | grep pppd
1228 p0 S 0:00 grep pppd
1139 p1 S 0:00 pppd
# kill -9 1139
จะเห็นว่าหมายเลข PID ของโปรแกรม pppd ก็คือ 1139 (ไม่ใช่ 1228 เพราะเกิดจากคำสั่ง
grep) ให้ทำการ kill โปรแกรม pppd ตามตัวอย่าง
การเชื่อมต่อแบบอัตโนมัติ (Automatic)
จะต้องทำการแก้ไขสคริปต์ /etc/ppp/ppp-on ดังต่อไปนี้
#!/bin/sh
#
# Script to initiate a PPP connection. This is the first part of the
# pair of scripts. This is not a secure pair of scripts as the codes
# are visible with the 'ps' command. However, it is simple.
#
# These are the parameters. Change as needed.
TELEPHONE=0,,1601 # The telephone number for the connection
ACCOUNT=username # The account name for logon (as in 'username')
PASSWORD=passwd # The password for this account (and 'passwd')
LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0 # The proper netmask if needed
#
# Export them so that they will be available to 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in. Please use the absolute file name as the $PATH variable is not
# used on the connect option. (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
#
#
/bin/setserial /dev/cua1 spd_vhi
exec /usr/sbin/pppd debug /dev/ttyS1 115200 \
$LOCAL_IP:$REMOTE_IP \
connect $DIALER_SCRIPT &
echo $! > /var/run/ppp-on.pid
ในการใช้งานสคริปต์ข้างต้นคุณจะต้องทำการแก้ไขข้อมูลต่อไปนี้เสียก่อน
-
จะต้องแก้หมายเลขโทรศัพท์
-
จะต้องแก้ชื่อผู้ใช้ที่จะขอล็อกอินเข้าไปใช้งานที่ ISP HOST
-
จะต้องแก้รหัสผ่านที่จะใช้ล็อกอิน
-
ถ้าเป็น static ให้ใส่หมายเลข IP ที่ได้รับมาจาก ISP ที่ LOCAL IP ADDRESS
แต่ถ้าเป็น dynamic ให้ใส่ 0.0.0.0:ที่ LOCAL IP ADDRESS
สำหรับสคริปต์ที่ทำการติดต่อกับ ISP HOST เพื่อส่งชื่อผู้ใช้และรหัสผ่านนั้นจะอยู่
ใน /etc/ppp/ppp-on-dialer
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
/usr/sbin/chat -v \
'ABORT' 'BUSY' \
'ABORT' 'ERROR' \
'ABORT' 'NO CARRIER' \
'ABORT' 'NO DIALTONE' \
'ABORT' 'Invalid Login' \
'ABORT' 'Login incorrect' \
'' 'ATZ' \
'OK' ATDT$TELEPHONE \
'CONNECT' '' \
'ogin:--ogin:' $ACCOUNT \
'ord:' $PASSWORD \
'>' 'ppp'
สคริปต์ ppp-on-dialer จะทำการติดต่อส่งชื่อผู้ใช้ รหัสผ่าน และเรียกโปรแกรม ppp
ที่ฝั่งของ ISP Host แบบอัตโนมัติโดยที่เราไม่ต้องทำการพิมพ์เหมือนตอนต่อแบบ
manual เลย
ให้แก้สคริปต์ที่สำหรับดักหรือรอรับ ข้อมูลที่ ISP HOST ส่งมาให้ สำหรับในตัวอย่างนี้
เมื่อโมเด็มสามารถติดต่อกับฝั่ง ISP ได้แล้ว ส่วน terminal ของ ISP จะแสดงข้อความ
ดังต่อไปนี้
Login: username <--- Login section
Password: passwd <--- Password section
ISP> ppp <--- System prompt
หาก HOST หรือ terminal ของ ISP ของคุณมีรูปแบบที่แตกต่างออกไปก็ให้แก้ไข
สคริปต์ที่ดักรอตามลำดับข้างต้น เช่น ส่วนใส่ชื่อทะเบียนผู้ใช้ อาจแสดงเป็น
Username :
ก็จะต้องแก้ส่วนล็อกอินพร้อมพต์