摘要:
本文介紹如何在linux上配置多個不同的isp,如何輕易地在它們之間切換。我們使用的概念不但適合配置一臺pc和一個internet聯接,也可用來使整個家庭同時上網,為了達到這個目的,我們在linux上配置了一個域名代理和ip欺騙。
介紹
internet訪問變得越來越輕易,大多數isp除了長期合約和月費外,不會問任何其它的事情。假如一個isp有技術問題,或者提供服務不好,你只需要切換到下一個isp,在德國,我們稱之為“internet by call”.并且會更進一步,你不需要注冊或者簽署任何文件,只需通過你的日常電話費單付賬。注重:這跟免費internet訪問
不一樣。免費internet通常處于堵塞崩潰的邊緣,并且數據包錯包較多,而使用“internet by call”時,有時你會花費相當高的費用,但能得到好的帶寬服務。不管你所在國家具體情況怎樣,這篇文章會告訴你如何快速地切換isp,在不同時候使用不同的撥號internet連接.
本文提及的internet訪問類型是從你的pc撥號ppp聯機到你的isp.在linux上有個叫作pppd的程序用來設置這種連接.pppd是一個非常棒的軟件,有很好的適應性,但是不幸的是pppd所帶的文檔只有相當舊的例子并且用特定的認證方式登陸進你的isp.使用這些例子來設置大多數現代的isp的聯接將會導致失敗,現在的isp多采用:
.動態ip地址分配
.自動域名配置
.chap或pap認證
.有時自動http請求重定向到代理服務器
這篇文章解釋了如何在linux下使用這些現代的功能.你僅僅需要從你的isp了解:電話號碼,登陸名和口令.
用linux和ip地址欺騙,可以很輕易地把整個地址池,整個網絡的計算機而不僅是一臺計算機通過一個ppp鏈路聯接上你的isp.為了實現這些,你需要至少一臺linux機器和任意數量的其它計算機.這看起來象下圖:
假如你使用這樣的ip欺騙linux網關,并且使用不同的isp,那么你會通常碰到兩個問題:
1、每次當你切換isp時,dns服務器需要更換,你有不想每次重新配置你所有的計算機,非凡是假如某些計算機在運行windows和Mac os時.
2、你想有一個任何人可以選擇預配置好的isp列表,這個列表可能不適用你網中所有的操作系統.
我們可以用一個叫作dnrd的域名代理來解決問題1,并且可用一個CGI腳本產生一個你可以從哪里撥出的web頁面.
配置pppd
所有的pppd配置文件通常位于/etc/ppp,通常你需要以root身份啟動pppd.在安裝和最早的測試你需要以root用戶登陸.等會我將會告訴你如何讓任何人啟動和停止pppd,經常用root登陸不太好.root用戶限制非常小,能夠在不小心中輕易地破壞你的配置文件.
pppd的重要文件:
/etc/ppp/options:對所有isp有效的通用配置文件
/etc/ppp/pap-secrets:ppp認證的口令
/etc/ppp/ip-up:當ppp連接激活時,自動執行的腳本(當ip連接剛聯結上就執行)
/etc/ppp/ip-down:當ppp連接被中止時,自動執行的腳本
/etc/ppp/peers/:放置一個isp的特定配置文件的目錄
你可以下載這些文件的壓縮包ppp.tar.gz,把它在/etc/下解壓。子目錄ppp和其它子目錄將會在/etc下被創建.假如你已有/etc/ppp目錄,那么你應該在解壓前將它該名備份.
cd /etc
mv ppp ppp_old
tar zxvf ppp.tar.gz
解壓后,你會發現ppp.tar.gz中包含許多文件,它們都是用來簡化安裝,配置的交換腳本.(注重,按照示例中的配置文件中來做會付出一些代價,它們可能是錯誤的,查找isp的網頁,得到準確的信息.)
讓我們來看一下一個叫做arcor的isp的配置文件.
# This is /etc/ppp/peers/arcor
# Home page of the ISP arcor: http://www.arcor-online.de/
#----------
# serial device and modem speed (normally 38400 or 57600):
/dev/modem 57600
# modem dial-out script with phone number:
connect '/etc/ppp/scripts/ppp-on-dialer-pap 0192070'
# specific options, common options are
# read from /etc/ppp/options
noipdefault
# tell pppd to use this users name for PAP authentication:
user arcor
# try dynamic dns:
usepeerdns
#
以#開頭的行是注解行,
第一個變量(/dev/modem)是使用的串口設備,/dev/modem是你的modem使用的設備的軟聯接.(/dev/ttyS0或/dev/ttyS1):
cd /dev
ln -s ttyS0 modem
57600是modem速度,這取決于你的modem硬件.以connect開始的那行指定了一個腳本(/etc/ppp/scripts/ppp-on-dialer-pap)通過AT指令集來處理與modem之間的通訊.這些AT指令是關于modem的ASCII命令語言.傳給腳本的變量參數是要撥的電話號碼(0192070).
noipdefaults是分配動態IP地址所需要的選項;usepeerdns是自動DNS配置所需要的選項.自動DNS配置工作原理就是:
假如你的ISP在握手期提供給你一或者兩個DNS服務器的IP地址,那么它們將會在/etc/ppp/ip-up腳本中作為變量DNS1或DNS2被引用.
所有的解析器庫函數都需要讀一個叫作/etc/resolv.conf的文件來找出如何解析名稱的方法.這個文件被netscape,sendmail等應用程序使用來查找DNS服務器.我們將會在ip-up腳本中來改變/etc/resolv.conf
盡管我們定義了電話號碼,modem速度,使用的串口,一些pppd的配置選項.在這里我不想討論/etc/ppp/options中的通用配置選項.你可以看一看例子文件和pppd的man手冊.這樣我們現在就可以來撥號到我們的ISP.要撥號,我們還需要做多兩件事.
登陸名:arcor
口令:internet
這些信息需要輸入到文件 /etc/ppp/pap-secrets中,登陸名同時要輸入到文件/etc/ppp/peers/arcor中.
象下面例子一樣在文件/etc/ppp/pap-secrets中加上一行:
# This is /etc/ppp/pap-secrets
# client server secret IP-addr
arcor * internet 0.0.0.0
就是這樣了,現在我們可以來測試一下,鍵入下面一行來撥號:
pppd call arcor
在這會arcor是指在目錄/etc/ppp/peers/ 中的配置文件的名字.
modem將會撥號,幾秒鐘之后,你就在線了.當你在線的時候,用命令/sbin/ifconfig將會顯示一個叫作ppp0的接口.多試幾次直到你能看到它,現在你可以使用你的web瀏覽器到linuxfocus.org沖浪了.
要終止INTERNET連接你可以用命令
kil lall pppd
我希望這個例子你能用的上,在德國的讀者這會肯定能象這樣工作了,其它國家的人當然要改寫他們ISP的電話號碼,登陸名和口令.假如不能正常工作,請看本文結尾部分的疑難解決篇.
現在,你有一個工作的ISP了,要增加其它的ISP可以如下操作:
1,拷貝文件 /etc/ppp/peers/arcor給新的名字
2,改變該文件的電話號碼和用戶信息
3,在文件/etc/ppp/pap-secrets中加多一行
拷貝這個文件和使用一個文本編輯器修改要比用圖形化配置工具要快得多和輕易得多.
出于這個目的,你應該大略了解下面的機制如何工作,下面,我們將要使用一些腳本來讓它更輕易使用,我們非凡要介紹兩個Set-UID perl腳本,來讓你以普通用戶身份(非root用戶)登陸系統時可以啟動和停止internet撥號聯接.
Set-UID是一個讓普通用戶行使非凡的命令,并被當作這個命令的擁有者在執行的機制.顯而易見地,這需要小心設計,防止產生安全問題,這些Set-UID perl腳本已經被包含進你剛解包的ppp.tar.gz中.它們得文件許可中含有"s",并且屬于root用戶.
> cd /etc/ppp/scripts
> ls -al ppp-on ppp-off
-rwsr-sr-x 1 root root 1258 Jan 7 13:24 ppp-off
-rwsr-sr-x 1 root root 2619 Jan 9 20:30 ppp-on
假如它們沒有這樣的權限可以用下面的命令來改變它們:
chmod 6755 ppp-off ppp-on.
ppp-off 和ppp-on腳本僅僅是包裝腳本,它們做的僅僅是運行pppd call some-config-file 或者killall pppd.
這樣的好處是所有的用戶現在可以執行它.ppp-on腳本被作為一些非凡的調用被那些不使用自動DNS配置的isp使用.
假如你碰巧有一個這樣的isp,那么編輯這個文件,搜索"static",這里面有一些例子可用來修改,你象下面一樣使用ppp-on/ppp-off 腳本.
撥號上網:
/etc/ppp/scripts/ppp-on arcor
中止聯接:
/etc/ppp/scripts/ppp-off
現在你機器上的所有用戶都可以使用它們了.arcor 對應/etc/ppp/peers/下的一個文件名.你或許想更歡一個不同的名字.
最后,我們將使用一個圖形化界面來啟動和停止internet聯接,一個cgi程序是一個生成交互式頁面的程序.一個設計良好的cgi程序在任何操作系統和任何瀏覽器上都工作正常.這就是為什么我們使用cgi程序.它看起來象這樣.
幾乎所有現在發行的linux版本都會帶有一個配置好的apache WEB服務器,你所需要作的僅僅是解壓pppcontrol.gz
并且拷貝到你WEB服務器的cgi目錄下(大概是/home/httpd/cgi-bin/),為了讓它可執行,鍵入:
chmod 755 pppcontrol
接著編輯改文件,修改這個perl 腳本中的$url變量。
當然你要先用gunzip把pppcontrol.gz解壓為pppcontrol。
$url一定要是這個腳本自己的url地址,比如你的pc是一臺獨立的linux機器,并且使用自返ip地址的話,
$url="http://127.0.0.1/cgi-bin/pppcontrol"
這個pppcontrol cgi腳本要讀一個叫作/etc/ppp/gpppwrap.conf的配置文件。下面是它的使用語法:
ppponarg: - some additional comment string
減號符開始是將會在pppcontrol頁面上顯示但不會傳遞到/etc/ppp/scripts/ppp-on程序的注解。下面有個例子,假設你的/etc/ppp/peers下有isp配置文件"arcor"和"talknet":
# This is /etc/ppp/gpp