一、什么是PPP协议
既然是拨号上网,就不能不提到PPP(point-to-point protocol)协议。PPP协 议具有以下特点:
是应用最广泛的广域网协议;
通过提供连接控制协议(LCP)和网络控制程序(NCP)协议家族来配置网络性能和网络设备,从而解决了Internet互联的问题;
一个PPP会话分为四个步骤(连接建立、连接质量控制、网络层协议配置、连接终止);
提供了密码认证协议(PAP)或者邀请握手认证协议(CHAP)来保证连接安全;
简而言之,PPP是在串连连接上运行 IP以及其它网络协议的一种协议,串列连结可以是直接的串列连接(使用无数据机缆线)或是使用数据机以及电话线路所造出的连结。使用 PPP,你可以把你的 Linux PC 连接到一台 PPP 服务器上并存取该服务器所连接的网络资源就如同你是直接连接在该网络上一般。你也可以把你的 Linux PC 设为一台 PPP服务器,这样一来其它电脑就可以拨入你的电脑并且存取在你区域网络里的资源。因为 PPP 是一种点对点的系统,因此你也可以使用两台 Linux PC 上的 PPP 把网络连结在一起(或是把区域网络连结到网间网络上)。最主要的差异当然是速度 - 标准的以太网路连线是10 Mbps(每秒百万位元),而在拨号上网这方面最大是33.6 kbps(每秒千位元)的速度(ISDN据说可以达到128kbps)。同时,依据 PPP 连线的型态,某些应用以及服务在使用上可能会有些限制。
当然,对于我们用户来讲,它也是一个server/client模型的应用。这个快速指南包括怎么在Linux下创建PPP server(客户端假设为windows),在Linux下怎么去拨号上网(当然是客户端)。
二、服务器
如果用户只想做为客户端拨号上网,则可以直接跳过本小节。但是如果做为网络应用的设计人员,就必须知道怎么搭建PPP服务器。
1. kernel必须支持,如果是Kernel2.0.x以上的默认安装,肯定支持PPP,启动时可以看到PPP的信息;
2. 获取pppd的源码,版本越高越好,适合Kernel2.0.x以上有ppp-2.3.5.tar.gz:
下载地址:如果你在当地有搜索引擎,自己找最近的。
ftp://cs.anu.edu.au/pub/software/ppp/
3.
假设安装到/usr/local/ppp目录下,则
bash$ cp ppp-2.3.5.tar.gz /usr/local/
bash$ cd /usr/local/
bash$ tar zxvf ppp-2.3.5.tar.gz
bash$ cd ppp-2.3.5
4. 按照README.linux操作,不外乎是:
./configure
make kernel
make
make install
(必须在安装目录/usr/local/ppp-2.3.5/下操作)
5
安装完后运行pppd,不必带参数,如果有乱码,则成功了一半; J
6
cd /etc/ppp (没有该目录则创建一个)
编辑options文件,看起来象这样:
0.0.0.0
asyncmap 0
netmask 255.255.255.0
proxyarp
lock
crtscts
modem
mtu 1500
(改数视Linux的网络参数而定,用ifconfig可以看到它)
mru 1500
(=mtu就行了)
注意以上各行的意义参照pppd的说明档,几乎不需要改动。
7.
给每个用户设立一个自动登陆的shell
如用户ppp0 (adduser 加入),问对应的bash时敲ppp0login;
ppp0login文件如下:
exec /usr/sbin/pppd passive /dev/ttyS0 115200 netmask
255.255.255.0 proxyarp : x.x.x.x
注意x.x.x.x是ppp0的登录后获得的IP,比如你可以指定为192.168.0.2等等。
8.
尝试登录及享受成功
为了简单,假设客户端是windows。准备从另一台Windows95/98机器登录。Windows中先设好拨号网络(如果没有modem,可以用 Null modem代替试验--其实就是串口+Cable,推荐先使用Null modem尝试),服务器类型必须是PPP。启动拨号程序(在连接--modem--配置--选项里设拨号前后出现终端窗口),连接后出现终端窗口,输入登录名及口令(可能先要按几下回车),OK,出现乱码! 按F7继续,一会儿又有终端窗口及乱码,F7继续,等一会就连接好了,然后就可以正常的网络通信了。如果客户端也是linux,见下面小节。
三、客户端
不同的linux厂家在x-window下都有自己的拨号程序。例如蓝点linux下的KDE拨号就很方便,但是由于是快速手册,我不可能列出各种软件的使用,如果你有更好的方法,请加入www.linuxaid.com.cn的论坛发表你的观点。这里我介绍最常用的在RedHat下的脚本拨号法。我假设你用的是RedHat5.2以上版本。
1.找出modem在计算机的哪一个串口上。modem如果通电,MR、HS灯应该亮,但是TR灯不亮。敲入下列命令:
bash$> echo AT>/dev/ttyS0
如果TR灯亮,则modem连接在COM1;如果不亮,则试/dev/ttyS1,亮则COM2;依此类推。
2.用脚本拨号,在/usr/doc/ppp-2.3.5/scripts目录下有例子。我们将其拷贝到正确的目录下执行。
Bash$> cp /usr/doc/ppp-2.3.5/scripts/ppp-on /usr/sbin
Bash$> cp /usr/doc/ppp-2.3.5/scripts/ppp-off /usr/sbin
Bash$> cp /usr/doc/ppp-2.3.5/scripts/ppp-on-dialer /etc/ppp
Bash$> cd /usr/sbin
Bash$> chmod +x ppp-on
Bash$> chmod +x ppp-off
Bash$> cd /etc/ppp
Bash$> chmod +x ppp-on-dialer
然后根据你的ISP作出相应的改动,比如ppp-on和ppp-on-dialer两个可执行文件:
ppp-on文件:只需要看我加入中文说明的地方
#!/bin/sh
#
# Script to initiate a ppp connection. This is the first part of the
# pair of scripts. This is not a secure pair of scr ipts as the codes
# are visible with the'ps' command. However, it is simple.
#
# These are the parameters. Change as needed.
TELEPHONE=32768 # ISP提供的上网电话号码
ACCOUNT=ynguo #账号名称
PASSWORD=faintyou #登录密码,注意修改本文件权限以便保密
LOCAL_IP=0.0.0.0 #本地IP地址,0.0.0.0表示由ISP动态分配
REMOTE_IP=0.0.0.0 #远端IP地址,一般为0.0.0.0
NETMASK=255.255.255.0 #子网掩码地址
#
# Export them so that they will be available at'ppp -on-dialer' time.
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials th e phone and logs
# in. Please use the absolute file name as the$PATH variable is not
# used on the connect option.(To do so on a'root' a ccount would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
#
# I put most of the common options on this command. Please, don't
# forget the'lock' option or some programs such as mgetty will not
# work. The asyncmap and escape will permit the PPP link to work with
# a telnet or rlogin connection. You are welcome to make any changes
# as desired. Don't use the'defaultroute' option if you currently
# have a default route to an ethernet gateway.
#
exec/usr/sbin/pppd debug lock modem crtscts/dev/tty S1115200
asyncmap20A0000 escape FF kdebug0$LOCAL_IP:$REMOTE_ IP
noipdefault netmask$NETMASK defaultroute connect$DI ALER_SCRIPT&
ppp-on-dialer文件:
#!/bin/sh
#
# This is part2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec chat-v
TIMEOUT3
ABORT’
BUSY
’
ABORT’
NO ANSWER
’
ABORT’
RINGING
RINGING
’
’’
AT
’OK-+++c-OK’ ATH0
TIMEOUT30
OK ATDT$TELEPHONE
CONNECT’’
username:--username:$ACCOUNT
password:$PASSWORD
需要注意的是,在ppp-on脚本的最后一行用exec启动pppd的参数中,/dev/ttyS1代表modem连结在COM2口上,115200 表示modem的速率,可以根据实际情况进行修改;此外,如果ISP提供的拨号提示不是username,而是login的话,需要将ppp-on- dialer中的username改为login (即把username和login去掉第一个字母)。
3.配置域名服务器
编辑/etc/resolv.conf文件,加入ISP提供的域名服务器的IP地址。例如:
search ustc.edu.cn
nameserver 202.38.64.1
4.拨号上网
上述准备工作完成之后,以root权限登录,开启Modem,运行ppp-on,该脚本将负责拨号、送出登录信息并完成协议验证,当看到Modem上的数据指示灯停止闪烁并保持连接状态的话,ppp就已经连接成功了。你可以用 netstat -r查看路由表或者pppstats检查ppp的状态,也可以通过Ping你的ISP,或者直接启动Netscape浏览器来检查,如果一切正常的话,那么你的Linux已经连接到Internet了。