摘要:
本文介绍如何在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