因為我們已經講過如何用 Linux做 ppp 客戶,所以這一節我們用 win95做客戶來配合講述 linux 的服務器,因為畢竟 win95 做客戶還是多數嘛。 2.1 設置基本的撥號服務器 在這一節裡,我們一步一步的建立撥號服務器,力求做到條理清楚。做撥號服務器的方法很多,這裡講的只是其中一種方法而已。 我們首先要確保 linux的內核支持 ppp,並且支持IP轉發( IP ipchains),這個功能讓你通過 linux 撥號服務器訪問局域網上其他的機器,進而訪問 Internet ,而不只是撥號服務器本身。幸好現在的linux 發布版本所帶的內核都支持這些功能,如果你使用自己編譯的內核,你就要注意這個問題了。 在內核支持 IP 轉發之後,還要激活IP 轉發這個功能。使用如下命令: echo "1">/proc/sys/net/ipv4/ip_forward 如果使用 RedHat,可以將 /etc/sysconfig/network 文件裡的 FORWARD_IPV4=false 改成 true 就行了。之後需要重啟動以激活IP 轉發。 使 linux 能夠接受電話撥入 要實現這個功能,要用到一個叫 getty 的程序,它的功能就是向用戶顯示 login: 和 passWord: 這樣的登錄提示,並調用 login 程序實現登錄。我們平時在局域網裡用 telnet 登錄某台 unix 主機時,也是這個過程。只不過現在我們走的物理線路不同,我們走的是電話線—〉 modem —〉串口,而 telnet 程序走的是網線和網卡。 目前 linux 上有三種 getty : getty_ps , agetty , mgetty 。 getty_ps 就 是所說的 getty ,另外兩種也都實現了 getty的功能。其中 mgetty 的功能比較強大,我們決定就用 mgetty 了。 RedHat6 包含了mgetty 的四個軟件包,mgetty-1.1.14-8.i386.rpm 是必須安裝的,如果你要用回撥功能,就要安裝 mgetty-sendfax-1.1.14-8.i386.rpm , callback 程序包含在這個包裡(不明白為什麼在這個包裡)。我反正不管那麼多, rpm -Uvh mgetty* ,全安裝上算了。 我們現在要做的就是使 modem 所接的那個串口可以接受外來連接。打開 /etc/inittab, 你會看到這樣的幾行: # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingettytty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 在這幾行之後,加上如下一行: 7:2345:respawn:/sbin/mgetty ttyS1 它的意思就是讓 mgetty 在串口 ttyS1 上監聽,等待連接,如果有連接請求, mgetty 就向用戶提示用戶名和密碼。 Mgetty 也有好多參數,預知詳情,請看mgetty 的手冊頁。注意:程序的名字是 megtty 而不是上面幾行寫的 mingetty 。 Mingetty 是 RedHat自己的終端程序,它不支持 modem 連接。我的一個同學曾經把 mgetty 錯敲成 mingetty ,結果怎麼撥電話, linux 也不接。另外,這行開頭的數字“ 7 ”並不是一定的,只要是在文件中沒有重的,唯一的就行了,可以是兩個字符或數字。 改好之後,要使修改有效,運行: init q 為了從遠端登錄,我們要有一個賬號,用 useradd 命令加一個叫 ppp 的用戶,並用 passwd 命令為它設置口令。 下面我們就用 win95 的客戶來試一試,我們在 win95 下新建一個連接,電話號碼當然要填對,然後右鍵單擊這個連接,依次選擇屬性 - 〉常規 - 〉設置 - 〉選項,將“ 撥號後出現終端窗口”打上勾,再按兩次確定關閉對話框。現在雙擊這個連接,用戶名和 密碼不用填,直接按“連接”,你會聽到撥號聲和一陣亂叫,接著會彈出一個黑底白字的窗口,這就是登錄的終端窗口了!你會看到這與你登錄 linux 時是一樣的,輸入用戶名 ppp 和密碼,你看到的是 shell 提示符,你通過 modem 登錄到 linux 主機上了!但這 種終端的形式上網,並不是 ppp 連接,相信你一定不會滿意,你需要的是有 WWW ,FTP 等豐富功能的網絡。我們下面就來看看怎麼實現 ppp 連接,現在在 shell 提示符下輸入 exit 退出。 啟動 pppd 與客戶建立 ppp 連接 上面一小節已經實現跟 telnet 差不多的終端聯網,但還很不夠,現在我們要用 pppd 實現端對端的連接,實現真正的聯網。 為了給客戶分配 IP 地址,我們要編輯一個新文件: /etc/ppp/options.ttyXX 。文件名中的 ttyXX 就是你所用到的串口設備文件,我的就是 /etc/ppp/options.ttyS1 。 在這個文件中給出一個 IP 地址對,就像這樣: 10.39.1.1:10.39.1.123 冒號前面的的撥號服務器的 IP 地址,後面的是要分配給客戶的 IP 地址。 在前面講述 ppp 客戶時我們已經清楚, pppd 程序要在服務器和客戶機分別啟動,並進行握手,實現連接。客戶的 pppd 程序現在是用 win95 的撥號網絡,我們就不管了,服務器端的pppd 怎麼啟動呢?誠然,你可以登錄後手工輸入下面命令來啟動 pppd : pppd debug proxyarp asyncmap 0 lock modem crtscts 但這似乎太過麻煩,我們需要 pppd 能自動啟動,下面就來看看怎麼搞! 打開 /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 pppd 的參數大多都見過,其中 proxyarp 的意思就是讓 ppp 客戶通過 ppp 服務器訪問網上其他機器,而不只是 ppp 服務器一台。將 ppplogin 設成可執行的: 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 進行握手,一會兒,你就會看到登錄網絡成功,那個熟悉的綠色小電腦又出了!你是不是意識到什麼?對了!你可以上網了!如果你使用 linux 做客戶的話,工作就完成了。但是由於 win95 的一些特殊要求,我們還要針對 win95 做一些特殊設置。 針對 win95 客戶的特殊設置 前面談到了 win95 與 linux 做客戶,對域名服務器的要求是不一樣的。Win95 要求域名服務器在連接的時候傳給它,這在 linux 撥號服務器上怎麼做呢? 如果你看過 pppd 的手冊頁,你可能已經看到 pppd 有個參數 ms-dns ,它就是用 來傳 dns 給客戶的。在你的 ppplogin 裡加上這個參數就可以了,比如: #!/bin/sh exec /usr/sbin/pppd debug passive asyncmap 0 proxyarp lock \ modem crtscts ms-dns 10.39.0.133 ms-dns 10.39.1.133 兩個 dns 第一個是主,第二個是輔。 在前面講 win95 撥號時,我們使用“撥號後出現終端窗口”,然後手工輸入才登 錄上的,而別的 ISP 卻不是這樣。我們把“撥號後出現終端窗口”選項去掉,按照常規在撥號對話框裡填入用戶名和密碼,但這樣會出錯,怎樣才能按照常規那樣撥號不用彈出終端窗口呢? getty 有幾個配置文件在 /etc/mgetty+sendfax ,其中 login.config 是比較重要的。在 login.config 中有下面這樣一行: #/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login debug modem crtscts proxyarp lock 我們把行首的注釋 # 去掉就行了。由於撥號連接可以是 ppp 也可以是 slip ,Win95 客戶與撥號服務器對話的時候,要求自動使用 ppp , win95 客戶向撥號服務器發出某種信號,讓撥號服務器自動啟動 ppp 。我們這裡所做的就是讓 mgetty 響應 這個信號並啟動 pppd 實現AutoPPP 。我們看到這裡的 pppd 程序的參數多了幾個:auth -chap +pap login ,我們只要知道這些跟 win95 的安全認證有關系就行了, 具體含義請看 pppd 的手冊頁。為了支持這幾個參數,需要編輯 /etc/ppp/pap-secrets 文件。這個文件是 pap 認證用的,我們不做研究,在裡面填 上一行最通用的就行了,如果你要對用戶進行安全認證,請參閱 pppd 所帶的例子和相關的文檔。這個文件的內容就像這樣: # Secrets for authentication using PAP # client server secret IP addresses * * "" * 現在我們用 win95 建立一個新的撥號連接,就像連接別的 ISP 一樣輸入用戶名和口令,也可以在“保存口令”上打上勾,好了,連接吧!你會看到你的 linux 撥號服務器工作的像別的 ISP 一樣好!