1.1.1 การเชื่อมต่อโมเดมแบบ PPP1.2 เอกสารนี้ไม่ได้ครอบคลุมถึง
1.1.2 การหมุนโมเดมด้วย dip และ chat
1.1.3 การใช้ PPP ล็อกอินแบบ PAP
1.2.1 การติดตั้งโมเดมสำหรับหมุนเข้า2. สิ่งที่จำเป็นต้องมีนนอกจาก Linux PC
1.2.2 การเชื่อมต่อแบบ Multilink PPP หรือ EQL
1.2.3 การเชื่อมต่อด้วย ISDN หรือ Sync PPP
1.2.4 การหมุนโมเดมและวางหูอัตโนมัติ ตามการใช้งาน (On demand dial)
2.1 โมเดม แบบอนาล็อก จะเป็นความเร็ว 9600bps หรือ 56000bps ก็ แล้วแต่ ISP ของคุณจะรองรับ ถ้าจะให้ดีควรเป็น External modem3. ข้อมูลที่ต้องทราบ
เพระจะสังเกตการทำงานได้ง่ายและไม่ค่อยมีปัญหาเรื่องการเซต port/IRQ
2.3 โปรแกรม ppp deamon (pppd) โปรแกรมสำหรับหมุนโมเดมเช่น minicom , dip หรือ chat ซึ่งจะมีมากับทุก distribution อยู่แล้ว
2.5 สายโทรศัพท์คุณภาพดี สังเกตจากเสียงระหว่างสนทนา ถ้าเงียบสนิทดีก็ แสดงว่าอาจจะใช้ได้ อันนี้แล้วแต่ดวงด้วย (ขอให้โชคดี)
3.1 เบอร์โทรสำหรับออนไลน์กับ ISP4. ลงมือ ลุย!
3.2 ชื่อล็อกอิน (login name หรือ user name) และรหัสผ่าน (password)
3.3 หมายเลข IP ของ DNS server ซึ่งมักจะมีให้ 2 หมายเลข อันหนึ่งเป็น primary DNS และอีกอันเป็น secondary DNS ถ้าไม่ทราบจริงๆก็สามารถ ตรวจสอบเองได้(ะกล่าวในภายหลัง)
3.4 ระบบการ login เช่นแบบ manual ต้องกรอก user name และ password เอง หรือแบบ อัตโนมัติ เช่น PAP
3.5 คุณเป็นสมาชิก (Account) ที่ได้ IP จริงหรือเปล่าหรือเป็น Shell Account ที่ใช้โปรแกรม SLIP emulator พวก SLIRP หรือ TIA
ตัวอย่างใน HOWTO นี้จะใช้
- โมเดมที่ COM1 หรือ port = /dev/ttyS0 (กรณีเป็น COM2,3,4 จะใช้ /dev/ttyS1,/dev/ttyS2,/dev/ttyS3)
- ชื่อ login = nathanan
- รหัสผ่าน = mysecret
- DNS server = 203.148.211.2 ,203.148.255.70
4.1 ตรวจสอบค่า default ของ pppd4.3 การล็อกอินโดยใช้ dip scriptมีไฟล์ที่เกียวข้องดังนี้4.2 ทดสอบโมเดมว่าพร้อมต่อการใช้งานหรือเปล่าด้วยโปรแกรม dip
/etc/ppp/pap-secrets
/etc/ppp/chap-secrets
/etc/ppp/options
/etc/ppp/options.tty*
ถ้ามีไฟล์เหล่านี้ เราสามารถ move ไปเก็บไว้ directory อื่นก่อนได้ningnong:~# dip -t
DIP: Dialup IP Protocol Driver version 3.3.7o-uri (8 Feb 96)
Written by Fred N. van Kempen, MicroWalt Corporation.
DIP> port ttyS0
DIP> term
[ Entering TERMINAL mode. Use CTRL-] to get back ]
AT&F
OK
ATDT777777
CONNECT 38400
User Access Verification
Username: nathanan
Password:
~}#ภ!}!}!} }8}!}$}%}"}&} } } } }%}&8วฒิ}'}"}(}"*Q~~}#ภ!}!}!} }8}!}$}%}"}&}
ถ้ามีตัวอะไรยึกยือออกมาก็ไม่ต้องตกใจครับ มาถูกทางแล้ว
แต่ถ้าไม่มีก็ไม่ได้หมายความว่าผิดนะครับ บางคนอาจไม่มีแม้แต่ Login prompt
ซึ่งก็หมายความว่า ISP ของคุณใช้การตรวจสอบ password แบบ PAP หรือ
CHAP อย่างเดียว ใช้แบบ manual ไม่ได้
กรณีคุณต้องใช้โปรแกรม SLIP emulator คุณก็จะ login เข้า Unix host
ซึ่งจะมี prompt ของ login ที่คุณคุ้นเคย login เข้าไป แล้วทดลองพิมพ์ ppp
หรือ slirp ppp ถ้าผูดูแลระบบได้ติดตั้งโปรแกรม slirp เรียบร้อยแล้ว
คุณก็จะเห็นยี่ห้อของโปรแกรม slip emulator ตัวอย่างนี้เป็นโปรแกม SLIRP
แต่ถ้ายังไม่มีคุณสามารถไป download source code หรือ binary
ได้ที่ http://blitzen.canberra.edu.au/slirp/
Last login: Wed Jul 22 20:55:19 on ttyp4 from nongnok
You have mail.
host~$ slirp ppp
Slirp v1.0c (RELEASE)
Copyright (c) 1995,1996 Danny Gasparovski and others.
All rights reserved.
This program is copyrighted, free software.
Please read the file COPYRIGHT that came with the Slirp
package for the terms and conditions of the copyright.
IP address of Slirp host: 203.148.211.2
IP address of your DNS(s): 203.148.211.2
Your address is 10.0.2.15
(or anything else you want)
Type five zeroes (0) to exit.
[talking PPP, 115200 baud]
SLiRP Ready ...
กดปุ่ม Control-] เพื่อออกสู่ command mode ของโปรแกรม dip
จากข้อ 4.2 ถ้าคุณสามารถใช้การ login ด้วยมือได้ก็ลองพิมพ์4.4 การล็อกอินโดยใช้ chat script
dip> mode ppp
คุณจะออกสู่ command prompt ลองพิมพ์ route -n ดูสิว่า
link คุณ up หรือยัง
host~# route -n
Kernel routing table
Destination Gateway Genmask Flags MSS Window Use Iface
203.148.244.199 * 255.255.255.255 UH 576 0 29 ppp0
127.0.0.0 * 255.0.0.0 U 3584 0 3 lo
default 203.148.244.199 * UG 576 0 221 ppp0
ตรงคอลัมน์ Iface จะเห็น ppp0 ซึ่งเป็น network device
ลองใช้คำสั่ง ifconfig ppp0
host~# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:203.148.244.241 P-t-P:203.148.244.199 Mask:255.255.255.248
UP POINTOPOINT RUNNING MTU:576 Metric:1
RX packets:74824 errors:16 dropped:16 overruns:0 frame:0
TX packets:59652 errors:0 dropped:0 overruns:0 carrier:0 coll:0
ในตัวอย่างนี้ IP ที่ ISP คุณกำหนดให้คือ 203.148.244.241 แต่ถ้าคุณใช้ Slirp ก็จะได้ IP
เป็น 10.0.2.15 แทน ส่วน IP หมายเลข 203.148.244.199 คือ IP ของ terminal server ที่ด้าน ISP
แต่การที่จะต้องพิมพ์คำสั่งแบบยาวๆเราก็ควรประหยัดเวลาโดยการเขียน script
ลองอ่านตัวอย่างข้างล่างนี้ myisp.dip
8<------------- port ttyS0 reset dial 777777 wait name 20 send nathanan\r wait word 20 send mysecret\r sleep 3 mode ppp ------------>8หรือถ้าใช้ slirp
8<------------- port ttyS0 reset dial 777777 wait login 20 send nathanan\r wait word 20 send mysecret\r wait login 20 send slirp ppp\r sleep 3 mode ppp ------------>8เขียนเป็น script ไฟล์ .dip แล้วลอง
dip -v myisp
ก็จะ connect ได้ง่ายๆไม่ต้องพิมพ์ให้เมื่อย อย่าลืม chmod 700 myisp.dip ก่อนนะครับ
กันการขโมย account ครับ
โปรแกรม dip มีความสามารถในการทำ script ที่ดีทีเดียว สามารถกำหนดเงื่อนไขและ
ค่า IP กรณีที่เราใช้ SLIP หรือ CSLIP
ดูตัวอย่างต่อไปนี้ครับ
#
# ppp.dip เราใช้เครื่องหมาย # เป็น comment
#
main:
#
# โมเดมเราอยู่ที่ port ttyS0 หรือ COM1
port ttyS0
# ความเร็วของ serial port ปรกตอจะกำหนดไว้ที่ 38400bps
# แต่เราสามารถใช้ค่าที่สูงขึ้นได้จะทำให้ได้ทรูพุทสูงชึ้นการการ compression ข้อมูล
# โดยโมเดม
speed 57600
#
# reset โมเดมจะเป็นการ reset port และส่ง command ATZ ไปให้โมเดม
# PC บางเครื่อง พอ reset port เครื่องจะ hang ไปเลยก็สามารถเอาบรรทัดนี้ออกได้
reset
#
# ใส่ค่า $local เป็น IP address ถ้าเราได้ Fix IP
# get $local xxx.xxx.xxx.xxx
# แต่ถ้าเป็น dynamic IP. ก็ไม่ต้องใส่ครับ
get $local 0.0.0.0
# ค่า $errlvl หลังจาก sendหรือ dial จะมี code ดังต่อไปนี้
# 0 - OK
# 1 - CONNECT
# 2 - ERROR
#
# ใส่ Init string ของโมเดม(ถ้าจำเป็นลงในบรรทัดข้างล่างนี้)
send ATZ\r
wait OK 1
if $errlvl != 0 goto modem_trouble
# dial ก็คือหมุนครับ :)
dial 777777
if $errlvl != 1 goto modem_trouble
# ติดแล้วครับ หยุดรอ 2 วินาที
login:
sleep 2
# รอ prompt "login:"
wait ogin: 20
if $errlvl != 0 goto login_error
# ป้อน login name
send nathanan\r
# รอ prompt password
wait assword: 20
if $errlvl != 0 goto password_error
# ป้อน password
send mysecret\r
loggedin:
# ถ้าใช้ slirp ก็แก้บรรทัดข้างล่างเอา comment ออกครับ
# wait unix_prompt 15
# if $errlvl != 0 goto prompt_error
# send slirp ppp
done:
# เรียบร้อยครับติดแน่
print CONNECTED to the remote PPP server
mode PPP
goto exit
prompt_error:
print TIME-OUT waiting for the PPP server to fire up...
goto error
login_error:
print Trouble waiting for the Login: prompt...
goto error
password_error:
print Trouble waiting for the Password: prompt...
goto error
modem_trouble:
print Trouble ocurred with the modem...
error:
print CONNECT FAILED to the PPP server.
quit
exit:
reset
exit
ppp daemon (pppd) สามารถ dial-up ได้โดย4.5 การล็อกอินเข้า Linux Terinal server
ต้องพึ่งโปรแกรม chat ซึ่งมักจะมาด้วยกัน
ตัวอย่างการ ใช้ pppd + chat แบบง่ายๆ
pppd connect 'chat -v "" ATDT777777 CONNECT "" ogin: nathanan word: mysecret' \
/dev/ttyS0 38400 debug crtscts modem defaultroute
พารามิเตอร์ของโปรแกรม chat จะถูกใช้งานเป็นคู่ๆ ตัวแรกคือรอ(wait) ตัวถัดมาคือส่ง(send) สตริง
ออปชั่น -v คือ verbose mode; จะมี message ใน /var/log/messages
"" คือไม่ต้องรออะไร
ATDT777777 หมุนโมเดมได้เลย
CONNECT รอจะโมเดมส่ง string CONNECT คือ hand shake สำเร็จแล้ว
"" คือไม่ต้องส่งอะไร
ogin: รอ login: prompt
nathanan ส่ง login name
word: รอ password: promt
mysecret ส่ง password
ส่วน pppd จะใช้ option ต่อไปนี้
/dev/ttyS0 ในที่นี้คือ port COM1
38400 baud rate ของ port ttyS0
debug ส่ง debug message ให้ syslog
crtscts ใช้ hardware flow control
modem บอกให้ pppd รู้ว่าจะ disconnect ต้องวางหูก่อน
defaultroute ใส่ default route table เป็น ppp link นี้
ทั่วไปจะเขียน chat เป็น shell script เอาไว้เพื่อความสะดวกในการใช้งาน
ดังตัวอย่าง
/usr/sbin/ppp-on สคริปต์สำหรับเชื่อมต่อ ppp
/usr/sbin/ppp-off วางหูโทรศัพท์
/etc/ppp-on-dialer สคริปต์หมุนโมเดม ถูกเรียกใช้จาก /usr/sbin/ppp-on
กรณีที่เรามี account สำหรับการเรียกใช้ terminal server
หลายๆแบบ ก็ใช้ไฟล์นี้เป็น template แล้วเขียน
script สำหรับ login แยกเป็นหลายไฟล์
เช่น /etc/ppp/ppp-on-linux /etc/ppp/ppp-on-annex
/etc/ppp/ppp-on-cisco /etc/ppp/ppp-on-pap
ไฟล์เหล่านี้เป็น shell script ใน Slackware จะมีให้ ส่วน Redhat จะใช้สคริปต์ในไดรเกทอรี
/etc/sysconfig/...
ตัวอย่าง chat script
ไฟล์ /etc/ppp/ppp-on-linux
#!/bin/sh
#
exec chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD
ไฟล์ /usr/sbin/ppp-on
#!/bin/sh
#
ACCOUNT="nathanan"
PASSWORD="mysecret"
TELEPHONE=777777 # The telephone number for the connection
NETMASK=255.255.255.255
export TELEPHONE ACCOUNT PASSWORD
DIALER_SCRIPT=/etc/ppp/ppp-on-linux
exec /usr/sbin/pppd -d -detach crtscts /dev/ttyS2 38400 \
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
ถ้ายังไม่มีไฟล์ /usr/sbin/ppp-off สร้างดังตัวอย่างต่อไปนี้
#!/bin/sh
#
if [ "$1" = "" ]; then
DEVICE=ppp0
else
DEVICE=$1
fi
kill -INT `cat /var/run/$DEVICE.pid`
หากเราหมุนโมเดมเข้า Linux ที่ใช้ agetty หรือ getty ตัวอื่นๆ4.6 การล็อกอินโดยใช้ PAP
เมื่อเรา login เข้าไปใน shell เราสามารถเรียกใช้ pppd และตั้งค่า
ip address เองได้ ถ้าผู้ดูแลระบบอนุญาต
โดยที่ตัวอย่างนี้ 192.168.0.100 คือ IP ของเราและ 192.168.0.1 คือ IP ของ linux server
ตัวอย่างไฟล์ /etc/ppp/ppp-on-linux
#!/bin/sh
#
exec chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD \
'exec pppd passive' ''
ไฟล์ /usr/sbin/ppp-on ใส่ ip address ลงไปแทน noipdefault ดังนี้
#!/bin/sh
#
ACCOUNT="nathanan"
PASSWORD="mysecret"
TELEPHONE=777777 # The telephone number for the connection
NETMASK=255.255.255.255
export TELEPHONE ACCOUNT PASSWORD
DIALER_SCRIPT=/etc/ppp/ppp-on-linux
exec /usr/sbin/pppd -d -detach crtscts /dev/ttyS2 38400 \
192.168.0.100:192.168.0.1 netmask $NETMASK defaultroute \
connect $DIALER_SCRIPT
สำหรับ Terminal server บางตัวที่สามารถ login ด้วยวิธี PAP เพียงอย่างเดียว5. ปัญหาที่มักพบบ่อย
จะไม่ปรากฏ prompt ใดๆ ดั้งนั้น chat script จะเป็นดังนี้
ไฟล์ /etc/ppp/ppp-on-pap
#!/bin/sh
#
exec chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT ''
การส่ง password จะทำโดย pppd ดังนั้นเราจะต้องเตรียม password ไว้ก่อนในไฟล์
/etc/ppp/pap-secrets
ตัวอย่างไฟล์ /etc/ppp/pap-secrets
# name host secret
nathanan * mysecret
mysistor * hersecret
เราเลือก account มาใช้โดยกำหนดใน command line ของ pppd เช่น
ตัวอย่าง
ไฟล์ /usr/sbin/ppp-on-isp1
#!/bin/sh
#
TELEPHONE=777777 # The telephone number for the connection
NETMASK=255.255.255.255
export TELEPHONE
DIALER_SCRIPT=/etc/ppp/ppp-on-pap
exec /usr/sbin/pppd -d -detach crtscts /dev/ttyS0 38400 name nathanan\
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
หรือถ้าหากมี account เดียวก็สามารถใส่ในไฟล์ /etc/ppp/options
ตัวอย่าง
ไฟล์ /etc/options
name nathanan
5.2 ปัญหาที่มาจากสายโทรศัพท์
5.1.1 ไม่มีข้อความหรือสัญาณใดๆออกมาจากโมเดม ให้ตรวจสอบ IRQ ดูว่าชนกับอุปกรณ์
อื่นๆหรือเปล่า เช่น ttyS1 (COM2) จะใช้ IRQ 3 บางทีจะซ้ำกับ default IRQ ของ LAN card บางรุ่น
หรือ โมเดมแบบติดตั้งภายใน ttyS2 ttyS3 ซึ่งจะต้องตั้ง IRQ ให้ไม่ชนกับ ttyS1 ttyS2
โดย IRQ ที่เราสามารถตั้งได้คือ 5 7(ต้อง disable printer port) 9 2 โดยศึกษาการตั้งค่า
IRQ จากคู่มือ
ถ้าหากเป็นโมเดมที่ตั้งค่า IRQ จาก software เช่น Hayes Accura จะต้อง boot เครื่องด้วย
DOS ก่อนจากนั้นจึง load linux ด้วย LOADLIN.EXE
5.1.2 หลังจาก dial ติดแล้วมีตัวอักษรขยะ (ไม่ใช่ PPP negotitate) มักจะเป็นกับโมเดม USR
Sporters ให้ใส่ INIT String ด้งนี้
AT&FE0V1&A3&B1&D2&S0
5.1.3 เมื่อเริ่มหมุนโดเดมสัญญาณ DTR และOH จะติด ถ้าหากไม่ติดให้ตรวจสอบสายสัญญาณ
ว่าแน่นหรือไม่
5.2.1 connect แล้วหลุดบ่อย ให้ลด DTE (serial port)speed เช่นจาก 57600 เป็น5.3 ปัญหาที่มาจากการเซตค่าผิด
19200 9600 ตามลำดับ
5.2.2 โมเดมไม่หมุนแล้วบอก ERROR ว่า NO DIALTONE ทั้งๆที่มีสัญญาณให้หมุน
บางทีสัญญาณจากชุมสายอ่อนเกินไป หรือเป็นโมเดมจากต่างประเทศ ให้ใส่
ATX0
ลงใน INIT String
6. แหล่งข้อมูลเพิ่มเติม
5.3.1 ถ้ามี LAN card อยู่ default route อาจไม่ชี้ออกไป Internet ให้
route del default
route add default dev ppp0
หรือจะ delete default route ก่อนจะ dial ก็ได้
route del default
5.3.2 ครวจสอบค่า DNS server ในไฟล์ resolv.conf ตัวอย่าง
nameserver 203.148.211.2
domain myisp.net.th
ควรใช้ DNS ที่อยู่ใกล้ที่สุด (DNS server ของ ISP ของคุณ ไม่ควรใช้ตามตัวอย่าง)
6.1 SLIRP โดย sNOoPz http://www.thaiicq.com/snoopz/slirp.htm
6.2 Linux ISP Hookup Howto ftp://ftp.nectec.or.th/pub/mirrors/linux/pub/docs/HOWTO/ISP-Hookup-HOWTO
6.3 Linux PPP Howto ftp://sunsite.unc.edu/pub/Linux/HOWTO/PPP-HOWTO
6.4 PPP-FAQ ftp://ftp.nectec.or.th/pub/mirrors/linux/pub/docs/faqs/PPP-FAQ/PPP-FAQ
6.5 man pppd & man dip :)
Updated : 28 มิถุนายน 2547 / ปัญญา แสนมุข Panya Saenmuk <panya@spcom.co.th>