在家庭網絡 和“家庭辦公”一族中,PPP連接是非常實用的一項技術。本文將詳細講解在Linux局域網服務器中如何撥出和撥入的方法與技巧,即如何讓Linux服務器成為PPP的客戶端和服務器,同時講解如何設置回撥服務。 Linux下如何撥號上網 在Linux服務器中設置PPP
在家庭網絡和“家庭辦公”一族中,PPP連接是非常實用的一項技術。本文將詳細講解在Linux局域網服務器中如何撥出和撥入的方法與技巧,即如何讓Linux服務器成為PPP的客戶端和服務器,同時講解如何設置回撥服務。
Linux下如何撥號上網 在Linux服務器中設置PPP,使其能夠撥號,並能連接到ISP,從而將計算機與Inte
.net相連。下面為Linux PPP客戶端設置的一般步驟。
1.編譯內核使其支持PPP
在大多數情況下,不用重新編譯內核。如果不能確認Linux是否需要編譯,可以查閱說明文檔,注意這個內核是否支持PPP。
2.設置串行端口和調制解調器
(1)串口設備文件
Linux下串口設備文件的命名和DOS的關系如下:
DOC COM1=Linux/dev/cua0(and/dev/ttyS0)
DOC COM2=Linux/dev/cua1(and/dev/ttyS1)
一般來說,/dev/cua*是用來撥出的,/dev/ttyS*是用來撥入的,但現在已經可以不加以區分了,都用的是/dev/ttyS*。如果計算機上沒有/dev/ttyS*,則需要用mknod來建立這些設備文件。有個腳本程序MAKEDEV可以簡化這個工作:
# cd/dev
# ./MAKEDEV ttyS0
(2)設置中斷號和I/O地址
使用如下命令設置中斷號:
/sbin/setserial/dev/ttyS0 ieq 3#串行鼠標
/sbin/setserial/dev/ttyS1 ieq 4#MODEM1
使用如下命令來查看系統的中斷設置,以確保沒有中斷沖突:
cat/proc/inter
rupts
I/O地址與中斷一樣必須是惟一的,可以設置硬件跳線來改變I/O地址。一般串行口的I/O地址是這樣的:
ttyS0 address 0x3f8
可以使用下面命令來查看系統的I/O地址設置,以確保沒有沖突:
cat/proc/ioports
(3)設置調制解調器
一般情況下,調制解調器的出廠設置不用改變什麼。
3.掌握ISP的信息
需要知道ISP一些基本信息,特別是DNS地址,並自己設置DNS。因為對於Linux來說,它不允許在連線之時動態地指定DNS的IP地址。
4.安裝撥號所需軟件
PPP客戶所需的程序有chat和pppd。還有一個終端通信程序minicom,用來測試撥號用的,也要安裝上。
chat程序的用途是撥號,並等待提示,根據提示輸入用戶名和密碼等登錄信息。pppd的用途是建立並維持與服務器的PPP連接,並傳輸數據。
5.手動方式建立ppp連接
整個ppp連接很明顯可分成兩個步驟:
(1)用pppd建立ppp連接
測試撥號能否成功,退出,然後執行pppd程序如下:
pppd debug lock Modem crtscts defaultroute /dev/ttyS1 115200&
在一個單獨的虛擬控制台上運行下面代碼:
tail-f/var/log/messages
動態地觀察各種日志信息,包括pppd的調試信息。如果看到下面信息就說明PPP連接成功了:
Jun23 16:10:31hxf pppd[1234]:local IP address210.88.131.151
Jun23 16:10:31hxf pppd[1234]:remote IP address192.168.10.21
(2)斷開連接
當測試通過後,需要把連接斷掉,使用如下命令:
Killall pppd
6.使PPP連接自動化
在經過手動連接測試之後,就要把這些變成自動的,目的是只用一個命令就能實現撥號連接。
要使撥號自動化需要兩個程序chat和pppd。要得到自動撥號的效果,具體的可查看相關資料。
7.設置域名解析(DNS)
Linux下設置域名解析不太方便,域名服務器需要自己設定。
(1)設置域名服務器
/ect/resolv.conf文件是存放域名服務器地址的地方,它的內容是這樣的:
domain your.isp.domain.name
nameserver202.106.196.152
nameserver202.106.196.115
需要做的事情就是把ISP的域名服務器地址填到這個文件裡。
(2)自動化
也許只想在撥號時才加上域名服務器地址,別的時間不需要,因此除了手動之外,還可以讓這個過程自動化。可以建立/etc/ppp/ip-up.local和/etc/ppp/ip-down.local兩個執行的腳本文件。pppd啟動之後,會執行/etc/ppp/ip-up.local裡的命令;而pppd結束時,會執行/etc/ppp/ip-down.local裡的命令。可以先生成一個包含域名服務器的文件,在ip-up.local中將這個文件改成/etc/resolv.conf,並將/etc/resolv.conf保存下來。在ip-down.local中再將保存的/etc/resolv.conf恢復回來。這樣就可以實現添加域名服務器的自動化了。
在局域網中設置撥入服務器
在局域網中設置撥入服務器目的就是將Linux局域網設置成跟ISP一樣的撥號服務器。假設用戶在公司用Linux設置了撥號服務器,然後在家裡通過撥號連到公司的撥號服務器上,進而訪問公司的局域網,如此就可以實現“家庭辦公”。如果公司的服務器是連在Internet上的,用戶就可以浏覽Internet了。“設置基本的撥號服務器”將告訴用戶怎樣實現這一功能。“回撥(Callback)”將講述怎樣節省聯網所需的電話費。
因為已經介紹如何用Linux服務器做PPP客戶端,所以這一節用Windows 98做客戶端來配合講述Linux服務器。
1.設置基本的撥號服務器
如果安裝了PPP服務,可以將/etc/sysconfig/network文件裡FORWARD_IPV4=false改成true就行了。之後需要重啟以激活IP轉發。
(1)使Liunx能夠接受電話撥入
現在要做的就是使Modem所接的那個串口可以接受外來連接。打開/etc/inittab,會看到這樣的幾行代碼:
#Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
在這幾行之後,加上如下一行代碼:
3:2345:respawn:/sbin/mgetty ttyS1
它的意思就是讓Mgetty的串口ttyS1上監聽,等待連接,如果有連接請求,Mgetty就向用戶提示輸入用戶名和密碼。
修改好之後,要使修改有效,可以運行如下代碼:
init q
為了從遠端登錄,還要有一個賬號,用useradd命令加一個叫ppp的用戶,並用passwd命令為它設置口令。
(2)啟動pppd與客戶建立PPP連接
打開/etc/passwd文件,找到用戶ppp的那一行,應該是這樣的:
ppp:x:500:500::/home/ppp:/bin/bash
由此可以看出,用戶ppp使用的shell程序是bash,現在要做的就是用pppd換掉這個bash。這樣當用ppp登錄時,就不會執行bash,而是執行pppd。如此,pppd就在服務器端啟動了。
具體可以在/etc/ppp建立一個ppplogin文件,內容如下:
#!/bin/sh
exec/usr/sbin/pppd debug passive asyncmap 0 proxyarp lock Modem crtscts
chmod+x ppplogin
用ppplogin替換用戶ppp的登錄shell,就像如下代碼:
ppp:x:500:500::/home/ppp:/etc/ppp/ppplogin
由於pppd執行必須要root權限,所以還要將pppd設成以root權限執行:
chmod u+s/usr/sbin/pppd
替換了登錄shell和修改pppd屬性之後,可以試一試。與前面介紹方法一樣進行撥號,在輸入用戶名和密碼之後,如果能看到pppd所特有垃圾字符,並且一行一行的沒完,就說明服務器端pppd已經啟動了。接著單擊“繼續”按鈕,也就是啟動客戶端的pppd,與服務器的pppd進行握手。過了一段時間,就會看到登錄網絡成功,其標志就是熟悉的綠色小計算機出現了。
(3)針對Windows 98客戶的特殊設置
Windows 98要求域名服務器在連接的時候傳給它。pppd有個參數ms-dns,就是用來傳DNS給客戶的。在ppplogin裡加上這個參數就可以了,比如:
#!bin/sh
exec/usr/sbin/pppd debug passive asyncmap 0 proxyarp lock
Modem crtscts ms-dns 202.106.0.20
這兩個DNS中,第一個DNS是主,第二個DNS是輔的。
2.回撥(Callback)
Callback就是當用戶撥號連到撥號服務器時,服務器先斷掉連接,然後再撥回給用戶。用戶的Modem接收這個呼叫,從而建立撥號連接。這樣就給“家庭辦公”創造了有利條件,可以在家裡用回撥的方式連到公司進行辦公。
(1)服務器端設置
在設置之前,應該確保Mgetty的Callback程序安裝好了。將下面這行內容加到/etc/mgetty+sendfax/login.config中:
call_hxf--/usr/sbin/callback-d-l ttyS1-s 115200 -S 62345678
前面的call-hxf是指為Mgetty增加一個名為call_hxf的用戶入口。這個用戶只是Mgetty用來啟動Callback程序的,而不是
Linux系統中的用戶,不要真的用useradd添加一個call_hxf用戶,這個call_hxf用戶名只是Mgetty用的,不是系統的。用戶通過Modem連到Linux上,Mgetty提示輸入用戶名時,如果輸入的是call_hxf,Mgetty就調用/usr/sbin/callback程序來處理回撥。參數-b是指在/var/log/mgetty.ttyS1留下調試信息;-1 ttyS1是指使用ttyS1為撥出設備;-s 115200是串口速率;-S 62345678是指定的回撥電話號碼。如果沒有-S參數,Mgetty就會提示輸入回撥的目的電話號碼。基於
安全考慮,建議這裡指定回撥的目的號碼,否則別人用call_hxf登錄,同樣也可以使用回撥了。
現在可以試一試在Windows 98環境下,使用“撥號後出現終端窗口”的撥號連接。當出現終端口並提示login時,輸入call_hxf。如果在login.config中沒有指定回撥號碼,現在就會有提示問回撥的電話號碼了。輸入現在使用的號碼,此時服務器斷開電話准備回撥,但是Windows 98會認為服務器斷了,彈出一個對話框告訴用戶服務器斷開連接,請稍候再試。過一段時間後,電話會振鈴,服務器正在回撥,但是Windows 98已經不響應了,看來Windows 98還要設置一下才能協調起來。現在還是把Linux服務器上的那個callback進程停止,不然它會一直播下去的。
(2)客戶端設置
服務器准備回撥的時候要把電話先斷掉。目的是讓Windows 98檢測不到這個變化,這樣它就不會退出撥號程序了。打開所使用的撥號連接的屬性的“常規”、“設置”、“連接”、“高級”、“附加設置”,將AT&C這個命令寫在附加設置裡。這個命令的意思就是讓串口聽載波檢測(Carrier Detect)那根線保持有效,這樣Windows 98就會認為電話一直是通的,服務器回撥時斷掉電話它就檢測不出來了。這樣Windows 98的撥號客戶程序就可以繼續與服務器對話,並建立連接了。
下面的工作就是使Windows 98能接聽服務器回撥的電話,並通過服務器的用戶認證。建立一個腳本文件callback.scp,內容如下:
proc main
waitfor "ogin:"
transmit "call_hxf^M"
waitfor "munber for callback:"
transmit "65145678^M"
waitfor "RING"
transmit "ATA^M"
waitfor "ogin:"
transmit "^M"
waitfor "assword:"
transmit $PASSWORD
tramsmit "^M"
endproc
在所使用撥號連接的“屬性”、“制作腳本”裡填上文件的全路徑和文件名。用戶根據實際情況修改相應地方。
此腳本由一個一個的waitfor-transmit對組成,收到登錄提示符“login:”,就發送callback的用戶名call_hxf。如果服務器沒有指定回撥的電話號碼,就要在收到“number for callback:”這樣的字符串後,發送自己的電話號碼。當用戶給了回撥號碼後(或服務器已經指定),服務器就掛斷電話、進行回撥。客戶端Modem檢測一個振鈴,就向串口發送一個RING字符串,Windows 98從串口讀到這個字符串,就會向Modem發出ATA命令,讓它接聽這個電話。之後,Mgetty向客戶提示輸入用戶名和密碼,這裡的$USERID和$PASSWORD就是引用用戶在撥號對話框裡填入的用戶名和密碼。
在這個過程中,Windows 98的撥號程序一直通知用戶正在驗證用戶名和口令。因為它不知道在做回撥,所以只好認為是在驗證口令了。在整個回撥過程中,不要隨便按“取消”,因為服務器端的Callback程序並不知道已取消了,它會一直撥電話。這個Callback程序的反應速度不是很快,在服務器斷掉電話到聽到回撥的電話鈴聲,可能要等20~30s。在回撥過程中,會發現在有一個被最小化的終端窗口,它就是Callback.scp腳本文件執行時的窗口。在聽到回撥的電話鈴聲時,會在這個窗口看到“RING”,這表示Modem收到一個振鈴。接著Callback.scp就會發出“ATA”接聽這個電話,PPP就通了。