在家庭網絡和“家庭辦公”一族中,PPP連接是非常實用的一項技術。本文將詳細講解在Linux局域網服務器中如何撥出和撥入的方法與技巧,即如何讓Linux服務器成為PPP的客戶端和服務器,同時講解如何設置回撥服務。
Linux下如何撥號上網 在Linux服務器中設置PPP,使其能夠撥號,並能連接到ISP,從而將計算機與Internet相連。下面為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/interrupts 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